<?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>126408</bug_id>
          
          <creation_ts>2014-01-02 14:49:53 -0800</creation_ts>
          <short_desc>[WebGL2] Context creation</short_desc>
          <delta_ts>2015-09-14 10:51:39 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>140424</dependson>
    
    <dependson>140431</dependson>
          <blocked>126404</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>roger_fong</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>963903</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-01-02 14:49:53 -0800</bug_when>
    <thetext>Support creation of a WebGL2 context

var ctx = canvas.getContext(&quot;webgl2&quot;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963905</commentid>
    <comment_count>1</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-01-02 14:50:49 -0800</bug_when>
    <thetext>&lt;rdar://problem/15002170&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963906</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-01-02 14:51:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/15740768&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060719</commentid>
    <comment_count>3</comment_count>
      <attachid>244478</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-12 16:52:42 -0800</bug_when>
    <thetext>Created attachment 244478
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060720</commentid>
    <comment_count>4</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-12 16:53:49 -0800</bug_when>
    <thetext>I&apos;ve neglected to fix the non mac ports. Will do in next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060900</commentid>
    <comment_count>5</comment_count>
      <attachid>244537</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-13 13:01:11 -0800</bug_when>
    <thetext>Created attachment 244537
patch

Will fix Windows build after the patch lands.
Ignore remaining style errors, I&apos;ve made all the style fixes I thin are appropriate for this changeset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060912</commentid>
    <comment_count>6</comment_count>
      <attachid>244538</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-13 13:44:55 -0800</bug_when>
    <thetext>Created attachment 244538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060947</commentid>
    <comment_count>7</comment_count>
      <attachid>244538</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-01-13 14:37:36 -0800</bug_when>
    <thetext>Comment on attachment 244538
Patch

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

rs=me with a small comment

&gt; Source/WebCore/html/canvas/CanvasRenderingContext.h:57
&gt;      virtual bool is2d() const { return false; }
&gt;      virtual bool is3d() const { return false; }
&gt;      virtual bool isAccelerated() const { return false; }
&gt; +    virtual String type() const { return m_type; }

I wonder if we should change this to be: is2d(), isWebGL(), isWebGL2() and not have a type flag. We only support two (now three) context types, so we can think about a type field if we ever have more (which isn&apos;t really likely in the near term).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060997</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-13 16:37:23 -0800</bug_when>
    <thetext>This may have broken the iOS build:
Source/WebCore/html/canvas/WebGLContextGroup.h:29:10: error: &apos;WebGLRenderingContextBase.h&apos; file not found with &lt;angled&gt; include; use &quot;quotes&quot; instead
#include &lt;WebGLRenderingContextBase.h&gt;
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         &quot;WebGLRenderingContextBase.h&quot;
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060998</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-13 16:39:25 -0800</bug_when>
    <thetext>and
/Volumes/Data/cdumez/WebKit/OpenSource/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:118:5: error: use of undeclared identifier &apos;m_type&apos;
    m_type = &quot;2d&quot;;
    ^
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060999</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-13 16:45:37 -0800</bug_when>
    <thetext>Follow-up build fix landed in &lt;https://trac.webkit.org/r178392&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061017</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2015-01-13 17:49:13 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;ve neglected to fix the non mac ports. Will do in next patch.

The GTK build fails with this: https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20%28Build%29/builds/54425/steps/compile-webkit/logs/stdio

Maybe you mean &apos;NULL&apos; instead of &apos;nil&apos; ? (C++)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061023</commentid>
    <comment_count>12</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-13 18:12:01 -0800</bug_when>
    <thetext>I think all the builds are fixed now:

Main patch was landed:
http://trac.webkit.org/changeset/178390

Windows and GTK fix was landed:
http://trac.webkit.org/changeset/178398</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061034</commentid>
    <comment_count>13</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-13 19:12:10 -0800</bug_when>
    <thetext>Keeping track of test failures:
https://bugs.webkit.org/show_bug.cgi?id=140423</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061091</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-01-13 23:20:28 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I think all the builds are fixed now:
&gt; 
&gt; Main patch was landed:
&gt; http://trac.webkit.org/changeset/178390
&gt; 
&gt; Windows and GTK fix was landed:
&gt; http://trac.webkit.org/changeset/178398

It broke the EFL/GTK build: bug140424</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061098</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-14 00:06:01 -0800</bug_when>
    <thetext>As mentioned in bug 140423 comment 1, changes to js/dom/global-constructors-attributes.html results look quite suspicious. Given that you also had to skip all WebGL tests, this seems like too many issues to keep in the tree, Ill try to roll out if I can.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061101</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 00:06:20 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 140431</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061982</commentid>
    <comment_count>17</comment_count>
      <attachid>244806</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-16 15:06:27 -0800</bug_when>
    <thetext>Created attachment 244806
patch v2

WebGL1RenderingContext is renamed to WebGLRenderingContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061984</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-16 15:08:36 -0800</bug_when>
    <thetext>Attachment 244806 did not pass style-queue:

ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:131:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:224:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:227:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:229:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:231:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:234:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:241:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:242:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:244:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:246:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:248:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:251:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:254:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:255:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:256:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:256:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:257:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:258:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:259:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:259:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:260:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:261:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:262:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:262:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:263:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:264:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:265:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:265:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:266:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:267:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:268:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:268:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:269:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:270:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:271:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:271:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:272:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:273:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:274:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:274:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:275:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:276:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:277:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:277:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:278:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:279:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:279:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:280:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:281:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:281:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:282:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:283:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:283:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:290:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:293:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:296:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:299:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:301:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:485:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:621:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:648:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:653:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:654:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:655:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:656:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:657:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:668:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:669:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:670:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:671:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:682:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:683:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:695:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:67:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:147:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:501:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:731:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:732:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:733:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:774:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:776:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1370:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1401:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1413:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1439:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1486:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1489:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1559:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3862:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3870:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3954:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3955:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3964:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3965:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3966:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3967:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3968:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/ca
nvas/WebGLRenderingContextBase.cpp:3978:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3984:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4025:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4042:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4086:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4218:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4219:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4228:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4229:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4230:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4232:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4247:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4273:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4290:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4306:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5050:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5055:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5057:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5059:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5061:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5063:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5065:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5317:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5318:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5319:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5320:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5321:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5378:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5454:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5455:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5560:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:6218:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:6232:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/DerivedSources.cpp:72:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:162:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:205:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:462:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:463:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:467:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 138 in 95 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>1061987</commentid>
    <comment_count>19</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-16 15:11:25 -0800</bug_when>
    <thetext>
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

I chose to leave a lot of these style errors here because the spacing and inclusion of parameter names in the header files are there to make things clearer, which is very helpful for WebGL code as many function calls take a slew of various parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062000</commentid>
    <comment_count>20</comment_count>
      <attachid>244806</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-01-16 15:41:09 -0800</bug_when>
    <thetext>Comment on attachment 244806
patch v2

Attachment 244806 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5328759708188672

New failing tests:
js/dom/global-constructors-attributes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062001</commentid>
    <comment_count>21</comment_count>
      <attachid>244811</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-01-16 15:41:12 -0800</bug_when>
    <thetext>Created attachment 244811
Archive of layout-test-results from ews103 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews103  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062037</commentid>
    <comment_count>22</comment_count>
      <attachid>244819</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-16 16:41:02 -0800</bug_when>
    <thetext>Created attachment 244819
patch v3

With a layout test fix.
Actual build (not test) results will not differ from patch v2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062045</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-16 16:56:10 -0800</bug_when>
    <thetext>Attachment 244819 did not pass style-queue:

ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:131:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:224:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:227:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:229:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:231:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:234:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:241:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:242:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:244:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:246:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:248:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:251:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:254:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:255:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:256:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:256:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:257:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:258:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:259:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:259:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:260:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:261:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:262:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:262:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:263:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:264:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:265:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:265:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:266:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:267:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:268:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:268:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:269:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:270:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:271:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:271:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:272:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:273:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:274:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:274:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:275:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:276:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:277:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:277:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:278:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:279:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:279:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:280:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:281:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:281:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:282:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:283:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:283:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:290:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:293:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:296:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:299:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:301:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:485:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:648:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:653:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:654:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:655:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:656:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:657:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:668:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:669:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:670:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:671:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:682:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:683:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:695:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:147:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:731:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:732:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:733:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:774:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:776:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1370:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1401:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1413:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1439:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1486:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1489:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1559:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3862:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3870:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3954:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3955:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3964:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3965:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3966:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3967:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3968:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3977:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3983:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4024:  Weird number of spaces at l
ine-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4041:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4085:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4217:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4218:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4227:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4228:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4229:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4230:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4245:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4271:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4288:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4304:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5048:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5053:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5055:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5057:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5059:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5061:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5063:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5315:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5316:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5317:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5318:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5319:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5376:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5452:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5453:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5558:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:6216:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:6230:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:162:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:205:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:462:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:463:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:467:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 134 in 96 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>1062052</commentid>
    <comment_count>24</comment_count>
      <attachid>244819</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-01-16 17:11:43 -0800</bug_when>
    <thetext>Comment on attachment 244819
patch v3

I talked with Roger about this. He&apos;ll split into two commits - one that renames the WebGLRenderingContext to WebGLRenderingContextBase (although keeping the contents the same), and then a followup to change the name in the contents. That should be smaller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062058</commentid>
    <comment_count>25</comment_count>
      <attachid>244819</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-01-16 17:46:50 -0800</bug_when>
    <thetext>Comment on attachment 244819
patch v3

Attachment 244819 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5989221659574272

New failing tests:
js/dom/global-constructors-attributes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062059</commentid>
    <comment_count>26</comment_count>
      <attachid>244824</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-01-16 17:46:54 -0800</bug_when>
    <thetext>Created attachment 244824
Archive of layout-test-results from ews103 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews103  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062524</commentid>
    <comment_count>27</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-19 15:29:58 -0800</bug_when>
    <thetext>ReCommitted: https://trac.webkit.org/changeset/178674
With a minor test fix here: https://trac.webkit.org/changeset/178677</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125620</commentid>
    <comment_count>28</comment_count>
      <attachid>244806</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-09-14 10:51:39 -0700</bug_when>
    <thetext>Comment on attachment 244806
patch v2

Cleared review? from attachment 244806 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244478</attachid>
            <date>2015-01-12 16:52:42 -0800</date>
            <delta_ts>2015-01-13 13:01:11 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>1596114</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODMwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1NCBAQAorMjAxNS0wMS0xMiAgUm9nZXIg
Rm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkdMMjogU3VwcG9ydCB3
ZWJnbDIgY29udGV4dCBjcmVhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjQwOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUwMDIxNzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMg
Y292ZXJlZCBieSBleGlzdGluZyBLaHJvbm9zIHRlc3RzIGZvciBXZWJHTCAxLjAgY29uZm9ybWFu
Y2UuCisKKyAgICAgICAgQ3JlYXRlIGEgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSBjbGFzcyB0
aGF0IGV4dGVuZHMgdG8gYSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0IGFuZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LgorICAgICAgICBSZXBsYWNlIGFsbCBwcmV2aW91cyBpbnN0YW5jZXMgb2YgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IHVzYWdlcyB3aXRoIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Ug
dXNhZ2VzIGZvciBub3cuCisgICAgICAgIEFzIHRoZSBmaXJzdCBzdGVwLCB0aGUgV2ViR0wxIGFu
ZCBXZWJHTDIgY29udGV4dHMgd2lsbCBoYXZlIHRoZSBleGFjdCBzYW1lIGZ1bmN0aW9uYWxpdHku
CisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmdldE9iamVjdFBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFj
aGVkU2hhZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFNoYWRlclBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1l
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRVbmlmb3JtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
dG9WZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZnVuY3Rpb25Gb3JVbmlmb3Jt
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbmYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpkYXRhRnVuY3Rpb25NYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0zaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm1NYXRyaXgzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0T2JqZWN0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNoYWRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRFeHRlbnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZm
ZXJQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYXJhbWV0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQcm9ncmFtUGFyYW1ldGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2V0U2hhZGVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFRleFBhcmFtZXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRW
ZXJ0ZXhBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6dG9WZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6ZnVuY3Rpb25Gb3JVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlv
bmYpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uaSk6CisgICAgICAgIChXZWJDb3Jl
OjpkYXRhRnVuY3Rpb25NYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJD
b3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRy
aXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmdik6CisgICAgICAgIChXZWJDb3JlOjpK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjNmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJp
YjRmdik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxl
bWVudDo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
aXMzZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBTkdM
RUluc3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRBcnJheXMpOgorICAgICAgICAoV2ViQ29y
ZTo6QU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0Ojp0eXBlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFNoYWRlclRl
eHR1cmVMT0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RVhUU2hhZGVyVGV4dHVyZUxPRDo6RVhU
U2hhZGVyVGV4dHVyZUxPRCk6CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVy
ZUxPRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM6OkVY
VFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyk6CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTRWxlbWVu
dEluZGV4VWludC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPRVNFbGVtZW50SW5kZXhVaW50OjpP
RVNFbGVtZW50SW5kZXhVaW50KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNFbGVtZW50SW5k
ZXhVaW50Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpPRVNTdGFuZGFyZERlcml2YXRpdmVzOjpPRVNTdGFuZGFy
ZERlcml2YXRpdmVzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRp
dmVzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok9FU1RleHR1cmVGbG9hdDo6T0VTVGV4dHVyZUZsb2F0KToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9P
RVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T0VTVGV4dHVyZUZs
b2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRMaW5lYXIpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L09FU1RleHR1cmVGbG9hdExpbmVhci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1
cmVIYWxmRmxvYXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T0VTVGV4dHVyZUhhbGZGbG9hdDo6
T0VTVGV4dHVyZUhhbGZGbG9hdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhh
bGZGbG9hdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcjo6T0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhcik6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVy
ZUhhbGZGbG9hdExpbmVhci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1ZlcnRleEFycmF5T2JqZWN0OjpPRVNW
ZXJ0ZXhBcnJheU9iamVjdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlP
YmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMVJlbmRlcmluZ0NvbnRleHQ6Oldl
YkdMMVJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0TG9zdENhbGxiYWNrOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxi
YWNrOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjazo6
fldlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZsYWdzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZENvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6fldlYkdMUmVuZGVyaW5nQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlc3Ryb3lHcmFwaGljc0NvbnRleHQz
RCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1h
cmtDb250ZXh0Q2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNsZWFySWZDb21wb3NpdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtMYXllckNv
bXBvc2l0ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVzaGFwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWlnaHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaXplSW5CeXRlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojph
dHRhY2hTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja09iamVjdFRvQmVCb3VuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpiaW5kUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBh
cmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJEZXB0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyU3RlbmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29w
eVRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFt
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVPYmplY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFtZWJ1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhGdW5jKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhN
YXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVwdGhSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRB
cnJheVNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0FycmF5cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJh
eXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZURyYXdFbGVtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZmluaXNoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXApOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3Rp
dmVBdHRyaWIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRBY3RpdmVVbmlmb3JtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQ
YXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRDb250ZXh0QXR0cmlidXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1JbmZvTG9nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclByZWNpc2lv
bkZvcm1hdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFNoYWRlclNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3Jt
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0
TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmlzQ29udGV4dExvc3RPclBlbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0ZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNQcm9ncmFtKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNSZW5kZXJidWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1No
YWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmlzVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFk
ZXJDb21waWxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNjaXNzb3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaGFkZXJTb3VyY2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVu
Yyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3ApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3BTZXBh
cmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleEltYWdlMkRCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0ltYWdlSW50b0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZpZGVvRnJhbWVUb0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJE
QmFzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleFN1YkltYWdlMkRJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00Zik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm00ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtNGkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNl
UHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmYpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliUG9pbnRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Zm9yY2VMb3N0Q29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlUmVzdG9yZUNvbnRl
eHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpw
bGF0Zm9ybUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cmVtb3ZlU2hhcmVkT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkU2hhcmVkT2JqZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlQ29udGV4dE9iamVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZENv
bnRleHRPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RvcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5Q
YXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGbG9hdFBhcmFtZXRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEludFBhcmFtZXRlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xJbnRBcnJheVBh
cmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4
SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVy
Q29sb3JGb3JtYXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVUZXh0dXJlQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNMZXZlbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFt
ZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVz
c2VkVGV4RnVuY0RhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2Vk
VGV4U3ViRGltZW5zaW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3Rl
bmNpbEZ1bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpwcmludEdMRXJyb3JUb0NvbnNvbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludFdhcm5pbmdUb0NvbnNvbGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVm
ZmVyRnVuY1BhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUNhcGFiaWxpdHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFy
YW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUhUTUxDYW52YXNFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWJmdkltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppbml0VmVydGV4QXR0cmliMCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVydGV4QXR0cmliMCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZXNBZnRl
clZlcnRleEF0dHJpYjBTaW11bGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29u
dGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmVuc3VyZU5vdE51bGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VC
dWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpidWJibGVUb0Zyb250KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3ludGhl
c2l6ZUdMRXJyb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29uc29sZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRlc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRpc2FibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGFt
cGVkQ2FudmFzU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldE1heERyYXdCdWZmZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0TWF4Q29sb3JBdHRhY2htZW50cyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldEJhY2tEcmF3QnVm
ZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVzdG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNEcmF3QnVm
ZmVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKTog
RGVsZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRs
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaWRsLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Oldl
YkdMMlJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xCdWZmZXI6OldlYkdMQnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTEJ1ZmZlci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBVEMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENv
bXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3Vw
cG9ydGVkKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNU
Qy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjpnZXRBR3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OmFkZENvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OnJlbW92ZUNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6Omxvc2VDb250ZXh0R3JvdXApOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9i
amVjdDo6V2ViR0xDb250ZXh0T2JqZWN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENv
bnRleHRPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6Y29u
dGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpXZWJHTERlYnVnUmVu
ZGVyZXJJbmZvKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZv
Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xEZWJ1Z1NoYWRlcnM6OldlYkdMRGVidWdTaGFkZXJzKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5oOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMRGVwdGhUZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRGVwdGhU
ZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xE
ZXB0aFRleHR1cmUuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRHJhd0J1ZmZlcnM6OldlYkdMRHJhd0J1ZmZlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMRHJhd0J1ZmZlcnM6OnNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRz
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmg6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xF
eHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEV4
dGVuc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xFeHRlbnNpb246OmNvbnRleHQpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTG9zZUNvbnRleHQ6OldlYkdMTG9zZUNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMb3NlQ29udGV4dDo6bG9zZUNvbnRleHQpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6
V2ViR0xPYmplY3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6V2Vi
R0xQcm9ncmFtKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJidWZmZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0TG9zdENhbGxiYWNrOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrOjp+
V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjazo6fldlYkdMUmVuZGVyaW5nQ29udGV4dEVy
cm9yTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmluaXRpYWxpemVOZXdDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNldHVwRmxhZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWxsb3dQcml2aWxlZ2VkRXh0
ZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
ZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXN0cm95R3JhcGhpY3NDb250ZXh0
M0QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFya0Nv
bnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNsZWFySWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdpbmdCdWZmZXJXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVySGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNpemVJbkJ5dGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFjdGl2ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YXR0
YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjaGVja09iamVjdFRvQmVCb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmxlbmRFcXVhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFyQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJEZXB0aCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhclN0ZW5jaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29sb3JNYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXBpbGVTaGFkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3Nl
ZFRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4U3ViSW1hZ2Uy
RCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3Jl
YXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRWxlbWVudEFycmF5
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVXZWJHTE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZURyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZpbmlzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmbHVzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpm
cmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpmcm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dHJpYkxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1
ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQcm9n
cmFtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVySW5mb0xvZyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VGV4UGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFZlcnRleEF0
dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRW
ZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc0NvbnRleHRMb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmlzQ29udGV4dExvc3RPclBlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzU2hhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsaW5lV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bGlua1Byb2dyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGl4ZWxTdG9yZWkpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cG9seWdvbk9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlbGVh
c2VTaGFkZXJDb21waWxlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNjaXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2tT
ZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpz
dGVuY2lsT3ApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4SW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyREltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWRlb0ZyYW1lVG9JbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJh
bWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
UGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleFN1YkltYWdlMkRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xaXYpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJpKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRm
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9y
bTRpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZv
cm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5p
Zm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dXNlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWYpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJm
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0
dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
ZXJ0ZXhBdHRyaWIzZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlld3BvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VMb3N0Q29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsb3NlQ29udGV4dElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VS
ZXN0b3JlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnJlbW92ZVNoYXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjphZGRTaGFyZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVtb3ZlQ29udGV4dE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRDb250ZXh0T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRldGFjaEFuZFJl
bW92ZUFsbE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2V0Qm9vbGVhblBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RmxvYXRQYXJhbWV0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0SW50UGFy
YW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dFVuc2lnbmVkSW50UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4
dHVyZUNvbXBsZXRlbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVm
ZmVyQ29tYmluYXRpb25WYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJvdW5k
RnJhbWVidWZmZXJIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRl
eEZ1bmNGb3JtYXRBbmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZUNvbXByZXNzZWRUZXhGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RGlt
ZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd01vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVT
dGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpwcmludEdMRXJyb3JUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6cHJpbnRXYXJuaW5nVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1l
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ2FwYWJpbGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxJbWFnZUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVIVE1MQ2FudmFzRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZkltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZnZJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmluaXRWZXJ0
ZXhBdHRyaWIwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnNpbXVsYXRlVmVydGV4QXR0cmliMCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaENv
bnRleHRMb3N0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6bWF5YmVSZXN0b3JlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjplbnN1cmVOb3ROdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVy
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJV
SW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxlVG9Gcm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzeW50aGVzaXpl
R0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpw
cmludEdMV2FybmluZ1RvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjphcHBseVN0ZW5jaWxUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZU9yRGlzYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGFtcGVkQ2FudmFzU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRNYXhEcmF3QnVmZmVycyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRNYXhDb2xv
ckF0dGFjaG1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnNldEJhY2tEcmF3QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3VwcG9ydHNEcmF3
QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
cmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29udGV4dEdyb3Vw
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldE1heFZl
cnRleEF0dHJpYnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6aXNHTEVTMkNvbXBsaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjppc0dMRVMyTlBPVFN0cmljdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjppc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzUmVzb3Vy
Y2VTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omlz
RGVwdGhTdGVuY2lsU3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnNldEJvdW5kVmVydGV4QXJyYXlPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6VmVydGV4QXR0cmliVmFsdWU6OlZlcnRleEF0
dHJpYlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OlZlcnRleEF0dHJpYlZhbHVlOjppbml0VmFsdWUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFNoYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYWRlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhZGVyOjpXZWJHTFNoYWRlcik6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFNoYXJlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6
V2ViR0xTaGFyZWRPYmplY3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2Jq
ZWN0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
VGV4dHVyZTo6V2ViR0xUZXh0dXJlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTLmg6CisKIDIwMTUtMDEtMTIgIFRpbW90aHkgSG9ydG9uICA8dGltb3RoeV9ob3J0
b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxNzc2NTYpOiBUZXh0IGluIGZp
bmQtaW4tcGFnZSB5ZWxsb3cgYm91bmN5IHJlY3RhbmdsZSBpcyBub3QgY3Jpc3AKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDQ2LDEyICs0NDYs
MTQgQEAgTk9OX1NWR19CSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZh
cy9XZWJHTExvc2VDb250ZXh0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVm
ZmVyLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5pZGwg
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgXAogICAgICQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5pZGwgXAorICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwgXAorICAg
ICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGwgXAorCSQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC90cmFjay9BdWRpb1RyYWNrLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1s
L3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL3RyYWNrL0Rh
dGFDdWUuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY5Niw4
ICsxNjk2LDggQEAKIAkJNDlDN0I5REExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVm
ZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3
QjlCQTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJidWZmZXIuaCAqLzsgfTsKIAkJNDlD
N0I5REMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkMxMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9OwogCQk0OUM3QjlE
RDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkQxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKLQkJNDlDN0I5REYxMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCRjEwNDJEMzJGMDAwOUQ0NDcgLyog
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsgfTsKLQkJNDlDN0I5RTAxMDQyRDMyRjAwMDlE
NDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oICovOyB9OworCQk0OUM3QjlERjEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUM3QjlCRjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5n
Q29udGV4dC5jcHAgKi87IH07CisJCTQ5QzdCOUUwMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUM3QjlDMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5oICovOyB9OwogCQk0OUM3QjlFMjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzIx
MDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmNwcCAqLzsgfTsKIAkJNDlDN0I5RTMxMDQy
RDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFk
ZXIuaCAqLzsgfTsKIAkJNDlDN0I5RTUxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMVGV4dHVyZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlD
NTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmNwcCAqLzsgfTsKQEAgLTE3MzcsMTAg
KzE3MzcsMTAgQEAKIAkJNDlFRUQxNDMxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFRUQxM0QxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
ICovOyB9OwogCQk0OUVFRDE0NDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFRUQxM0UxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcCAqLzsgfTsKIAkJNDlFRUQxNDUxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUVFRDEzRjEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCAqLzsgfTsKLQkJNDlFRUQxNDYxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5RUVEMTQwMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAgKi87IH07Ci0JCTQ5RUVEMTQ3MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDlFRUQxNDExMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggKi87
IH07CisJCTQ5RUVEMTQ2MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlF
RUQxNDAxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87
IH07CisJCTQ5RUVEMTQ3MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVE
MTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsK
IAkJNDlFRUQxNEUxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RUVEMTRCMTA1MTk3MTkwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAgKi87IH07Ci0JCTQ5RUVEMTRGMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRDdXN0b20uY3BwICovOyB9OworCQk0OUVFRDE0RjEwNTE5NzFBMDAwOTlGQUIgLyog
SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dl
YkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovOyB9OwogCQk0OUVFRDE1MDEwNTE5NzFB
MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTREMTA1MTk3MUEwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovOyB9OwogCQk0OUZD
N0E1MDE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RkM3QTRGMTQ0NEFGNUYw
MEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovOyB9OwogCQk0OUZGQkYxRDEx
Qzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTgg
LyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi87IH07CkBAIC01ODQzLDYgKzU4NDMsMTIgQEAK
IAkJRDM1OUQ3OTMxMjlDQTNDMDAwMDZFNUQyIC8qIERPTUhUTUxEZXRhaWxzRWxlbWVudEludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzU5
RDc5MDEyOUNBM0MwMDAwNkU1RDIgLyogRE9NSFRNTERldGFpbHNFbGVtZW50SW50ZXJuYWwuaCAq
LzsgfTsKIAkJRDM1OUQ4QkUxMjlDQTU1QzAwMDZFNUQyIC8qIEpTSFRNTERldGFpbHNFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzNTlE
OEJDMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5jcHAgKi87IH07CiAJ
CUQzNTlEOEJGMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDM1OUQ4QkQxMjlDQTU1
QzAwMDZFNUQyIC8qIEpTSFRNTERldGFpbHNFbGVtZW50LmggKi87IH07CisJCUQzOUM3MkQ3MUE1
QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkQ1MUE1QzhCMEIwMEFF
RDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLzsgfTsKKwkJRDM5QzcyRDgx
QTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkQ2MUE1QzhCMEIwMEFF
RDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggKi87IH07CisJCUQzOUM3MkREMUE1
QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkRCMUE1QzhDOEUwMEFFRDg5
QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsgfTsKKwkJRDM5QzcyREUxQTVDOEM4
RTAwQUVEODlDIC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkRDMUE1QzhDOEUwMEFFRDg5QyAvKiBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi87IH07CisJCUQzOUM3MkU0MUE1QzkzQUYwMEFFRDg5
QyAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDM5QzcyRTMxQTVDOTNBRjAwQUVEODlDIC8q
IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi87IH07CisJCUQzOUM3MkU2MUE1
Qzk0MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDM5QzcyRTUxQTVD
OTQwQjAwQUVEODlDIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAgKi87
IH07CiAJCUQzQTk0QTM4MTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0E5NEEzMTEyMkRB
QkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3QuY3BwICovOyB9OwogCQlEM0E5NEEzOTEyMkRB
QkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQTk0QTMyMTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1
ZXJ5TGlzdC5oICovOyB9OwogCQlEM0E5NEEzQjEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDNBOTRBMzQxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aCAqLzsgfTsKQEAgLTU4NTIsNiArNTg1OCwxMCBAQAogCQlEM0FBMTBGNDEyM0E5OEFBMDA5MjE1
MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0
Y2hlci5oICovOyB9OwogCQlEM0Q0RTk3MjEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQzRDRFOTcwMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwICovOyB9
OwogCQlEM0Q0RTk3MzEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MTEzMEM3
Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi87IH07CisJCUQzRTE0QkI1MUE1
RENGNEIwMDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNFMTRCQjMxQTVEQ0Y0QjAwOTdB
NkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CisJCUQzRTE0QkI2MUE1
RENGNEIwMDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRTE0QkI0MUE1RENGNEIwMDk3QTZF
OSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJRDNFMTRCQjkxQTVEQ0Y3
QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0UxNEJCNzFBNURDRjdCMDA5N0E2
RTkgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLzsgfTsKKwkJRDNFMTRCQkEx
QTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNFMTRCQjgxQTVEQ0Y3QjAw
OTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovOyB9OwogCQlENjE5QTMw
NzE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENjE5QTMwNTE0NEUwMEJFMDA0
QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgKi87IH07CiAJCUQ2MTlBMzA4MTQ0
RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENjE5QTMwNjE0NEUwMEJFMDA0QkMzMDIg
LyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICovOyB9OwogCQlENjQ4OUQyNTE2NkZGQ0YxMDA3
QzAzMUIgLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2NDg5RDIzMTY2RkZDRjEwMDdDMDMxQiAvKiBKU0hU
TUxUZW1wbGF0ZUVsZW1lbnQuY3BwICovOyB9OwpAQCAtODgwOSw5ICs4ODE5LDkgQEAKIAkJNDlD
N0I5QkMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5j
cHA7IHBhdGggPSBjYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUJEMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUJFMTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmlkbDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QkYxMDQyRDMyRjAw
MDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg7IHBh
dGggPSBjYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5QzdCOUMxMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw7
IHBhdGggPSBjYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmlu
Z0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0wx
UmVuZGVyaW5nQ29udGV4dC5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUMwMTA0MkQzMkYwMDA5
RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTDFS
ZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUMx
MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbDsgcGF0aCA9IGNhbnZhcy9X
ZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlDN0I5QzIxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMU2hhZGVyLmNwcDsgcGF0aCA9IGNhbnZhcy9X
ZWJHTFNoYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUMzMTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJHTFNoYWRlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMU2hhZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUM0MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJH
TFNoYWRlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xTaGFkZXIuaWRsOyBwYXRo
ID0gY2FudmFzL1dlYkdMU2hhZGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTg4NTMsMTAgKzg4NjMsMTAgQEAKIAkJNDlFRUQxM0QxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlFRUQxM0UxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUQxM0YxMDUx
OTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVEMTQwMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFRDE0MDEwNTE5Njk0MDAw
OTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdM
MVJlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
ZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
RUVEMTRCMTA1MTk3MTkwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5
RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVEMTRD
MTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTDFSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUQxNEQxMDUx
OTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZDN0E0RjE0NDRBRjVG
MDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0Nv
bnRleHQzRE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdy
YXBoaWNzQ29udGV4dDNETWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMz
NjUsNiArMTMzNzUsMTIgQEAKIAkJRDM1OUQ3OTAxMjlDQTNDMDAwMDZFNUQyIC8qIERPTUhUTUxE
ZXRhaWxzRWxlbWVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERPTUhUTUxEZXRhaWxzRWxlbWVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUQzNTlEOEJDMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxEZXRhaWxzRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzNTlEOEJEMTI5Q0E1NUMw
MDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0hUTUxEZXRhaWxzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlEMzlDNzJENTFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDM5QzcyRDYxQTVDOEIwQjAw
QUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oOyBwYXRoID0gY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRDM5QzcyREIxQTVDOEM4RTAwQUVEODlDIC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3MkRDMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250
ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3MkUzMUE1QzkzQUYwMEFF
RDg5QyAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDM5QzcyRTUxQTVDOTQwQjAwQUVEODlD
IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0E5NEEzMTEyMkRBQkFDMDBBMzdC
QkMgLyogTWVkaWFRdWVyeUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTWVkaWFRdWVyeUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
M0E5NEEzMjEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDNBOTRBMzMxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdC5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMzM3Niw2ICsxMzM5MiwxMiBAQAogCQlEM0FBMTBGMjEyM0E5
OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVkaWFRdWVyeU1hdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRDNENEU5NzAxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0Q0RTk3MTEzMEM3Q0ZFMDA3QkE1
NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhUTUxTdW1tYXJ5RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlE
M0UxNEJCMzFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzRTE0QkI0MUE1RENGNEIw
MDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUQzRTE0QkI3MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRDNFMTRCQjgxQTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDNFMTRCQkIxQTVE
RThGNTAwOTdBNkU5IC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0Ux
NEJCQzFBNURFOEY1MDA5N0E2RTkgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGw7IHBhdGgg
PSBjYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlv
blNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoaWxkTGlz
dE11dGF0aW9uU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjE5QTMw
NjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ2NDg5RDIzMTY2RkZDRjEwMDdDMDMxQiAvKiBKU0hUTUxU
ZW1wbGF0ZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1ODkxLDkgKzE1OTEzLDE1IEBACiAJCQkJNDlDN0I5QjkxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMUmVuZGVyYnVmZmVyLmNwcCAqLywKIAkJCQk0OUM3QjlCQTEwNDJEMzJGMDAwOUQ0NDcgLyog
V2ViR0xSZW5kZXJidWZmZXIuaCAqLywKIAkJCQk0OUM3QjlCQjEwNDJEMzJGMDAwOUQ0NDcgLyog
V2ViR0xSZW5kZXJidWZmZXIuaWRsICovLAotCQkJCTQ5QzdCOUJGMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovLAotCQkJCTQ5QzdCOUMwMTA0MkQzMkYwMDA5
RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLywKLQkJCQk0OUM3QjlDMTEwNDJEMzJG
MDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbCAqLywKKwkJCQk0OUM3QjlCRjEw
NDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCisJCQkJNDlD
N0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCAqLywKKwkJ
CQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGwg
Ki8sCisJCQkJRDM5QzcyREIxQTVDOEM4RTAwQUVEODlDIC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuY3BwICovLAorCQkJCUQzOUM3MkRDMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmggKi8sCisJCQkJRDNFMTRCQkIxQTVERThGNTAwOTdBNkU5IC8qIFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQuaWRsICovLAorCQkJCUQzOUM3MkQ1MUE1QzhCMEIwMEFFRDg5QyAvKiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLywKKwkJCQlEMzlDNzJENjFBNUM4QjBCMDBB
RUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovLAorCQkJCUQzRTE0QkJDMUE1
REU4RjUwMDk3QTZFOSAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbCAqLywKIAkJCQk0
OUM3QjlDMjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuY3BwICovLAogCQkJCTQ5QzdC
OUMzMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5oICovLAogCQkJCTQ5QzdCOUM0MTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5pZGwgKi8sCkBAIC0xODk4MSw4ICsxOTAwOSwx
MiBAQAogCQkJCTQ5QzdCOTg5MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUHJvZ3JhbS5oICov
LAogCQkJCTQ5QzdCOThBMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUmVuZGVyYnVmZmVyLmNw
cCAqLywKIAkJCQk0OUM3Qjk4QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJlbmRlcmJ1ZmZl
ci5oICovLAotCQkJCTQ5RUVEMTQwMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAgKi8sCi0JCQkJNDlFRUQxNDExMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmggKi8sCisJCQkJRDNFMTRCQjcxQTVEQ0Y3QjAwOTdBNkU5IC8qIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi8sCisJCQkJRDNFMTRCQjgxQTVEQ0Y3QjAw
OTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovLAorCQkJCTQ5RUVEMTQw
MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwICovLAorCQkJ
CTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCAq
LywKKwkJCQlEM0UxNEJCMzFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250
ZXh0LmNwcCAqLywKKwkJCQlEM0UxNEJCNDFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0LmggKi8sCiAJCQkJNDlDN0I5OEYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2Vi
R0xTaGFkZXIuY3BwICovLAogCQkJCTQ5QzdCOTkwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdM
U2hhZGVyLmggKi8sCiAJCQkJQTA3RDMzNTMxNTJCNjMwRTAwMUI2MzkzIC8qIEpTV2ViR0xTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQuY3BwICovLApAQCAtMjEwOTEsNyArMjExMjMsOSBAQAogCQkJCTdD
NzNGQjE3MTkxRUY4MDgwMDdERTA2MSAvKiBKU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VD
dXN0b20uY3BwICovLAogCQkJCUJFNkRGNzA4MTcxQ0EyQzUwMERENTJCOCAvKiBKU1ZpZGVvVHJh
Y2tDdXN0b20uY3BwICovLAogCQkJCUJFNkRGNzBBMTcxQ0EyQzUwMERENTJCOCAvKiBKU1ZpZGVv
VHJhY2tMaXN0Q3VzdG9tLmNwcCAqLywKLQkJCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyog
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovLAorCQkJCUQzOUM3MkU1MUE1Qzk0
MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwICovLAor
CQkJCTQ5RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRD
dXN0b20uY3BwICovLAorCQkJCUQzOUM3MkUzMUE1QzkzQUYwMEFFRDg5QyAvKiBKU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovLAogCQkJCUJDMjc1Qjc4MTFDNUQxQzMwMEM5MjA2
QyAvKiBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcCAqLywKIAkJCQlFMUNBNUNCQjBFOENEQ0FGMDBF
OEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3BwICovLAogCQkJCUUxODI1OEFCMEVGM0NENzAwMDkz
MzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCAqLywKQEAgLTI1MzIxLDcgKzI1
MzU1LDcgQEAKIAkJCQk5M0YxRDVDMTEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJHTExvc2VDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3Qjk5QzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNX
ZWJHTFByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOTlFMTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU1dlYkdMUmVuZGVyYnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFRDE0NzEw
NTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTQ5RUVEMTQ3MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUEzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dl
YkdMU2hhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMDdEMzM1NjE1MkI2MzBFMDAxQjYzOTMg
LyogSlNXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlD
N0I5QTUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xUZXh0dXJlLmggaW4gSGVhZGVycyAqLywK
QEAgLTI1NTU4LDYgKzI1NTkyLDcgQEAKIAkJCQkxNDExNUI1MjA5Rjg0QjcxMDBDQTRGQzEgLyog
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzEwQTIyOTdCRTAwNThEN0FEIC8qIE5v
ZGVGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZFNzMzMEEyMjk3QkUwMDU4RDdBRCAv
KiBOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlEM0UxNEJCNjFBNURD
RjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NTRGRTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODE4NzIxQjA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCBp
biBIZWFkZXJzICovLApAQCAtMjU3ODksNiArMjU4MjQsNyBAQAogCQkJCUU0M0EwMjNCMTdFQjM3
MEEwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVCN0E1
NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4RUE3M0M0MEExOTAwRTMwMEE4RUY1RiAvKiBSZW5kZXJGaWVsZHNldC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRDNFMTRCQkExQTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDY2Qzc3MzEwQUI2MDNGRDAwMjM4
Q0M0IC8qIFJlbmRlckZpbGVVcGxvYWRDb250cm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0M4
Mjk4RTEzRDhEOTI3MDBERTJERUIgLyogUmVuZGVyRmxleGlibGVCb3guaCBpbiBIZWFkZXJzICov
LAogCQkJCTUwOENDQTRGMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmggaW4g
SGVhZGVycyAqLywKQEAgLTI2MDU3LDYgKzI2MDkzLDcgQEAKIAkJCQlGNTVCM0REMjEyNTFGMTJE
MDAzRUYyNjkgLyogU2VhcmNoSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjcxNzA4
OTBCMzExODA4MDAxNzEyM0UgLyogU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NzZGMzZFQjE0Njg2MjI1MDA1RTkzQjQgLyogU2VjdXJpdHlDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlEMzlDNzJEODFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMEUwRkIwRTk3MkMzNTAwMjY1REVBIC8q
IFNlY3VyaXR5T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QwRTBGQzBFOTcyQzM1MDAy
NjVERUEgLyogU2VjdXJpdHlPcmlnaW5IYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzREMkRB
NTE0NkE1MzVEMDBENTFGOEIgLyogU2VjdXJpdHlQb2xpY3kuaCBpbiBIZWFkZXJzICovLApAQCAt
MjY3NDUsNyArMjY3ODIsNyBAQAogCQkJCTQ5QzdCOUQ1MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJH
TE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RDcxMDQyRDMyRjAwMDlENDQ3IC8q
IFdlYkdMUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5REExMDQyRDMyRjAwMDlE
NDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUM3QjlFMDEw
NDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
KwkJCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RTMxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hh
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMDdEMzM1ODE1MkI2MzJEMDAxQjYzOTMgLyogV2Vi
R0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTAxRDNDRjg3MTRC
RDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NjgxNCw2ICsyNjg1MSw3IEBACiAJCQkJQTE0ODMyQzExODdGNjU3QTAwREE2M0E2IC8qIFdLVHlw
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDgzMkMzMTg3RjY1REYwMERBNjNBNiAvKiBXS1V0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE0ODMyQzQxODdGNjYzQzAwREE2M0E2IC8q
IFdLVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDM5QzcyREUxQTVDOEM4RTAwQUVEODlDIC8q
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDgzMkM2MTg3
RjY2OEYwMERBNjNBNiAvKiBXS1ZpZXdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzk5
MTk5NzEyMDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJFNDM0NjQ2MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMjc3OTAsNiArMjc4MjgsNyBAQAogCQkJCUJDNTNEQTQ4MTE0MzEzNEQwMDBEODE3RSAvKiBE
T01XcmFwcGVyV29ybGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExRDEzODEwQTUzMjU1MjAw
NjRCRjVGIC8qIERPTVhQYXRoLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVFOUUwQTIwQUIzQTBD
NzAwMDY5Q0QwIC8qIERPTVhQYXRoRXhwcmVzc2lvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCUQz
OUM3MkQ3MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg1RTlFMEE2MEFCM0EwQzcwMDA2OUNEMCAvKiBET01YUGF0aFJl
c3VsdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEMTc2MkUzMTc2Njg2RUEwMEQ4MzZBOCAvKiBE
b3duU2FtcGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NBNTk1RTBCMjdCRDlFMDBGQTAy
MUQgLyogRHJhZ0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODg0Myw2ICsyODg4
Miw3IEBACiAJCQkJRTQ0NjE0MUEwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkRBN0MxNjE4ODMyMkVCMDBDOTU0QjUgLyogSlNUb3VjaC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRBN0MxODE4ODMyMkVCMDBDOTU0QjUgLyogSlNUb3Vj
aEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQzOUM3MkU2MUE1Qzk0MEIwMEFFRDg5QyAv
KiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEQTdDMUExODgzMjJFQjAwQzk1NEI1IC8qIEpTVG91Y2hMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTA3MDMzNEU5MTQ1QTFGMzYwMDhEOEQ0NSAvKiBKU1RyYWNrQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTA3ODQ2MzQyMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODg4Miw4ICsyODkyMiw4IEBACiAJCQkJOTNGMUQ1
QzAxMkQ1MzM1NjAwODMyQkVDIC8qIEpTV2ViR0xMb3NlQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0OUM3Qjk5QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5OUQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xSZW5k
ZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUQxNDYxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVE
MTRGMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0OUVFRDE0NjEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RUVEMTRGMTA1MTk3MUEw
MDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDlDN0I5QTIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xTaGFkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTA3RDMzNTUxNTJCNjMwRTAwMUI2MzkzIC8qIEpTV2ViR0xTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5QTQxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTV2ViR0xUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjkwNDUs
NiArMjkwODUsNyBAQAogCQkJCTA3OEUwOTAzMTdEMTRDRUUwMDQyMEFBMSAvKiBNZWRpYVN0cmVh
bVRyYWNrRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdGRkRFNjgxODFBRUQ0MjAwNzJE
NDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3
NjMwNkQyMTdFMTQ3OEQwMDVBN0M0RSAvKiBNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDNFMTRCQjUxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDY0MUVCRjE4MTlC
MzYwMDBFRTRDNDEgLyogTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUNENjBDMEM2MTkzRTg3QzcwMDNDNjU2QiAvKiBNZWRpYVRpbWVRVEtpdC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTA3MDU4NTNBMTdGRTA3NzAwMDVGMkJDQiAvKiBNZWRpYVRyYWNrQ29uc3Ry
YWludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5NTQ0LDYgKzI5NTg1LDcgQEAKIAkJCQk0QjZG
QTZGNzBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTRBRkQwMEIwREFGMzM1NDAwRjVGNTVDIC8qIFNNSUxUaW1lLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUU0QUZEMDBEMERBRjMzNTUwMEY1RjU1QyAvKiBTTUlMVGltZUNvbnRhaW5lci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlEMzlDNzJFNDFBNUM5M0FGMDBBRUQ4OUMgLyogSlNXZWJH
TDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTMz
MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTEwRDRBMzYxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNv
Y2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk4NDEsNiArMjk4
ODMsNyBAQAogCQkJCTY1NTBCNkE1MDk5REYwMjcwMDkwRDc4MSAvKiBUZXh0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUNFN0IyREI2MTU4NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjU0RENFNTE4ODEwNTFEMDAzRUVEQkIg
LyogVGV4dEF1dG9TaXppbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDNFMTRCQjkxQTVEQ0Y3
QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzNzJDMDBDNDEyOTYxMUYxMDA1Qzk1NzUgLyogVGV4dEJvdW5kYXJpZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDOTcwRDAwQTVERjAwMzAwNzREIC8qIFRleHRCb3VuZGFy
aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNEOEE1RjAxNUY1NkYyQzAwOThEMDcxIC8qIFRl
eHRCcmVha0l0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAwMzEsNyArMzAwNzQsNyBA
QAogCQkJCTQ5QzdCOUQ0MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTE9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0OUM3QjlENjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xQcm9ncmFtLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOUQ5MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJl
bmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUM3QjlERjEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdC
OURGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQ5QzdCOUUyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMDhDRjE1NDE1MkI3N0IzMDA5QzU3NzUgLyogV2ViR0xTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDFEM0NGODYxNEJEMEEz
MDAwRkU5OTcwIC8qIFdlYkdMU2hhcmVkT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAw
ODEsNiArMzAxMjQsNyBAQAogCQkJCTkzRUM0NEExMTg4RjRCQjgwMDY2MURGMSAvKiBXaGVlbEV2
ZW50RGVsdGFUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzODBGNDczMDlBMTFBQjQw
MDFGREIzNCAvKiBXaWRnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNEQwRUFGRDYz
NzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUQzOUM3MkREMUE1
QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzODBGNDc4MDlBMTFBQ0MwMDFGREIzNCAvKiBXaWRnZXRNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk5MzlCMDJFRTBFQTJEQkM0MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzgyNDNFODBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVh
dHVyZXMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMyLDEwIEBACiAjaW5j
bHVkZSAiSlNOb2RlLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJKU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CkBAIC01MSw4ICs1MywxMiBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogI2lmIEVOQUJMRShXRUJH
TCkKLSAgICBpZiAob2JqZWN0LT5pczNkKCkpCi0gICAgICAgIHJldHVybiB3cmFwPEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5n
Q29udGV4dCo+KG9iamVjdCkpOworICAgIGlmIChvYmplY3QtPmlzM2QoKSkgeworICAgICAgICBp
ZiAob2JqZWN0LT50eXBlKCkgPT0gIndlYmdsMSIpCisgICAgICAgICAgICByZXR1cm4gd3JhcDxK
U1dlYkdMMVJlbmRlcmluZ0NvbnRleHQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0wx
UmVuZGVyaW5nQ29udGV4dCo+KG9iamVjdCkpOworICAgICAgICBpZiAob2JqZWN0LT50eXBlKCkg
PT0gIndlYmdsMiIpCisgICAgICAgICAgICByZXR1cm4gd3JhcDxKU1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dCo+
KG9iamVjdCkpOworICAgIH0KICNlbmRpZgogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKG9iamVjdC0+aXMyZCgpKTsKICAgICByZXR1cm4gd3JhcDxKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQqPihvYmplY3QpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIAogI2lmIEVOQUJMRShXRUJHTCkK
LSNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
Q2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiSlNE
aWN0aW9uYXJ5LmgiCi0jaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNpbmNsdWRlICJXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzLmgiCiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
CShyZXZpc2lvbiAxNzY5OTQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKwor
I2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisKKyNpbmNsdWRlICJBTkdMRUlu
c3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKKyNpbmNs
dWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1h
Z2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1
ZGUgIkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmgiCisjaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1
ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgiCisjaW5j
bHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5jbHVkZSAiSlNPRVNTdGFuZGFyZERl
cml2YXRpdmVzLmgiCisjaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJK
U09FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9h
dC5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgorI2luY2x1ZGUg
IkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkdMQnVmZmVyLmgiCisj
aW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCisjaW5jbHVkZSAiSlNXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJKU1dlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCisjaW5j
bHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1ZGUgIkpTV2ViR0xEZXB0aFRleHR1
cmUuaCIKKyNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMuaCIKKyNpbmNsdWRlICJKU1dlYkdM
RnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMTG9zZUNvbnRleHQuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJidWZmZXIuaCIKKyNp
bmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTFRleHR1cmUuaCIKKyNp
bmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTLmgiCisjaW5jbHVkZSAiSlNXZWJLaXRDU1NNYXRyaXguaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVpbnQuaCIK
KyNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVy
ZUZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgiCisjaW5jbHVkZSAi
T0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIuaCIKKyNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdM
QnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgorI2luY2x1
ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgor
I2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1
cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xFeHRl
bnNpb24uaCIKKyNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xH
ZXRJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdM
UHJvZ3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUg
IldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUg
IkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0hUTUxWaWRlb0VsZW1lbnQuaCIKKyNl
bmRpZgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCit7CisgICAgc3dpdGNoIChpbmZv
LmdldFR5cGUoKSkgeworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2w6CisgICAgICAg
IHJldHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZUJvb2xBcnJheTogeworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0Owor
ICAgICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5mby5nZXRCb29sQXJyYXkoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKKyAg
ICAgICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtpaV0pKTsKKyAgICAgICAgcmV0
dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgorICAgICAgICByZXR1cm4ganNOdW1i
ZXIoaW5mby5nZXRGbG9hdCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVJbnQ6Cisg
ICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVOdWxsOgorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlU3RyaW5nOgorICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUo
ZXhlYywgaW5mby5nZXRTdHJpbmcoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlVW5z
aWduZWRJbnQ6CisgICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldFVuc2lnbmVkSW50KCkp
OworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVmZmVyOgorICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xCdWZmZXIoKSk7CisgICAg
Y2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5OgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGbG9hdEFycmF5KCkpOworICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZmZXI6CisgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEZyYW1lYnVmZmVyKCkpOwor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJyYXk6CisgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEludEFycmF5KCkpOworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQgV2ViR0xPYmplY3RBcnJheQorICAgIC8vIGNhc2UgV2ViR0xH
ZXRJbmZvOjprVHlwZVdlYkdMT2JqZWN0QXJyYXk6CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xQcm9ncmFtOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IGluZm8uZ2V0V2ViR0xQcm9ncmFtKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdl
YkdMUmVuZGVyYnVmZmVyOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IGluZm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xUZXh0dXJlOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IGluZm8uZ2V0V2ViR0xUZXh0dXJlKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdl
YkdMVW5zaWduZWRCeXRlQXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KCkpOworICAgIGNhc2UgV2ViR0xH
ZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRJbnRBcnJheToKKyAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWduZWRJbnRBcnJheSgpKTsKKyAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOgorICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUygpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9Cit9CisKK2VudW0gT2JqZWN0
VHlwZSB7CisgICAga0J1ZmZlciwga1JlbmRlcmJ1ZmZlciwga1RleHR1cmUsIGtWZXJ0ZXhBdHRy
aWIKK307CisKK3N0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dCogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkK
K3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCYgY29udGV4dCA9IG9iai0+aW1wbCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB1bnNp
Z25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICBXZWJHTEdldEluZm8gaW5mbzsKKyAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHsKKyAg
ICBjYXNlIGtCdWZmZXI6CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldEJ1ZmZlclBhcmFtZXRl
cih0YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1JlbmRlcmJ1
ZmZlcjoKKyAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKHRh
cmdldCwgcG5hbWUsIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrVGV4dHVyZToKKyAg
ICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrVmVydGV4QXR0cmliOgorICAgICAgICAvLyB0YXJn
ZXQgPT4gaW5kZXgKKyAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VmVydGV4QXR0cmliKHRhcmdl
dCwgcG5hbWUsIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChlYykgeworICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgb2JqLT5nbG9iYWxPYmplY3QoKSwg
aW5mbyk7Cit9CisKK2VudW0gV2hpY2hQcm9ncmFtQ2FsbCB7CisgICAga1Byb2dyYW1QYXJhbWV0
ZXIsIGtVbmlmb3JtCit9OworCitzdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lv
bikKK3sKKyAgICBpZiAoIWV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAg
IHN3aXRjaCAoZXh0ZW5zaW9uLT5nZXROYW1lKCkpIHsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9u
OjpXZWJHTExvc2VDb250ZXh0TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTExvc2VDb250ZXh0Kj4oZXh0ZW5zaW9uKSk7CisgICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUU2hhZGVyVGV4dHVyZUxPRE5hbWU6CisgICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUU2hhZGVyVGV4dHVy
ZUxPRCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpY05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKj4oZXh0ZW5zaW9u
KSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTU3RhbmRhcmREZXJpdmF0aXZlc05hbWU6
CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VT
U3RhbmRhcmREZXJpdmF0aXZlcyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246Ok9FU1RleHR1cmVGbG9hdE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5zaW9uKSk7CisgICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyTmFtZToKKyAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxv
YXRMaW5lYXIqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0
dXJlSGFsZkZsb2F0TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhck5hbWU6CisgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhh
bGZGbG9hdExpbmVhcio+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9F
U1ZlcnRleEFycmF5T2JqZWN0TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVuc2lvbikpOwor
ICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU0VsZW1lbnRJbmRleFVpbnROYW1lOgorICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU0VsZW1lbnRJ
bmRleFVpbnQqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERl
YnVnUmVuZGVyZXJJbmZvTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnUmVuZGVyZXJJbmZvKj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1NoYWRlcnNOYW1lOgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVidWdTaGFk
ZXJzKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVz
c2VkVGV4dHVyZUFUQ05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyo+KGV4dGVuc2lvbikpOwor
ICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQ05hbWU6
CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4
dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZXB0
aFRleHR1cmVOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PFdlYkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEcmF3QnVmZmVyc05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEcmF3QnVmZmVycyo+KGV4dGVuc2lv
bikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkFOR0xFSW5zdGFuY2VkQXJyYXlzTmFtZToK
KyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBTkdM
RUluc3RhbmNlZEFycmF5cyo+KGV4dGVuc2lvbikpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4ganNOdWxsKCk7Cit9CisKK3ZvaWQgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKK30KKworSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4
ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBK
U1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAg
ICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICBWZWN0
b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyczsKKyAgICBib29sIHN1Y2NlZWQgPSBjb250
ZXh0LmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBq
c051bGwoKTsKKyAgICB9CisgICAgaWYgKCFzdWNjZWVkKQorICAgICAgICByZXR1cm4ganNOdWxs
KCk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNpemVfdCBpaSA9
IDA7IGlpIDwgc2hhZGVycy5zaXplKCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0KCksIHNoYWRlcnNbaWldLmdldCgpKSk7CisgICAgcmV0dXJuIGNv
bnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4
ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOworCisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgp
OworICAgIGNvbnN0IFN0cmluZyBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVu
c2lvbiA9IGNvbnRleHQuZ2V0RXh0ZW5zaW9uKG5hbWUpOworICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBleHRlbnNpb24pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga0J1ZmZlcik7Cit9CisKK0pTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAh
PSAzKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAg
dW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgyKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGlu
Zm8gPSBjb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0
dGFjaG1lbnQsIHBuYW1lLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZv
IGluZm8gPSBjb250ZXh0LmdldFBhcmFtZXRlcihwbmFtZSwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGlu
Zm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFy
YW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAg
ICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNv
bnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMpOworICAgIGlmIChl
YykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmpl
Y3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1JlbmRlcmJ1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgaWYgKCFleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS5pbmhlcml0cyhKU1dlYkdMU2hhZGVyOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFk
ZXI6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgdW5zaWduZWQg
cG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIs
IHBuYW1lLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAo
Y29udGV4dC5pc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBW
ZWN0b3I8U3RyaW5nPiB2YWx1ZSA9IGNvbnRleHQuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwor
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBp
aSA8IHZhbHVlLnNpemUoKTsgKytpaSkKKyAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRo
Q2FjaGUoZXhlYywgdmFsdWVbaWldKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMs
IDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
Z2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtUZXh0dXJlKTsKK30KKworSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNX
ZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAg
aWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250
ZXh0LmdldFVuaWZvcm0ocHJvZ3JhbSwgbG9jYXRpb24sIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZv
KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmli
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMs
IGV4ZWMsIGtWZXJ0ZXhBdHRyaWIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+Citib29sIHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKK3sKKyAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpT
Qzo6SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICBpbnQzMl90IGxlbmd0
aCA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50
b0ludDMyKGV4ZWMpOworCisgICAgaWYgKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0
aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2ZWN0b3IucmVzaXplKGxlbmd0aCk7CisK
KyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU0M6
OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOworICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHZlY3Rvcltp
XSA9IHN0YXRpY19jYXN0PFQ+KHYudG9OdW1iZXIoZXhlYykpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitlbnVtIERhdGFGdW5jdGlvblRvQ2FsbCB7CisgICAgZl91bmlmb3JtMXYs
IGZfdW5pZm9ybTJ2LCBmX3VuaWZvcm0zdiwgZl91bmlmb3JtNHYsCisgICAgZl92ZXJ0ZXhBdHRy
aWIxdiwgZl92ZXJ0ZXhBdHRyaWIydiwgZl92ZXJ0ZXhBdHRyaWIzdiwgZl92ZXJ0ZXhBdHRyaWI0
dgorfTsKKworZW51bSBEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgeworICAgIGZfdW5pZm9ybU1h
dHJpeDJmdiwgZl91bmlmb3JtTWF0cml4M2Z2LCBmX3VuaWZvcm1NYXRyaXg0ZnYKK307CisKK3N0
YXRpYyBib29sIGZ1bmN0aW9uRm9yVW5pZm9ybShEYXRhRnVuY3Rpb25Ub0NhbGwgZikKK3sKKyAg
ICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgIGNhc2UgZl91bmlmb3Jt
MnY6CisgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9u
VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNv
bnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7CisgICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uID0gMDsKKyAgICBsb25nIGluZGV4ID0gLTE7CisgICAgCisgICAgaWYgKGZ1bmN0aW9uRm9y
VW5pZm9ybShmKSkgeworICAgICAgICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246
OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgICAgIGlmICghbG9j
YXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgfSBlbHNlCisg
ICAgICAgIGluZGV4ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsK
KworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgICAgIAorICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0
b0Zsb2F0MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSAgICAKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlmICh3ZWJHTEFycmF5KSB7Cisg
ICAgICAgIHN3aXRjaCAoZikgeworICAgICAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgICAgICAg
ICAgY29udGV4dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjoKKyAgICAgICAgICAg
IGNvbnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgICAgICBj
b250ZXh0LnVuaWZvcm0zZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICAgICAgY29u
dGV4dC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OgorICAgICAgICAgICAg
Y29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgICAg
IGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6CisgICAgICAgICAg
ICBjb250ZXh0LnZlcnRleEF0dHJpYjNmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgorICAgICAgICAg
ICAgY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKwor
ICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOworCisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoK
KyAgICAgICAgY29udGV4dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5
LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAg
ICAgICBjb250ZXh0LnVuaWZvcm0yZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6
ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAg
IGNvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29u
dGV4dC51bmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6CisgICAgICAgIGNv
bnRleHQudmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgY29u
dGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICBjb250
ZXh0LnZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6CisgICAgICAgIGNvbnRl
eHQudmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRh
dGFGdW5jdGlvbmkoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBw
ZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgCisgICAgUmVmUHRyPEludDMyQXJyYXk+IHdl
YkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworCisg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKHdlYkdMQXJyYXkpIHsKKyAgICAgICAg
c3dpdGNoIChmKSB7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMXY6CisgICAgICAgICAgICBjb250
ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICAgICAgY29udGV4
dC51bmlmb3JtMml2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgICAgIGNvbnRleHQu
dW5pZm9ybTNpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6CisgICAgICAgICAgICBjb250ZXh0LnVu
aWZvcm00aXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIH0KKworCisgICAgVmVjdG9yPGludCwgNjQ+IGFycmF5Owor
ICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5
KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworCisgICAgc3dpdGNoIChm
KSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxv
Y2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9jYXRp
b24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJh
eS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1
ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CisKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICgh
bG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAgIGJvb2wgdHJh
bnNwb3NlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgICAgICAKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9G
bG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikpOworICAgICAgICAKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0
Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6CisgICAgICAgICAgICBj
b250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5n
ZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0
cml4M2Z2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
CisgICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZXhlYyk7CisKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybU1h
dHJpeDJmdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFu
c3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRy
aXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6CisgICAgICAg
IGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRh
KCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitK
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMXYsIGV4
ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTFpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uaShmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMnYs
IGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOwor
fQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3Jt
NHYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTRpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uaShmX3VuaWZvcm00diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4
MmZ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4ZWMsIGltcGwoKSk7
Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJp
eDRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0
cml4KGZfdW5pZm9ybU1hdHJpeDRmdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwgZXhl
YywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFG
dW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIydiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIzdiwg
ZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0diwgZXhlYywgaW1wbCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRlcmlu
Z0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3
MjcgKzI2LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0K
LSNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiQU5HTEVJ
bnN0YW5jZWRBcnJheXMuaCIKLSNpbmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5j
bHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElt
YWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNpbmNs
dWRlICJKU0VYVFNoYWRlclRleHR1cmVMT0QuaCIKLSNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3BpYy5oIgotI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2lu
Y2x1ZGUgIkpTT0VTRWxlbWVudEluZGV4VWludC5oIgotI2luY2x1ZGUgIkpTT0VTU3RhbmRhcmRE
ZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAi
SlNPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxv
YXQuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRl
ICJKU09FU1ZlcnRleEFycmF5T2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5oIgot
I2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1ZGUgIkpTV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUzNUQy5oIgotI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgotI2lu
Y2x1ZGUgIkpTV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKLSNpbmNsdWRlICJKU1dlYkdMRGVwdGhUZXh0
dXJlLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiSlNXZWJH
TEZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiSlNXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgiCi0j
aW5jbHVkZSAiSlNXZWJHTFNoYWRlci5oIgotI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgiCi0j
aW5jbHVkZSAiSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgotI2luY2x1ZGUgIkpTV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUy5oIgotI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50Lmgi
Ci0jaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIk9FU1RleHR1
cmVGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUg
Ik9FU1RleHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGlu
ZWFyLmgiCi0jaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJH
TEJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKLSNpbmNs
dWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIK
LSNpbmNsdWRlICJXZWJHTERlYnVnU2hhZGVycy5oIgotI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0
dXJlLmgiCi0jaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgotI2luY2x1ZGUgIldlYkdMRXh0
ZW5zaW9uLmgiCi0jaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdM
R2V0SW5mby5oIgotI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJH
TFByb2dyYW0uaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCi0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
VHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLQotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRl
ICJIVE1MVmlkZW9FbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50LmgiCi0j
ZW5kaWYKKyNpbmNsdWRlICJKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
V2ViR0xHZXRJbmZvJiBpbmZvKQotewotICAgIHN3aXRjaCAoaW5mby5nZXRUeXBlKCkpIHsKLSAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sOgotICAgICAgICByZXR1cm4ganNCb29sZWFu
KGluZm8uZ2V0Qm9vbCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sQXJyYXk6
IHsKLSAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgY29uc3QgVmVj
dG9yPGJvb2w+JiB2YWx1ZSA9IGluZm8uZ2V0Qm9vbEFycmF5KCk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsraWkpCi0gICAgICAgICAgICBsaXN0LmFw
cGVuZChqc0Jvb2xlYW4odmFsdWVbaWldKSk7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJh
eShleGVjLCAwLCBnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLSAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVGbG9hdDoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZm8uZ2V0RmxvYXQo
KSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlSW50OgotICAgICAgICByZXR1cm4ganNO
dW1iZXIoaW5mby5nZXRJbnQoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlTnVsbDoK
LSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVN0
cmluZzoKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGluZm8uZ2V0U3Ry
aW5nKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVVuc2lnbmVkSW50OgotICAgICAg
ICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRVbnNpZ25lZEludCgpKTsKLSAgICBjYXNlIFdlYkdM
R2V0SW5mbzo6a1R5cGVXZWJHTEJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMQnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZVdlYkdMRmxvYXRBcnJheToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBpbmZvLmdldFdlYkdMRmxvYXRBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVXZWJHTEZyYW1lYnVmZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGcmFtZWJ1ZmZlcigpKTsKLSAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVXZWJHTEludEFycmF5OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGluZm8uZ2V0V2ViR0xJbnRBcnJheSgpKTsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50IFdlYkdMT2JqZWN0QXJyYXkKLSAgICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJH
TE9iamVjdEFycmF5OgotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToK
LSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUHJv
Z3JhbSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFJlbmRlcmJ1ZmZlcjoK
LSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUmVu
ZGVyYnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVGV4dHVyZToK
LSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVGV4
dHVyZSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJH
TFVuc2lnbmVkSW50QXJyYXk6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkSW50QXJyYXkoKSk7Ci0gICAgY2FzZSBXZWJHTEdldElu
Zm86OmtUeXBlV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzoKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKSk7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotfQotCi1lbnVtIE9iamVjdFR5cGUgewotICAgIGtCdWZm
ZXIsIGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4QXR0cmliCi19OwotCi1zdGF0aWMg
SlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG9iaiwg
RXhlY1N0YXRlKiBleGVjLCBPYmplY3RUeXBlIG9iamVjdFR5cGUpCi17Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRl
eHQgPSBvYmotPmltcGwoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJ
bmZvIGluZm87Ci0gICAgc3dpdGNoIChvYmplY3RUeXBlKSB7Ci0gICAgY2FzZSBrQnVmZmVyOgot
ICAgICAgICBpbmZvID0gY29udGV4dC5nZXRCdWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwg
ZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtSZW5kZXJidWZmZXI6Ci0gICAgICAgIGlu
Zm8gPSBjb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga1RleHR1cmU6Ci0gICAgICAgIGluZm8gPSBjb250
ZXh0LmdldFRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2Uga1ZlcnRleEF0dHJpYjoKLSAgICAgICAgLy8gdGFyZ2V0ID0+IGluZGV4Ci0gICAg
ICAgIGluZm8gPSBjb250ZXh0LmdldFZlcnRleEF0dHJpYih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAg
IHJldHVybiB0b0pTKGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1lbnVt
IFdoaWNoUHJvZ3JhbUNhbGwgewotICAgIGtQcm9ncmFtUGFyYW1ldGVyLCBrVW5pZm9ybQotfTsK
LQotc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAgaWYgKCFl
eHRlbnNpb24pCi0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICBzd2l0Y2ggKGV4dGVuc2lv
bi0+Z2V0TmFtZSgpKSB7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xMb3NlQ29udGV4
dE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246OkVYVFNoYWRlclRleHR1cmVMT0ROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFNoYWRlclRleHR1cmVMT0QqPihleHRlbnNpb24p
KTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNO
YW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246Ok9FU1N0YW5kYXJkRGVyaXZhdGl2ZXNOYW1lOgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2
ZXMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxv
YXROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PE9FU1RleHR1cmVGbG9hdCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246Ok9FU1RleHR1cmVGbG9hdExpbmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6
Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VT
VGV4dHVyZUhhbGZGbG9hdCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246
Ok9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXJOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihl
eHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVj
dE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8T0VTVmVydGV4QXJyYXlPYmplY3QqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpPRVNFbGVtZW50SW5kZXhVaW50TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05h
bWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OldlYkdMRGVidWdTaGFkZXJzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikp
OwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1l
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVBVEMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVENOYW1lOgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29t
cHJlc3NlZFRleHR1cmVTM1RDTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lv
bikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKLSAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERl
cHRoVGV4dHVyZSo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdM
RHJhd0J1ZmZlcnNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PFdlYkdMRHJhd0J1ZmZlcnMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdl
YkdMRXh0ZW5zaW9uOjpBTkdMRUluc3RhbmNlZEFycmF5c05hbWU6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMq
PihleHRlbnNpb24pKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIGpzTnVsbCgpOwotfQotCi12b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJmltcGwoKSk7CiB9CiAKLUpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyhFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFt
ID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAg
VmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNoYWRlcnM7Ci0gICAgYm9vbCBzdWNjZWVkID0g
Y29udGV4dC5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgc2hhZGVycywgZWMpOwotICAgIGlm
IChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1
cm4ganNOdWxsKCk7Ci0gICAgfQotICAgIGlmICghc3VjY2VlZCkKLSAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgZm9yIChzaXplX3Qg
aWkgPSAwOyBpaSA8IHNoYWRlcnMuc2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZCh0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBzaGFkZXJzW2lpXS5nZXQoKSkpOwotICAgIHJldHVy
biBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KLUpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKLQotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGlt
cGwoKTsKLSAgICBjb25zdCBTdHJpbmcgbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMRXh0ZW5zaW9uKiBl
eHRlbnNpb24gPSBjb250ZXh0LmdldEV4dGVuc2lvbihuYW1lKTsKLSAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QoKSwgZXh0ZW5zaW9uKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtCdWZmZXIpOwotfQotCi1K
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgIT0gMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwot
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5m
byBpbmZvID0gY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFyZ2V0
LCBhdHRhY2htZW50LCBwbmFtZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1KU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMSkKLSAgICAgICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgp
LCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3Jh
bVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7
Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm8g
PSBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0
T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtSZW5kZXJidWZmZXIpOwotfQotCi1KU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0
dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIGlmICghZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkuaW5oZXJpdHMoSlNXZWJHTFNoYWRlcjo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdM
U2hhZGVyOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIHVuc2ln
bmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hh
ZGVyLCBwbmFtZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAg
aWYgKGNvbnRleHQuaXNDb250ZXh0TG9zdCgpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gdmFsdWUgPSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMo
KTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgIGZvciAoc2l6ZV90IGlpID0g
MDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsraWkpCi0gICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5n
V2l0aENhY2hlKGV4ZWMsIHZhbHVlW2lpXSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShl
eGVjLCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0
dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVGV4dHVyZSk7Ci19Ci0KLUpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0oRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4
ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9
IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwot
ICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRv
V3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAm
JiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0g
Y29udGV4dC5nZXRVbmlmb3JtKHByb2dyYW0sIGxvY2F0aW9uLCBlYyk7Ci0gICAgaWYgKGVjKSB7
Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
aW5mbyk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0
dHJpYihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0
aGlzLCBleGVjLCBrVmVydGV4QXR0cmliKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgotYm9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi17
Ci0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgaW50MzJfdCBs
ZW5ndGggPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCkudG9JbnQzMihleGVjKTsKLQotICAgIGlmICghdmVjdG9yLnRyeVJlc2VydmVDYXBhY2l0eShs
ZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmVjdG9yLnJlc2l6ZShsZW5ndGgp
OwotCi0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
SlNDOjpKU1ZhbHVlIHYgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2ZWN0
b3JbaV0gPSBzdGF0aWNfY2FzdDxUPih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotZW51bSBEYXRhRnVuY3Rpb25Ub0NhbGwgewotICAgIGZfdW5pZm9y
bTF2LCBmX3VuaWZvcm0ydiwgZl91bmlmb3JtM3YsIGZfdW5pZm9ybTR2LAotICAgIGZfdmVydGV4
QXR0cmliMXYsIGZfdmVydGV4QXR0cmliMnYsIGZfdmVydGV4QXR0cmliM3YsIGZfdmVydGV4QXR0
cmliNHYKLX07Ci0KLWVudW0gRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIHsKLSAgICBmX3VuaWZv
cm1NYXRyaXgyZnYsIGZfdW5pZm9ybU1hdHJpeDNmdiwgZl91bmlmb3JtTWF0cml4NGZ2Ci19Owot
Ci1zdGF0aWMgYm9vbCBmdW5jdGlvbkZvclVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCi17
Ci0gICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICBjYXNlIGZfdW5p
Zm9ybTJ2OgotICAgIGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgY2FzZSBmX3VuaWZvcm00djoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5j
dGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0
JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAg
ICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIAotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiA9IDA7Ci0gICAgbG9uZyBpbmRleCA9IC0xOwotICAgIAotICAgIGlmIChmdW5jdGlv
bkZvclVuaWZvcm0oZikpIHsKLSAgICAgICAgbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0
aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgICAgICBpZiAo
IWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIH0gZWxz
ZQotICAgICAgICBpbmRleCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgICAgICAKLSAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5
ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgICAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkg
ewotICAgICAgICBzd2l0Y2ggKGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAg
ICAgICAgIGNvbnRleHQudW5pZm9ybTFmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAg
ICAgICBjb250ZXh0LnVuaWZvcm0yZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICAg
ICAgY29udGV4dC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgICAg
IGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjoKLSAgICAgICAg
ICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAg
ICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjJmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgotICAgICAg
ICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKLSAgICAg
ICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliNGZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
Ci0KLSAgICBWZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMs
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjKTsKLQotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3Jt
MXY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBh
cnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoK
LSAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5
LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAg
ICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6
ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAg
IGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OgotICAgICAg
ICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXpl
KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAg
IGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUo
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAg
Y29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgotICAgICAgICBj
b250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotc3RhdGljIEpTQzo6SlNWYWx1
ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9X
cmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYm
ICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gIAotICAgIFJlZlB0cjxJbnQzMkFycmF5
PiB3ZWJHTEFycmF5ID0gdG9JbnQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsK
LQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmICh3ZWJHTEFycmF5KSB7Ci0gICAg
ICAgIHN3aXRjaCAoZikgewotICAgICAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAgICAgICAg
Y29udGV4dC51bmlmb3JtMWl2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgICAgIGNv
bnRleHQudW5pZm9ybTJpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgICAgICAgICBjb250
ZXh0LnVuaWZvcm0zaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTR2OgotICAgICAgICAgICAgY29udGV4
dC51bmlmb3JtNGl2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLQotICAgIFZlY3RvcjxpbnQsIDY0PiBhcnJh
eTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBh
cnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQotICAgIHN3aXRj
aCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTFp
dihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxv
Y2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRp
b24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU0M6OkpT
VmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCBmLCBKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwotCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZv
cm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBp
ZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBib29s
IHRyYW5zcG9zZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICAgICAgCi0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9
IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAg
c3dpdGNoIChmKSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgotICAgICAgICAg
ICAgY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJy
YXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9y
bU1hdHJpeDNmdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
biwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVu
aWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KLQotICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0b3IoZXhl
YywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwotCi0gICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBmX3VuaWZv
cm1NYXRyaXgyZnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwg
dHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDNmdjoKLSAgICAgICAgY29udGV4dC51bmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgp
LCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4NGZ2OgotICAg
ICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXku
ZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0K
LQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KEpTQzo6
RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2
LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0xaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFG
dW5jdGlvbmkoZl91bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsK
LX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9y
bTJ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgp
KTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5p
Zm9ybTR2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm00aXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJu
IGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1h
dHJpeDJmdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBpbXBs
KCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1N
YXRyaXg0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlv
bk1hdHJpeChmX3VuaWZvcm1NYXRyaXg0ZnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYs
IGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBk
YXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmli
M3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVy
biBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNs
dWRlICJKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2VDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKworI2luY2x1ZGUgIkFOR0xFSW5zdGFuY2Vk
QXJyYXlzLmgiCisjaW5jbHVkZSAiRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkVY
VFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJKU0FOR0xFSW5zdGFuY2VkQXJyYXlzLmgiCisjaW5jbHVkZSAiSlNF
WFRTaGFkZXJUZXh0dXJlTE9ELmgiCisjaW5jbHVkZSAiSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuaCIKKyNpbmNsdWRlICJKU0hUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNI
VE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJK
U09FU0VsZW1lbnRJbmRleFVpbnQuaCIKKyNpbmNsdWRlICJKU09FU1N0YW5kYXJkRGVyaXZhdGl2
ZXMuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdC5oIgorI2luY2x1ZGUgIkpTT0VTVGV4
dHVyZUZsb2F0TGluZWFyLmgiCisjaW5jbHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCisj
aW5jbHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCisjaW5jbHVkZSAiSlNPRVNW
ZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViR0xCdWZmZXIuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJKU1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oIgorI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMz
VEMuaCIKKyNpbmNsdWRlICJKU1dlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKKyNpbmNsdWRlICJK
U1dlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlcHRoVGV4dHVyZS5oIgor
I2luY2x1ZGUgIkpTV2ViR0xEcmF3QnVmZmVycy5oIgorI2luY2x1ZGUgIkpTV2ViR0xGcmFtZWJ1
ZmZlci5oIgorI2luY2x1ZGUgIkpTV2ViR0xMb3NlQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTV2Vi
R0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUg
IkpTV2ViR0xTaGFkZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMVGV4dHVyZS5oIgorI2luY2x1ZGUg
IkpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKKyNpbmNsdWRlICJKU1dlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuaCIKKyNpbmNsdWRlICJKU1dlYktpdENTU01hdHJpeC5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgorI2luY2x1
ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQu
aCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNUZXh0
dXJlSGFsZkZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgor
I2luY2x1ZGUgIk9FU1ZlcnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViR0xCdWZmZXIu
aCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCisjaW5jbHVkZSAiV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEMuaCIKKyNpbmNsdWRlICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKKyNpbmNsdWRlICJXZWJHTERlcHRoVGV4dHVyZS5oIgor
I2luY2x1ZGUgIldlYkdMRHJhd0J1ZmZlcnMuaCIKKyNpbmNsdWRlICJXZWJHTEV4dGVuc2lvbi5o
IgorI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTEdldEluZm8u
aCIKKyNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xQcm9ncmFt
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUgIldl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBl
ZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIkhU
TUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0hUTUxWaWRlb0VsZW1lbnQuaCIKKyNlbmRp
ZgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCit7CisgICAgc3dpdGNoIChpbmZvLmdl
dFR5cGUoKSkgeworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2w6CisgICAgICAgIHJl
dHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjpr
VHlwZUJvb2xBcnJheTogeworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAg
ICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5mby5nZXRCb29sQXJyYXkoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKKyAgICAg
ICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtpaV0pKTsKKyAgICAgICAgcmV0dXJu
IGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQorICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgorICAgICAgICByZXR1cm4ganNOdW1iZXIo
aW5mby5nZXRGbG9hdCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVJbnQ6CisgICAg
ICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVOdWxsOgorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgY2FzZSBXZWJHTEdl
dEluZm86OmtUeXBlU3RyaW5nOgorICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhl
YywgaW5mby5nZXRTdHJpbmcoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlVW5zaWdu
ZWRJbnQ6CisgICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldFVuc2lnbmVkSW50KCkpOwor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVmZmVyOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xCdWZmZXIoKSk7CisgICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5OgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGbG9hdEFycmF5KCkpOworICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZmZXI6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEZyYW1lYnVmZmVyKCkpOworICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEludEFycmF5KCkpOworICAgICAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkKKyAgICAgICAgLy8gY2FzZSBX
ZWJHTEdldEluZm86OmtUeXBlV2ViR0xPYmplY3RBcnJheToKKyAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVXZWJHTFByb2dyYW06CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgaW5mby5nZXRXZWJHTFByb2dyYW0oKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xSZW5kZXJidWZmZXI6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgaW5mby5nZXRXZWJHTFJlbmRlcmJ1ZmZlcigpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVXZWJHTFRleHR1cmU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgaW5mby5nZXRXZWJHTFRleHR1cmUoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xVbnNpZ25lZEJ5dGVBcnJheToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWduZWRCeXRlQXJyYXkoKSk7CisgICAgY2FzZSBX
ZWJHTEdldEluZm86OmtUeXBlV2ViR0xVbnNpZ25lZEludEFycmF5OgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEludEFycmF5KCkp
OworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6
CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KK30KKworZW51bSBP
YmplY3RUeXBlIHsKKyAgICBrQnVmZmVyLCBrUmVuZGVyYnVmZmVyLCBrVGV4dHVyZSwga1ZlcnRl
eEF0dHJpYgorfTsKKworc3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVyKEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFR5cGUgb2Jq
ZWN0VHlwZSkKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gb2JqLT5pbXBsKCk7CisgICAg
dW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSku
dG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0SW5mbyBpbmZvOworICAgIHN3aXRjaCAo
b2JqZWN0VHlwZSkgeworICAgIGNhc2Uga0J1ZmZlcjoKKyAgICAgICAgaW5mbyA9IGNvbnRleHQu
Z2V0QnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBrUmVuZGVyYnVmZmVyOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIGtUZXh0dXJlOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRUZXhQYXJhbWV0ZXIodGFy
Z2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI6
CisgICAgICAgIC8vIHRhcmdldCA9PiBpbmRleAorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRW
ZXJ0ZXhBdHRyaWIodGFyZ2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBvYmot
Pmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworZW51bSBXaGljaFByb2dyYW1DYWxsIHsKKyAg
ICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0KK307CisKK3N0YXRpYyBKU1ZhbHVlIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJHTEV4
dGVuc2lvbiogZXh0ZW5zaW9uKQoreworICAgIGlmICghZXh0ZW5zaW9uKQorICAgICAgICByZXR1
cm4ganNOdWxsKCk7CisgICAgc3dpdGNoIChleHRlbnNpb24tPmdldE5hbWUoKSkgeworICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OldlYkdMTG9zZUNvbnRleHROYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMTG9zZUNvbnRleHQqPihl
eHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRTaGFkZXJUZXh0dXJlTE9E
TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxFWFRTaGFkZXJUZXh0dXJlTE9EKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTmFtZToKKyAgICAgICAgcmV0dXJuIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNTdGFuZGFy
ZERlcml2YXRpdmVzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxPRVNTdGFuZGFyZERlcml2YXRpdmVzKj4oZXh0ZW5zaW9uKSk7CisgICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TmFtZToKKyAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXQqPihl
eHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXRMaW5l
YXJOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PE9FU1RleHR1cmVGbG9hdExpbmVhcio+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXROYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXQqPihleHRl
bnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0TGlu
ZWFyTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBX
ZWJHTEV4dGVuc2lvbjo6T0VTVmVydGV4QXJyYXlPYmplY3ROYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1ZlcnRleEFycmF5T2JqZWN0
Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTRWxlbWVudEluZGV4
VWludE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTRWxlbWVudEluZGV4VWludCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRGVidWdSZW5kZXJlckluZm9OYW1lOgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVidWdSZW5kZXJlckluZm8q
PihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlYnVnU2hhZGVy
c05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8V2ViR0xEZWJ1Z1NoYWRlcnMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMqPihleHRlbnNpb24pKTsK
KyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQ05hbWU6
CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVEMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpXZWJHTERlcHRoVGV4dHVyZU5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZXB0aFRleHR1cmUqPihleHRlbnNpb24p
KTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERyYXdCdWZmZXJzTmFtZToKKyAgICAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERyYXdC
dWZmZXJzKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6QU5HTEVJbnN0
YW5jZWRBcnJheXNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PEFOR0xFSW5zdGFuY2VkQXJyYXlzKj4oZXh0ZW5zaW9uKSk7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBqc051bGwoKTsKK30KKwordm9p
ZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgp
KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGVk
U2hhZGVycyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8IDEpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwor
ICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFk
ZXJzOworICAgIGJvb2wgc3VjY2VlZCA9IGNvbnRleHQuZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0sIHNoYWRlcnMsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIH0KKyAgICBpZiAoIXN1
Y2NlZWQpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBzaGFkZXJzLnNpemUoKTsgKytp
aSkKKyAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgc2hhZGVy
c1tpaV0uZ2V0KCkpKTsKKyAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFs
T2JqZWN0KCksIGxpc3QpOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0RXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24o
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgY29uc3QgU3Ry
aW5nIG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0gY29udGV4dC5n
ZXRFeHRlbnNpb24obmFtZSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IGV4dGVuc2lvbik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpn
ZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmpl
Y3RQYXJhbWV0ZXIodGhpcywgZXhlYywga0J1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKKyAg
ICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAg
dW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgyKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGlu
Zm8gPSBjb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0
dGFjaG1lbnQsIHBuYW1lLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgdW5zaWduZWQgcG5h
bWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
V2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBhcmFtZXRlcihwbmFtZSwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAg
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdM
UHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAo
IXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICB1bnNpZ25lZCBw
bmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFt
LCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtSZW5k
ZXJidWZmZXIpOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
U2hhZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250
ZXh0ID0gaW1wbCgpOworICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRl
ZmluZWRPck51bGwoKSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaW5oZXJpdHMoSlNX
ZWJHTFNoYWRlcjo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OworICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0SW5mbyBp
bmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoY29udGV4dC5p
c0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBWZWN0b3I8U3Ry
aW5nPiB2YWx1ZSA9IGNvbnRleHQuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVl
LnNpemUoKTsgKytpaSkKKyAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhl
YywgdmFsdWVbaWldKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2Jh
bE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFRleFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldE9i
amVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVGV4dHVyZSk7Cit9CisKK0pTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OworICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAg
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246
OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKCFsb2NhdGlv
biAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIFdlYkdMR2V0SW5mbyBpbmZv
ID0gY29udGV4dC5nZXRVbmlmb3JtKHByb2dyYW0sIGxvY2F0aW9uLCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qo
KSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRW
ZXJ0ZXhBdHRyaWIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJh
bWV0ZXIodGhpcywgZXhlYywga1ZlcnRleEF0dHJpYik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK2Jvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVj
dG9yKQoreworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKKyAg
ICBpbnQzMl90IGxlbmd0aCA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlO
YW1lcy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOworICAgIAorICAgIGlmICghdmVjdG9yLnRyeVJl
c2VydmVDYXBhY2l0eShsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdmVjdG9y
LnJlc2l6ZShsZW5ndGgpOworICAgIAorICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgdmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcihleGVj
KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitlbnVtIERhdGFGdW5jdGlv
blRvQ2FsbCB7CisgICAgZl91bmlmb3JtMXYsIGZfdW5pZm9ybTJ2LCBmX3VuaWZvcm0zdiwgZl91
bmlmb3JtNHYsCisgICAgZl92ZXJ0ZXhBdHRyaWIxdiwgZl92ZXJ0ZXhBdHRyaWIydiwgZl92ZXJ0
ZXhBdHRyaWIzdiwgZl92ZXJ0ZXhBdHRyaWI0dgorfTsKKworZW51bSBEYXRhRnVuY3Rpb25NYXRy
aXhUb0NhbGwgeworICAgIGZfdW5pZm9ybU1hdHJpeDJmdiwgZl91bmlmb3JtTWF0cml4M2Z2LCBm
X3VuaWZvcm1NYXRyaXg0ZnYKK307CisKK3N0YXRpYyBib29sIGZ1bmN0aW9uRm9yVW5pZm9ybShE
YXRhRnVuY3Rpb25Ub0NhbGwgZikKK3sKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5p
Zm9ybTF2OgorICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAg
ICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVl
IGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQoreworICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAor
ICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IDA7CisgICAgbG9uZyBpbmRleCA9
IC0xOworICAgIAorICAgIGlmIChmdW5jdGlvbkZvclVuaWZvcm0oZikpIHsKKyAgICAgICAgbG9j
YXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgICAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOworICAgIH0gZWxzZQorICAgICAgICBpbmRleCA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgCisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKKyAgICBSZWZQ
dHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaWYgKHdlYkdMQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoIChmKSB7CisgICAgICAgIGNhc2Ug
Zl91bmlmb3JtMXY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIHdl
YkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZf
dW5pZm9ybTJ2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJH
TEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3Vu
aWZvcm0zdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgd2ViR0xB
cnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlm
b3JtNHY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIHdlYkdMQXJy
YXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4
QXR0cmliMXY6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRleCwgd2Vi
R0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRl
eEF0dHJpYjJ2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHdl
YkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0
ZXhBdHRyaWIzdjoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliM2Z2KGluZGV4LCB3
ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdmVy
dGV4QXR0cmliNHY6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwg
d2ViR0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5Owor
ICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5
KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIHN3aXRj
aCAoZikgeworICAgIGNhc2UgZl91bmlmb3JtMXY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTFm
dihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBmX3VuaWZvcm0ydjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2KGxv
Y2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGZfdW5pZm9ybTN2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9jYXRp
b24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgZl91bmlmb3JtNHY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlvbiwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBmX3ZlcnRleEF0dHJpYjF2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRl
eCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IGZfdmVydGV4QXR0cmliMnY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGluZGV4
LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Zl92ZXJ0ZXhBdHRyaWIzdjoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgs
IGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBm
X3ZlcnRleEF0dHJpYjR2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRv
Q2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYg
Y29udGV4dCkKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjKTsKKyAgICAKKyAgICBSZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvSW50
MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgCisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaWYgKHdlYkdMQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoIChmKSB7
CisgICAgICAgIGNhc2UgZl91bmlmb3JtMXY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0x
aXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMml2
KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtNHY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICBWZWN0b3I8aW50LCA2ND4gYXJyYXk7CisgICAg
aWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQor
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgCisgICAgc3dpdGNoIChm
KSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxv
Y2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9jYXRp
b24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJh
eS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1
ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQoreworICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOworICAgIAorICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xV
bmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIAor
ICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFu
KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgCisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9
IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICAKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0
Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6CisgICAgICAgICAgICBj
b250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5n
ZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0
cml4M2Z2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
ICAgIAorICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhl
YywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIHN3aXRjaCAoZikgeworICAgIGNhc2UgZl91
bmlmb3JtTWF0cml4MmZ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRp
b24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6CisgICAgICAgIGNvbnRleHQudW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNp
emUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoK
KyAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFy
cmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25m
KGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMmZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9y
bTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTN2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkp
OworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
NGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZf
dW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4MmZ2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4
NGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRy
aXgoZl91bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwg
ZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMnYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjNmdihK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRl
eEF0dHJpYjN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0diwgZXhlYywgaW1wbCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RShXRUJHTCkKLQotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0KLSNpbmNs
dWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVM
T0QuaCIKLSNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKLSNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5
cy5oIgotI2luY2x1ZGUgIkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgotI2luY2x1ZGUgIkpTRVhU
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCi0jaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTSW1hZ2VE
YXRhLmgiCi0jaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiSlNP
RVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXQuaCIK
LSNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIkpTT0VTVGV4
dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5o
IgotI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJKU1dlYkdM
QnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJKU1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnUmVuZGVyZXJJ
bmZvLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgotI2luY2x1ZGUgIkpTV2Vi
R0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMuaCIKLSNpbmNs
dWRlICJKU1dlYkdMRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMTG9zZUNvbnRleHQu
aCIKLSNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJi
dWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFRl
eHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0jaW5jbHVkZSAi
SlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCi0jaW5jbHVkZSAiSlNXZWJLaXRDU1NNYXRy
aXguaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0VsZW1lbnRJ
bmRleFVpbnQuaCIKLSNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVk
ZSAiT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgi
Ci0jaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVI
YWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgotI2lu
Y2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgotI2luY2x1ZGUg
IldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCi0jaW5jbHVkZSAiV2Vi
R0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVk
ZSAiV2ViR0xFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5j
bHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5o
IgotI2luY2x1ZGUgIldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKLSNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRB
cnJheXMuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotCi0jaWYgRU5BQkxFKFZJREVP
KQotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hUTUxWaWRlb0Vs
ZW1lbnQuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCi17Ci0gICAg
c3dpdGNoIChpbmZvLmdldFR5cGUoKSkgewotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJv
b2w6Ci0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOwotICAgIGNhc2Ug
V2ViR0xHZXRJbmZvOjprVHlwZUJvb2xBcnJheTogewotICAgICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBsaXN0OwotICAgICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5mby5nZXRC
b29sQXJyYXkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUo
KTsgKytpaSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtpaV0pKTsK
LSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgbGlz
dCk7Ci0gICAgfQotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoaW5mby5nZXRGbG9hdCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6
a1R5cGVJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsKLSAgICBj
YXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVOdWxsOgotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0g
ICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlU3RyaW5nOgotICAgICAgICByZXR1cm4ganNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgaW5mby5nZXRTdHJpbmcoKSk7Ci0gICAgY2FzZSBXZWJHTEdldElu
Zm86OmtUeXBlVW5zaWduZWRJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldFVu
c2lnbmVkSW50KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVmZmVyOgot
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xCdWZm
ZXIoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5OgotICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGbG9hdEFy
cmF5KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZmZXI6Ci0g
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEZyYW1l
YnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJyYXk6Ci0g
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEludEFy
cmF5KCkpOwotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgV2ViR0xPYmplY3RBcnJheQotICAgIC8v
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMT2JqZWN0QXJyYXk6Ci0gICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlV2ViR0xQcm9ncmFtOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xQcm9ncmFtKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJ
bmZvOjprVHlwZVdlYkdMUmVuZGVyYnVmZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSk7Ci0gICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlV2ViR0xUZXh0dXJlOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xUZXh0dXJlKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJ
bmZvOjprVHlwZVdlYkdMVW5zaWduZWRCeXRlQXJyYXk6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KCkpOwotICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRJbnRBcnJheToKLSAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWduZWRJbnRB
cnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygpKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci19Ci0K
LWVudW0gT2JqZWN0VHlwZSB7Ci0gICAga0J1ZmZlciwga1JlbmRlcmJ1ZmZlciwga1RleHR1cmUs
IGtWZXJ0ZXhBdHRyaWIKLX07Ci0KLXN0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dCogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFR5cGUg
b2JqZWN0VHlwZSkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAg
ICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IG9iai0+aW1wbCgpOwotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50
MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbzsKLSAgICBzd2l0Y2ggKG9iamVj
dFR5cGUpIHsKLSAgICBjYXNlIGtCdWZmZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LmdldEJ1
ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2Uga1JlbmRlcmJ1ZmZlcjoKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBr
VGV4dHVyZToKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VGV4UGFyYW1ldGVyKHRhcmdldCwg
cG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVmVydGV4QXR0cmliOgotICAg
ICAgICAvLyB0YXJnZXQgPT4gaW5kZXgKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VmVydGV4
QXR0cmliKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlm
IChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb2JqLT5nbG9i
YWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLWVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7Ci0gICAga1By
b2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCi19OwotCi1zdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNT
dGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViR0xFeHRlbnNp
b24qIGV4dGVuc2lvbikKLXsKLSAgICBpZiAoIWV4dGVuc2lvbikKLSAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwotICAgIHN3aXRjaCAoZXh0ZW5zaW9uLT5nZXROYW1lKCkpIHsKLSAgICBjYXNlIFdl
YkdMRXh0ZW5zaW9uOjpXZWJHTExvc2VDb250ZXh0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTExvc2VDb250ZXh0Kj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUU2hhZGVyVGV4dHVyZUxPRE5hbWU6
Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhU
U2hhZGVyVGV4dHVyZUxPRCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246
OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTU3RhbmRhcmREZXJp
dmF0aXZlc05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8T0VTU3RhbmRhcmREZXJpdmF0aXZlcyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2Ug
V2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyTmFt
ZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxP
RVNUZXh0dXJlRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0Kj4oZXh0ZW5zaW9u
KSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhck5h
bWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246Ok9FU1ZlcnRleEFycmF5T2JqZWN0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4
dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU0VsZW1lbnRJbmRleFVpbnRO
YW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PE9FU0VsZW1lbnRJbmRleFVpbnQqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpXZWJHTERlYnVnUmVuZGVyZXJJbmZvTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnUmVuZGVyZXJJbmZvKj4oZXh0
ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1NoYWRlcnNOYW1l
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdl
YkdMRGVidWdTaGFkZXJzKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQ05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyo+KGV4
dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQ05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKj4oZXh0ZW5zaW9uKSk7Ci0gICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOgotICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29t
cHJlc3NlZFRleHR1cmVTM1RDKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lv
bjo6V2ViR0xEZXB0aFRleHR1cmVOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSk7Ci0g
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEcmF3QnVmZmVyc05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEcmF3QnVmZmVy
cyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkFOR0xFSW5zdGFuY2Vk
QXJyYXlzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxBTkdMRUluc3RhbmNlZEFycmF5cyo+KGV4dGVuc2lvbikpOwotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ganNOdWxsKCk7Ci19Ci0KLXZvaWQgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKLX0KLQot
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAg
ICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0q
IHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKLSAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
KTsKLSAgICBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyczsKLSAgICBib29sIHN1
Y2NlZWQgPSBjb250ZXh0LmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAg
ICAgIHJldHVybiBqc051bGwoKTsKLSAgICB9Ci0gICAgaWYgKCFzdWNjZWVkKQotICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICBmb3Ig
KHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXplKCk7ICsraWkpCi0gICAgICAgIGxpc3Qu
YXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHNoYWRlcnNbaWldLmdldCgpKSk7Ci0g
ICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsK
LX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAg
ICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250
ZXh0ID0gaW1wbCgpOwotICAgIGNvbnN0IFN0cmluZyBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xFeHRl
bnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQuZ2V0RXh0ZW5zaW9uKG5hbWUpOwotICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBleHRlbnNpb24pOwotfQotCi1KU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga0J1ZmZlcik7
Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSAhPSAzKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBp
bXBsKCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCku
dG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgcG5hbWUg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2Vi
R0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19
Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAxKQotICAgICAg
ICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgdW5zaWduZWQgcG5h
bWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
V2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBhcmFtZXRlcihwbmFtZSwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9
IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9X
cmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dyYW0gJiYg
IWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldElu
Zm8gaW5mbyA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMp
OwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1JlbmRlcmJ1ZmZlcik7Ci19Ci0K
LUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRlcihFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAg
ICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgaWYgKCFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKS5pbmhlcml0cyhKU1dlYkdMU2hhZGVyOjppbmZvKCkpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9
IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0g
ICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFNoYWRlclBhcmFt
ZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0K
LSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwo
KTsKLSAgICBpZiAoY29udGV4dC5pc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybiBqc051
bGwoKTsKLSAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZSA9IGNvbnRleHQuZ2V0U3VwcG9ydGVkRXh0
ZW5zaW9ucygpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgZm9yIChzaXpl
X3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKLSAgICAgICAgbGlzdC5hcHBlbmQo
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFsdWVbaWldKSk7Ci0gICAgcmV0dXJuIGNvbnN0cnVj
dEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKLX0KLQotSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtUZXh0dXJlKTsKLX0K
LQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybShFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
Ci0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2Nh
dGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoIWxv
Y2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgV2ViR0xHZXRJbmZv
IGluZm8gPSBjb250ZXh0LmdldFVuaWZvcm0ocHJvZ3JhbSwgbG9jYXRpb24sIGVjKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFy
YW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1ib29sIHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZl
Y3RvcikKLXsKLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICBp
bnQzMl90IGxlbmd0aCA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOwotCi0gICAgaWYgKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2ZWN0b3IucmVzaXpl
KGxlbmd0aCk7Ci0KLSAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewot
ICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYudG9OdW1iZXIoZXhlYykpOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1lbnVtIERhdGFGdW5jdGlvblRvQ2FsbCB7Ci0gICAg
Zl91bmlmb3JtMXYsIGZfdW5pZm9ybTJ2LCBmX3VuaWZvcm0zdiwgZl91bmlmb3JtNHYsCi0gICAg
Zl92ZXJ0ZXhBdHRyaWIxdiwgZl92ZXJ0ZXhBdHRyaWIydiwgZl92ZXJ0ZXhBdHRyaWIzdiwgZl92
ZXJ0ZXhBdHRyaWI0dgotfTsKLQotZW51bSBEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgewotICAg
IGZfdW5pZm9ybU1hdHJpeDJmdiwgZl91bmlmb3JtTWF0cml4M2Z2LCBmX3VuaWZvcm1NYXRyaXg0
ZnYKLX07Ci0KLXN0YXRpYyBib29sIGZ1bmN0aW9uRm9yVW5pZm9ybShEYXRhRnVuY3Rpb25Ub0Nh
bGwgZikKLXsKLSAgICBzd2l0Y2ggKGYpIHsKLSAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgIGNh
c2UgZl91bmlmb3JtMnY6Ci0gICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICBjYXNlIGZfdW5pZm9y
bTR2OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYo
RGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAy
KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgCi0gICAgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uID0gMDsKLSAgICBsb25nIGluZGV4ID0gLTE7Ci0gICAgCi0gICAgaWYg
KGZ1bmN0aW9uRm9yVW5pZm9ybShmKSkgewotICAgICAgICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlm
b3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAg
ICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGluZGV4ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9J
bnQzMihleGVjKTsKLQotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIAotICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdl
YkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgICAgIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmICh3ZWJH
TEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikgewotICAgICAgICBjYXNlIGZfdW5pZm9ybTF2
OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5Lmdl
dCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjoK
LSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQo
KSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtM3Y6Ci0g
ICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCks
IGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTR2OgotICAg
ICAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2Ogot
ICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoK
LSAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGluZGV4LCB3ZWJHTEFycmF5Lmdl
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6
Ci0gICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjNmdihpbmRleCwgd2ViR0xBcnJheS5n
ZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2
OgotICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHdlYkdMQXJyYXku
Z2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KLQotICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0
b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKLSAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotCi0gICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBm
X3VuaWZvcm0xdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5k
YXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5p
Zm9ybTJ2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0yZnYobG9jYXRpb24sIGFycmF5LmRhdGEo
KSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3Jt
M3Y6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBh
cnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm00djoK
LSAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5
LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6
Ci0gICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFy
cmF5LnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoK
LSAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2Ogot
ICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJh
eS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6Ci0g
ICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5
LnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1zdGF0aWMgSlND
OjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0K
LSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0
aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghbG9j
YXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgCi0gICAgUmVmUHRyPElu
dDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMSkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkp
IHsKLSAgICAgICAgc3dpdGNoIChmKSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAg
ICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVj
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgICAg
ICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAg
ICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgICAg
ICBjb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotCi0gICAgVmVjdG9yPGludCwg
NjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMSksIGFycmF5KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotCi0g
ICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAgICAgY29udGV4dC51
bmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgICAgICBjb250ZXh0LnVuaWZv
cm0yaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTNp
dihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxv
Y2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotc3RhdGlj
IEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxs
IGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQotICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7Ci0KLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dl
YkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQot
ICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFu
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgICAgICAKLSAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJH
TEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikpOwotICAg
ICAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkgewot
ICAgICAgICBzd2l0Y2ggKGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6Ci0g
ICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
d2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Zl91bmlmb3JtTWF0cml4M2Z2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4M2Z2
KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKLSAgICAgICAgICAgIGNv
bnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5Lmdl
dCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgfQotCi0gICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0b1Zl
Y3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgYXJyYXkpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKGYpIHsKLSAgICBjYXNl
IGZfdW5pZm9ybU1hdHJpeDJmdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OgotICAgICAgICBjb250ZXh0
LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJh
eS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0
ZnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3Nl
LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91
bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTFpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRl
KiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTJ2LCBleGVjLCBp
bXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmko
Zl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlND
OjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTN2LCBleGVj
LCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlv
bmYoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00diwgZXhlYywgaW1wbCgpKTsKLX0KLQot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91
bmlmb3JtTWF0cml4MmZ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4
ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRmdiwgZXhlYywgaW1wbCgpKTsKLX0KLQot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhB
dHRyaWIxdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIydiwgZXhlYywgaW1wbCgpKTsKLX0K
LQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0
ZXhBdHRyaWIzdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0diwgZXhlYywgaW1wbCgpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgxLDcgKzI5ODEs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgKEdldEdlbmVy
YXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEgIkltcGwiKSB7CiAgICAgICAgICAgICAgICAg
JHJvb3RTdHJpbmcgID0gIiAgICAke2ltcGxUeXBlfSogcm9vdCA9ICZqcyR7aW50ZXJmYWNlTmFt
ZX0tPmltcGwoKTtcbiI7CiAgICAgICAgICAgICB9IGVsc2lmIChHZXRHZW5lcmF0ZUlzUmVhY2hh
YmxlKCRpbnRlcmZhY2UpIGVxICJJbXBsV2ViR0xSZW5kZXJpbmdDb250ZXh0IikgewotICAgICAg
ICAgICAgICAgICRyb290U3RyaW5nICA9ICIgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiByb290
ID0gV1RGOjpnZXRQdHIoanMke2ludGVyZmFjZU5hbWV9LT5pbXBsKCkuY29udGV4dCgpKTtcbiI7
CisgICAgICAgICAgICAgICAgJHJvb3RTdHJpbmcgID0gIiAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiByb290ID0gV1RGOjpnZXRQdHIoanMke2ludGVyZmFjZU5hbWV9LT5pbXBsKCkuY29u
dGV4dCgpKTtcbiI7CiAgICAgICAgICAgICB9IGVsc2lmIChHZXRHZW5lcmF0ZUlzUmVhY2hhYmxl
KCRpbnRlcmZhY2UpIGVxICJJbXBsRnJhbWUiKSB7CiAgICAgICAgICAgICAgICAgJHJvb3RTdHJp
bmcgID0gIiAgICBGcmFtZSogcm9vdCA9IFdURjo6Z2V0UHRyKGpzJHtpbnRlcmZhY2VOYW1lfS0+
aW1wbCgpLmZyYW1lKCkpO1xuIjsKICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAuPSAiICAg
IGlmICghcm9vdClcbiI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDEwIEBACiAjaW5jbHVk
ZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIAot
I2lmIEVOQUJMRShXRUJHTCkgICAgCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIldlYkdM
MVJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIldlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIxMiw3
ICsyMTMsOCBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVuCiAgICAg
ICAgICAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQtPmlzM2QoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGlmICghbV9jb250ZXh0KSB7Ci0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGhp
cywgc3RhdGljX2Nhc3Q8V2ViR0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSk7CisgICAgICAg
ICAgICAgICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKHRo
aXMsIHN0YXRpY19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihhdHRycyksIHR5cGUpOwor
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29t
cG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMKICAgICAgICAgICAgICAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CkBAIC0yNTUs
NyArMjU3LDcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXMyZFR5cGUoY29uc3QgUwogYm9v
bCBIVE1MQ2FudmFzRWxlbWVudDo6aXMzZFR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAg
IC8vIFJldGFpbiBzdXBwb3J0IGZvciB0aGUgbGVnYWN5ICJ3ZWJraXQtM2QiIG5hbWUuCi0gICAg
cmV0dXJuIHR5cGUgPT0gIndlYmdsIiB8fCB0eXBlID09ICJleHBlcmltZW50YWwtd2ViZ2wiIHx8
IHR5cGUgPT0gIndlYmtpdC0zZCI7CisgICAgcmV0dXJuIHR5cGUgPT0gIndlYmdsIiB8fCB0eXBl
ID09ICJleHBlcmltZW50YWwtd2ViZ2wiIHx8IHR5cGUgPT0gIndlYmtpdC0zZCIgfHwgdHlwZSA9
PSAiZXhwZXJpbWVudGFsLXdlYmdsMiI7CiB9CiAjZW5kaWYKIApAQCAtMzI3LDcgKzMyOSw3IEBA
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKIAogI2lmIEVOQUJMRShXRUJHTCkKICAg
ICBpZiAoaXMzRCgpICYmIG9sZFNpemUgIT0gc2l6ZSgpKQotICAgICAgICBzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpLT5yZXNoYXBlKHdpZHRoKCks
IGhlaWdodCgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSo+KG1fY29udGV4dC5nZXQoKSktPnJlc2hhcGUod2lkdGgoKSwgaGVpZ2h0KCkpOwogI2VuZGlm
CiAKICAgICBpZiAoYXV0byByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpIHsKQEAgLTM5NCw3
ICszOTYsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYWludChHcmFwaGljc0NvCiAKICNp
ZiBFTkFCTEUoV0VCR0wpICAgIAogICAgIGlmIChpczNEKCkpCi0gICAgICAgIHN0YXRpY19jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSktPm1hcmtMYXllckNvbXBv
c2l0ZWQoKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSo+
KG1fY29udGV4dC5nZXQoKSktPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKICNlbmRpZgogfQogCkBA
IC00NzUsNyArNDc3LDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gSFRNTENhbnZhc0VsZW1lbnQ6Omdl
dAogICAgIGlmICghaXMzRCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY3R4ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0
Kj4obV9jb250ZXh0LmdldCgpKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgg
PSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4obV9jb250ZXh0LmdldCgp
KTsKIAogICAgIHJldHVybiBjdHgtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7
CiAjZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRB
cnJheXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xF
SW5zdGFuY2VkQXJyYXlzLmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQU5HTEVJbnN0YW5jZWRBcnJh
eXM6OkFOR0xFSW5zdGFuY2VkQXJyYXlzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkK
K0FOR0xFSW5zdGFuY2VkQXJyYXlzOjpBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsK
IH0KQEAgLTQ4LDcgKzQ4LDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgQU5HTEVJ
bnN0YQogICAgIHJldHVybiBBTkdMRUluc3RhbmNlZEFycmF5c05hbWU7CiB9CiAKLWJvb2wgQU5H
TEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCitib29sIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY29udGV4dCkKIHsKICNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1B
QykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAgICAgVU5VU0VE
X1BBUkFNKGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJ
bnN0YW5jZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9BTkdMRUluc3RhbmNlZEFycmF5cy5oCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxNiArMzAsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCiBjbGFz
cyBBTkdMRUluc3RhbmNlZEFycmF5cyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQU5HTEVJbnN0YW5jZWRBcnJheXMoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgZXhwbGljaXQgQU5HTEVJbnN0YW5jZWRBcnJheXMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkFOR0xFSW5zdGFuY2VkQXJyYXlzKCk7CiAK
ICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0OwogCi0gICAgc3RhdGlj
IGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRpYyBib29s
IHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2b2lkIGRyYXdB
cnJheXNJbnN0YW5jZWRBTkdMRShHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6
ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpOwogICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5z
dGFuY2VkQU5HTEUoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBl
LCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw3
IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW4KICNpZiAhRU5BQkxF
KERBU0hCT0FSRF9TVVBQT1JUKQogICAgIEFTU0VSVF9VTlVTRUQodXNlc0Rhc2hib2FyZENvbXBh
dGliaWxpdHlNb2RlLCAhdXNlc0Rhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKTsKICNlbmRpZgor
ICAgIG1fdHlwZSA9ICIyZCI7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp1
bndpbmRTdGF0ZVN0YWNrKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzMmQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKCkge30KICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCB7IHJldHVybiAwOyB9CkBAIC03Myw2ICs3NCw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAg
dm9pZCBjaGVja09yaWdpbihjb25zdCBVUkwmKTsKIAorICAgIFN0cmluZyBtX3R5cGU7CiBwcml2
YXRlOgogICAgIEhUTUxDYW52YXNFbGVtZW50KiBtX2NhbnZhczsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNwcAkocmV2
aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4
dHVyZUxPRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1FWFRTaGFkZXJUZXh0dXJlTE9EOjpFWFRTaGFkZXJUZXh0dXJlTE9EKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK0VYVFNoYWRlclRleHR1cmVMT0Q6OkVYVFNo
YWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5oCShyZXZpc2lvbiAxNzY5OTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBF
WFRTaGFkZXJUZXh0dXJlTE9EIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBFWFRTaGFkZXJUZXh0dXJlTE9EKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIGV4cGxpY2l0IEVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVYVFNoYWRlclRleHR1cmVMT0QoKTsKIAogICAgIHZp
cnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYy5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWM6OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCitFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM6OkVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpYyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAg
IDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oCShy
ZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRUZXh0dXJl
RmlsdGVyQW5pc290cm9waWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxp
Y2l0IEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Kik7CiAgICAgdmlydHVhbCB+RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKCk7CiAKICAgICB2
aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5jcHAJ
KHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU0VsZW1l
bnRJbmRleFVpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotT0VTRWxlbWVudEluZGV4VWludDo6T0VTRWxlbWVudEluZGV4VWlu
dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitPRVNFbGVtZW50SW5kZXhVaW50OjpP
RVNFbGVtZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAg
ICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU0VsZW1lbnRJbmRleFVpbnQuaAkocmV2aXNpb24gMTc2OTk0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgT0VTRWxlbWVudEluZGV4VWludCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgT0VTRWxlbWVudEluZGV4VWludChXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqKTsKKyAgICBleHBsaWNpdCBPRVNFbGVtZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5PRVNFbGVtZW50SW5kZXhVaW50KCk7CiAKICAg
ICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0
aXZlcy5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotT0VTU3RhbmRhcmREZXJpdmF0aXZlczo6T0VT
U3RhbmRhcmREZXJpdmF0aXZlcyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitPRVNT
dGFuZGFyZERlcml2YXRpdmVzOjpPRVNTdGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1N0YW5kYXJk
RGVyaXZhdGl2ZXMuaAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgT0VTU3RhbmRhcmREZXJpdmF0aXZl
cyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
T0VTU3RhbmRhcmREZXJpdmF0aXZlcyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBs
aWNpdCBPRVNTdGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsK
ICAgICB2aXJ0dWFsIH5PRVNTdGFuZGFyZERlcml2YXRpdmVzKCk7CiAKICAgICB2aXJ0dWFsIEV4
dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwCShyZXZpc2lvbiAxNzY5OTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotT0VT
VGV4dHVyZUZsb2F0OjpPRVNUZXh0dXJlRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQorT0VTVGV4dHVyZUZsb2F0OjpPRVNUZXh0dXJlRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaAkocmV2
aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZs
b2F0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBPRVNUZXh0dXJlRmxvYXQgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24g
ewogcHVibGljOgotICAgIE9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBPRVNUZXh0dXJlRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZp
cnR1YWwgfk9FU1RleHR1cmVGbG9hdCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdl
dE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L09FU1RleHR1cmVGbG9hdExpbmVhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcAkocmV2aXNpb24gMTc2OTk0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LU9FU1RleHR1cmVGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK09FU1RleHR1cmVGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUZs
b2F0TGluZWFyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJH
TEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgJKHJldmlzaW9uIDE3Njk5NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVhci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
T0VTVGV4dHVyZUZsb2F0TGluZWFyIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBPRVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgZXhwbGljaXQgT0VTVGV4dHVyZUZsb2F0TGluZWFyKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5PRVNUZXh0dXJlRmxvYXRMaW5lYXIoKTsK
IAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZs
b2F0LmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUhhbGZGbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNUZXh0dXJlSGFsZkZsb2F0OjpPRVNUZXh0dXJl
SGFsZkZsb2F0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU1RleHR1cmVIYWxm
RmxvYXQ6Ok9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29u
dGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5oCShyZXZpc2lv
biAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZs
b2F0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0IGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5z
aW9uIHsKIHB1YmxpYzoKLSAgICBPRVNUZXh0dXJlSGFsZkZsb2F0KFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCopOworICAgIE9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVIYWxmRmxvYXQoKTsKIAogICAgIHZpcnR1YWwg
RXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFy
LmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyOjpP
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkK
K09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI6Ok9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNv
bnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJl
SGFsZkZsb2F0TGluZWFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBP
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsK
IHB1YmxpYzoKLSAgICBPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCopOworICAgIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoKTsKIAog
ICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNWZXJ0ZXhBcnJheU9iamVjdDo6T0VTVmVydGV4
QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VTVmVydGV4QXJy
YXlPYmplY3Q6Ok9FU1ZlcnRleEFycmF5T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
IGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5oCShy
ZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhB
cnJheU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMTQgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOwogY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsK
IAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgT0VTVmVydGV4QXJyYXlPYmpl
Y3QgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIE9FU1ZlcnRl
eEFycmF5T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIE9FU1ZlcnRleEFycmF5
T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5PRVNWZXJ0
ZXhBcnJheU9iamVjdCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBj
b25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJl
bmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNzY5OTQpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6MTc2OTk0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MjYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dC5oIgorCisjaW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJDYWNo
ZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRl
ICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFz
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
VmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgorI2luY2x1ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2
ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJl
RmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCisjaW5jbHVk
ZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIk9FU1ZlcnRleEFycmF5
T2JqZWN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViR0xCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgi
CisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCisjaW5jbHVkZSAiV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmgiCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJHTENv
bnRleHRHcm91cC5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKKyNpbmNs
dWRlICJXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0dXJlLmgi
CisjaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgorI2luY2x1ZGUgIldlYkdMRnJhbWVidWZm
ZXIuaCIKKyNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xQcm9n
cmFtLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTFNo
YWRlci5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmgiCisjaW5jbHVk
ZSAiV2ViR0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKKwor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRB
cnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1VpbnQzMkFycmF5Lmg+CisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY29uc3QgZG91YmxlIHNlY29uZHNCZXR3ZWVuUmVzdG9yZUF0dGVtcHRzID0gMS4wOworY29u
c3QgaW50IG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSA9IDI1NjsKKworbmFtZXNwYWNlIHsK
KworICAgIGNsYXNzIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVm
ZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICA6
IG1fZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgLCBtX2ZyYW1lYnVm
ZmVyQmluZGluZyhmcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcp
CisgICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZl
cikKKyAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgICAgICB9
CisKKyAgICAgICAgflNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIoKQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgICAgICBp
ZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVmZmVyOworICAgICAgICBXZWJHTEZy
YW1lYnVmZmVyKiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKKyAgICB9OworCisgICAgUGxhdGZvcm0z
RE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9iamVjdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDogMDsKKyAgICB9CisKKyAgICB2b2lk
IGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkgcmFuZ2UsIEdDM0RzaXplaSBzb3VyY2VS
YW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNEc2l6ZWkqIGNsaXBwZWRSYW5nZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYgY2xpcHBlZFJhbmdlKTsKKyAgICAg
ICAgaWYgKHN0YXJ0IDwgMCkgeworICAgICAgICAgICAgcmFuZ2UgKz0gc3RhcnQ7CisgICAgICAg
ICAgICBzdGFydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgR0MzRGludCBlbmQgPSBzdGFydCAr
IHJhbmdlOworICAgICAgICBpZiAoZW5kID4gc291cmNlUmFuZ2UpCisgICAgICAgICAgICByYW5n
ZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKKyAgICAgICAgKmNsaXBwZWRTdGFydCA9IHN0YXJ0Owor
ICAgICAgICAqY2xpcHBlZFJhbmdlID0gcmFuZ2U7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBm
YWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGkuZS4sIHgsIHksIHdpZHRoLCBoZWln
aHQgc3RheSB0aGUgc2FtZS4KKyAgICBib29sIGNsaXAyRChHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSBzb3VyY2VXaWR0aCwgR0MzRHNpemVpIHNvdXJjZUhlaWdodCwKKyAgICAgICAgICAgICAg
ICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGludCogY2xpcHBlZFksIEdDM0RzaXplaSogY2xpcHBl
ZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhlaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVChj
bGlwcGVkWCAmJiBjbGlwcGVkWSAmJiBjbGlwcGVkV2lkdGggJiYgY2xpcHBlZEhlaWdodCk7Cisg
ICAgICAgIGNsaXAxRCh4LCB3aWR0aCwgc291cmNlV2lkdGgsIGNsaXBwZWRYLCBjbGlwcGVkV2lk
dGgpOworICAgICAgICBjbGlwMUQoeSwgaGVpZ2h0LCBzb3VyY2VIZWlnaHQsIGNsaXBwZWRZLCBj
bGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuICgqY2xpcHBlZFggIT0geCB8fCAqY2xpcHBl
ZFkgIT0geSB8fCAqY2xpcHBlZFdpZHRoICE9IHdpZHRoIHx8ICpjbGlwcGVkSGVpZ2h0ICE9IGhl
aWdodCk7CisgICAgfQorCisgICAgR0MzRGludCBjbGFtcChHQzNEaW50IHZhbHVlLCBHQzNEaW50
IG1pbiwgR0MzRGludCBtYXgpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPCBtaW4pCisgICAg
ICAgICAgICB2YWx1ZSA9IG1pbjsKKyAgICAgICAgaWYgKHZhbHVlID4gbWF4KQorICAgICAgICAg
ICAgdmFsdWUgPSBtYXg7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiBhIGNoYXJhY3RlciBiZWxvbmdzIHRvIHRoZSBBU0NJSSBzdWJzZXQgYXMg
ZGVmaW5lZCBpbgorICAgIC8vIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCisgICAgYm9v
bCB2YWxpZGF0ZUNoYXJhY3Rlcih1bnNpZ25lZCBjaGFyIGMpCisgICAgeworICAgICAgICAvLyBQ
cmludGluZyBjaGFyYWN0ZXJzIGFyZSB2YWxpZCBleGNlcHQgIiAkIGAgQCBcICcgREVMLgorICAg
ICAgICBpZiAoYyA+PSAzMiAmJiBjIDw9IDEyNgorICAgICAgICAgICAgJiYgYyAhPSAnIicgJiYg
YyAhPSAnJCcgJiYgYyAhPSAnYCcgJiYgYyAhPSAnQCcgJiYgYyAhPSAnXFwnICYmIGMgIT0gJ1wn
JykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvLyBIb3Jpem9udGFsIHRhYiwg
bGluZSBmZWVkLCB2ZXJ0aWNhbCB0YWIsIGZvcm0gZmVlZCwgY2FycmlhZ2UgcmV0dXJuCisgICAg
ICAgIC8vIGFyZSBhbHNvIHZhbGlkLgorICAgICAgICBpZiAoYyA+PSA5ICYmIGMgPD0gMTMpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgaXNQcmVmaXhSZXNlcnZlZChjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAg
ICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJnbF8iKSB8fCBuYW1lLnN0YXJ0c1dpdGgoIndlYmds
XyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiX3dlYmdsXyIpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBTdHJpcHMgY29tbWVu
dHMgZnJvbSBzaGFkZXIgdGV4dC4gVGhpcyBhbGxvd3Mgbm9uLUFTQ0lJIGNoYXJhY3RlcnMKKyAg
ICAvLyB0byBiZSB1c2VkIGluIGNvbW1lbnRzIHdpdGhvdXQgcG90ZW50aWFsbHkgYnJlYWtpbmcg
T3BlbkdMCisgICAgLy8gaW1wbGVtZW50YXRpb25zIG5vdCBleHBlY3RpbmcgY2hhcmFjdGVycyBv
dXRzaWRlIHRoZSBHTFNMIEVTIHNldC4KKyAgICBjbGFzcyBTdHJpcENvbW1lbnRzIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFN0cmlwQ29tbWVudHMoY29uc3QgU3RyaW5nJiBzdHIpCisgICAgICAg
ICAgICA6IG1fcGFyc2VTdGF0ZShCZWdpbm5pbmdPZkxpbmUpCisgICAgICAgICAgICAsIG1fc291
cmNlU3RyaW5nKHN0cikKKyAgICAgICAgICAgICwgbV9sZW5ndGgoc3RyLmxlbmd0aCgpKQorICAg
ICAgICAgICAgLCBtX3Bvc2l0aW9uKDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlKCk7
CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgcmVzdWx0KCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBib29sIGhhc01vcmVDaGFyYWN0ZXJzKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIChtX3Bvc2l0aW9uIDwgbV9sZW5ndGgpOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBwYXJzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChoYXNN
b3JlQ2hhcmFjdGVycygpKSB7CisgICAgICAgICAgICAgICAgcHJvY2VzcyhjdXJyZW50KCkpOwor
ICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MoKSBtaWdodCBhZHZhbmNlIHRoZSBwb3NpdGlvbi4K
KyAgICAgICAgICAgICAgICBpZiAoaGFzTW9yZUNoYXJhY3RlcnMoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBwcm9jZXNzKFVDaGFyKTsKKworICAgICAgICBib29sIHBlZWsoVUNoYXImIGNoYXJhY3Rlcikg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fcG9zaXRpb24gKyAxID49IG1fbGVu
Z3RoKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNoYXJhY3Rl
ciA9IG1fc291cmNlU3RyaW5nW21fcG9zaXRpb24gKyAxXTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fcG9zaXRp
b24gPCBtX2xlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gbV9zb3VyY2VTdHJpbmdbbV9wb3Np
dGlvbl07CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkdmFuY2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICArK21fcG9zaXRpb247CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzTmV3
bGluZShVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERv
bid0IGF0dGVtcHQgdG8gY2Fub25pY2FsaXplIG5ld2xpbmUgcmVsYXRlZCBjaGFyYWN0ZXJzLgor
ICAgICAgICAgICAgcmV0dXJuIChjaGFyYWN0ZXIgPT0gJ1xuJyB8fCBjaGFyYWN0ZXIgPT0gJ1xy
Jyk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGVtaXQoVUNoYXIgY2hhcmFjdGVyKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgICAg
IH0KKworICAgICAgICBlbnVtIFBhcnNlU3RhdGUgeworICAgICAgICAgICAgLy8gSGF2ZSBub3Qg
c2VlbiBhbiBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgeWV0IG9uCisgICAgICAgICAg
ICAvLyB0aGlzIGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgc2VlIGEgcHJlcHJvY2Vzc29y
CisgICAgICAgICAgICAvLyBkaXJlY3RpdmUuCisgICAgICAgICAgICBCZWdpbm5pbmdPZkxpbmUs
CisKKyAgICAgICAgICAgIC8vIEhhdmUgc2VlbiBhdCBsZWFzdCBvbmUgQVNDSUkgbm9uLXdoaXRl
c3BhY2UgY2hhcmFjdGVyCisgICAgICAgICAgICAvLyBvbiB0aGlzIGxpbmUuCisgICAgICAgICAg
ICBNaWRkbGVPZkxpbmUsCisKKyAgICAgICAgICAgIC8vIEhhbmRsaW5nIGEgcHJlcHJvY2Vzc29y
IGRpcmVjdGl2ZS4gUGFzc2VzIHRocm91Z2ggYWxsCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJz
IHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIERpc2FibGVzIGNvbW1lbnQKKyAgICAgICAgICAg
IC8vIHByb2Nlc3NpbmcuCisgICAgICAgICAgICBJblByZXByb2Nlc3NvckRpcmVjdGl2ZSwKKwor
ICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBzaW5nbGUtbGluZSBjb21tZW50LiBUaGUgY29tbWVu
dCB0ZXh0IGlzCisgICAgICAgICAgICAvLyByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLgor
ICAgICAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVudCwKKworICAgICAgICAgICAgLy8gSGFuZGxp
bmcgYSBtdWx0aS1saW5lIGNvbW1lbnQuIE5ld2xpbmVzIGFyZSBwYXNzZWQKKyAgICAgICAgICAg
IC8vIHRocm91Z2ggdG8gcHJlc2VydmUgbGluZSBudW1iZXJzLgorICAgICAgICAgICAgSW5NdWx0
aUxpbmVDb21tZW50CisgICAgICAgIH07CisKKyAgICAgICAgUGFyc2VTdGF0ZSBtX3BhcnNlU3Rh
dGU7CisgICAgICAgIFN0cmluZyBtX3NvdXJjZVN0cmluZzsKKyAgICAgICAgdW5zaWduZWQgbV9s
ZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIG1fcG9zaXRpb247CisgICAgICAgIFN0cmluZ0J1aWxk
ZXIgbV9idWlsZGVyOworICAgIH07CisKKyAgICB2b2lkIFN0cmlwQ29tbWVudHM6OnByb2Nlc3Mo
VUNoYXIgYykKKyAgICB7CisgICAgICAgIGlmIChpc05ld2xpbmUoYykpIHsKKyAgICAgICAgICAg
IC8vIE5vIG1hdHRlciB3aGF0IHN0YXRlIHdlIGFyZSBpbiwgcGFzcyB0aHJvdWdoIG5ld2xpbmVz
CisgICAgICAgICAgICAvLyBzbyB3ZSBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisgICAgICAgICAg
ICBlbWl0KGMpOworCisgICAgICAgICAgICBpZiAobV9wYXJzZVN0YXRlICE9IEluTXVsdGlMaW5l
Q29tbWVudCkKKyAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBCZWdpbm5pbmdPZkxpbmU7
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFVDaGFyIHRlbXAg
PSAwOworICAgICAgICBzd2l0Y2ggKG1fcGFyc2VTdGF0ZSkgeworICAgICAgICBjYXNlIEJlZ2lu
bmluZ09mTGluZToKKyAgICAgICAgICAgIGlmIChXVEY6OmlzQVNDSUlTcGFjZShjKSkgeworICAg
ICAgICAgICAgICAgIGVtaXQoYyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChjID09ICcjJykgeworICAgICAgICAgICAgICAgIG1fcGFy
c2VTdGF0ZSA9IEluUHJlcHJvY2Vzc29yRGlyZWN0aXZlOworICAgICAgICAgICAgICAgIGVtaXQo
Yyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIFRyYW5zaXRpb24gdG8gbm9ybWFsIHN0YXRlIGFuZCByZS1oYW5kbGUgY2hhcmFjdGVyLgor
ICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gTWlkZGxlT2ZMaW5lOworICAgICAgICAgICAgcHJv
Y2VzcyhjKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTWlkZGxlT2ZMaW5l
OgorICAgICAgICAgICAgaWYgKGMgPT0gJy8nICYmIHBlZWsodGVtcCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodGVtcCA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRl
ID0gSW5TaW5nbGVMaW5lQ29tbWVudDsKKyAgICAgICAgICAgICAgICAgICAgZW1pdCgnICcpOwor
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcqJykg
eworICAgICAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBJbk11bHRpTGluZUNvbW1lbnQ7
CisgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNvbW1lbnQgc3RhcnQgaW4gY2FzZSB0
aGUgdXNlciBoYXMKKyAgICAgICAgICAgICAgICAgICAgLy8gYW4gdW5jbG9zZWQgY29tbWVudCBh
bmQgd2Ugd2FudCB0byBsYXRlcgorICAgICAgICAgICAgICAgICAgICAvLyBzaWduYWwgYW4gZXJy
b3IuCisgICAgICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdCgnKicpOworICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSW5QcmVw
cm9jZXNzb3JEaXJlY3RpdmU6CisgICAgICAgICAgICAvLyBObyBtYXR0ZXIgd2hhdCB0aGUgY2hh
cmFjdGVyIGlzLCBqdXN0IHBhc3MgaXQKKyAgICAgICAgICAgIC8vIHRocm91Z2guIERvIG5vdCBw
YXJzZSBjb21tZW50cyBpbiB0aGlzIHN0YXRlLiBUaGlzCisgICAgICAgICAgICAvLyBtaWdodCBu
b3QgYmUgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGxvbmcgdGVybSwgYnV0IGl0CisgICAgICAgICAg
ICAvLyBzaG91bGQgaGFuZGxlIHRoZSAjZXJyb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4KKyAg
ICAgICAgICAgIGVtaXQoYyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElu
U2luZ2xlTGluZUNvbW1lbnQ6CisgICAgICAgICAgICAvLyBUaGUgbmV3bGluZSBjb2RlIGF0IHRo
ZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlCisgICAgICAgICAgICAvLyBvZiByZXNl
dHRpbmcgb3VyIHN0YXRlIHdoZW4gd2UgZ2V0IG91dCBvZiB0aGUKKyAgICAgICAgICAgIC8vIHNp
bmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEluTXVsdGlMaW5lQ29tbWVudDoKKyAgICAgICAg
ICAgIGlmIChjID09ICcqJyAmJiBwZWVrKHRlbXApICYmIHRlbXAgPT0gJy8nKSB7CisgICAgICAg
ICAgICAgICAgZW1pdCgnKicpOworICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAgICAgICAg
ICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7CisgICAgICAgICAgICAgICAgYWR2
YW5jZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJzLiBVbmNsZWFyIHdoZXRoZXIgd2Ug
bWF5CisgICAgICAgICAgICAvLyB3YW50IG9yIG5lZWQgdG8ganVzdCBlbWl0IGEgc3BhY2UgcGVy
IGNoYXJhY3RlciB0byB0cnkKKyAgICAgICAgICAgIC8vIHRvIHByZXNlcnZlIGNvbHVtbiBudW1i
ZXJzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KK30gLy8gbmFtZXNwYWNlIGFub255bW91cworCitjbGFzcyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRMb3N0Q2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRM
b3N0Q2FsbGJhY2sgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayhXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9CisgICAgdmlydHVhbCB2b2lkIG9uQ29u
dGV4dExvc3QoKSBvdmVycmlkZSB7IG1fY29udGV4dC0+Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OlJlYWxMb3N0Q29udGV4dCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJHTFJl
bmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7fQorcHJpdmF0ZToKKyAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIG1fY29udGV4dDsKK307CisKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEVycm9yTWVzc2FnZUNhbGxiYWNrIDogcHVibGljIEdyYXBoaWNzQ29udGV4dDNEOjpFcnJvck1l
c3NhZ2VDYWxsYmFjayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjYikgOiBtX2NvbnRleHQoY2IpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBvbkVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEdDM0RpbnQpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAobV9jb250ZXh0LT5tX3N5bnRoZXNpemVkRXJyb3JzVG9D
b25zb2xlKQorICAgICAgICAgICAgbV9jb250ZXh0LT5wcmludEdMRXJyb3JUb0NvbnNvbGUobWVz
c2FnZSk7CisgICAgfQorICAgIHZpcnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVz
c2FnZUNhbGxiYWNrKCkgeyB9Citwcml2YXRlOgorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
bV9jb250ZXh0OworfTsKKworc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywg
V2ViR0xDb250ZXh0QXR0cmlidXRlcyogYXR0cnMpCit7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gY2FudmFzLT5kb2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBU
aGUgRnJhbWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3JlYXRpb24gb2YgYSBuZXcgV2ViR0wg
Y29udGV4dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBpbgorICAgIC8vIHBhcnRpY3VsYXIs
IGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3IgbW9yZSB0aW1lcyB2aWEgdGhlIEdM
X0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS5jbGll
bnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpKSkgeworICAg
ICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxzZSwgdHJ1ZSwgIldl
YiBwYWdlIHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCBpc1BlbmRpbmdQb2xpY3lS
ZXNvbHV0aW9uID0gZmFsc2U7CisgICAgRG9jdW1lbnQmIHRvcERvY3VtZW50ID0gZG9jdW1lbnQu
dG9wRG9jdW1lbnQoKTsKKyAgICBQYWdlKiBwYWdlID0gdG9wRG9jdW1lbnQucGFnZSgpOworICAg
IGlmIChwYWdlICYmICF0b3BEb2N1bWVudC51cmwoKS5pc0xvY2FsRmlsZSgpKSB7CisgICAgICAg
IFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGll
bnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVudC51cmwoKSk7CisKKyAgICAgICAgaWYg
KHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExPRyhXZWJHTCwg
IlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJMICglcykgaXMgdG8gYmxvY2sgV2ViR0wuIiwgdG9wRG9j
dW1lbnQudXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMUGVuZGluZ0Ny
ZWF0aW9uKSB7CisgICAgICAgICAgICBMT0coV2ViR0wsICJXZWJHTCBwb2xpY3kgaXMgcGVuZGlu
Zy4gTWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQgbGF0ZXIuIik7CisgICAgICAgICAgICBpc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBhdHRycyA/IGF0dHJzLT5hdHRy
aWJ1dGVzKCkgOiBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0
dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIGlmICghZnJhbWUtPnNldHRpbmdzKCkub3Bl
bkdMTXVsdGlzYW1wbGluZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMuYW50aWFs
aWFzID0gZmFsc2U7CisgICAgfQorCisgICAgYXR0cmlidXRlcy5ub0V4dGVuc2lvbnMgPSB0cnVl
OworICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsKKyAgICBhdHRyaWJ1dGVz
LnByZWZlckRpc2NyZXRlR1BVID0gdHJ1ZTsKKworICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKS5m
b3JjZVNvZnR3YXJlV2ViR0xSZW5kZXJpbmcoKSkKKyAgICAgICAgYXR0cmlidXRlcy5mb3JjZVNv
ZnR3YXJlUmVuZGVyZXIgPSB0cnVlOworCisgICAgaWYgKHBhZ2UpCisgICAgICAgIGF0dHJpYnV0
ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICBp
ZiAoaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgeworICAgICAgICBMT0coV2ViR0wsICJDcmVh
dGUgYSBXZWJHTCBjb250ZXh0IHRoYXQgbG9va3MgcmVhbCwgYnV0IHdpbGwgcmVxdWlyZSBhIHBv
bGljeSByZXNvbHV0aW9uIGlmIHVzZWQuIik7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQobmV3IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dC0+c3Vz
cGVuZElmTmVlZGVkKCk7CisgICAgICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0OworICAgIH0K
KworICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVudC52aWV3KCktPnJvb3QoKS0+
aG9zdFdpbmRvdygpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKKworICAgIGlm
ICghY29udGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICAgICAg
Y2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2UsIHRydWUsICJDb3VsZCBu
b3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdldEV4dGVu
c2lvbnMoKTsKKyAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9kZWJ1Z19tYXJr
ZXIiKSkKKyAgICAgICAgZXh0ZW5zaW9ucy0+cHVzaEdyb3VwTWFya2VyRVhUKCJXZWJHTFJlbmRl
cmluZ0NvbnRleHQiKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ+IHJlbmRlcmluZ0NvbnRleHQobmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGNv
bnRleHQsIGF0dHJpYnV0ZXMpKTsKKyAgICByZW5kZXJpbmdDb250ZXh0LT5zdXNwZW5kSWZOZWVk
ZWQoKTsKKworICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0OworfQorCitXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2Vk
Q2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDog
Q2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3RpdmVET01PYmpl
Y3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dCgwKQorICAgICwg
bV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVy
KCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQp
CisgICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQorICAgICwgbV9yZXN0b3JlVGltZXIoKnRo
aXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpCisgICAgLCBt
X2dlbmVyYXRlZEltYWdlQ2FjaGUoMCkKKyAgICAsIG1fY29udGV4dExvc3QoZmFsc2UpCisgICAg
LCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkKKyAgICAsIG1fYXR0cmli
dXRlcyhhdHRyaWJ1dGVzKQorICAgICwgbV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSh0cnVl
KQorICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4R0xFcnJvcnNBbGxvd2Vk
VG9Db25zb2xlKQorICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKHRydWUpCisgICAg
LCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFsc2UpCit7Cit9CisKK1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBw
YXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCisgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQorICAgICwgQWN0aXZlRE9NT2JqZWN0KCZwYXNz
ZWRDYW52YXMtPmRvY3VtZW50KCkpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1f
ZHJhd2luZ0J1ZmZlcigwKQorICAgICwgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcigq
dGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KQor
ICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKKyAgICAsIG1fcmVzdG9yZVRpbWVyKCp0aGlz
LCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmVDb250ZXh0KQorICAgICwgbV9n
ZW5lcmF0ZWRJbWFnZUNhY2hlKDQpCisgICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQorICAgICwg
bV9jb250ZXh0TG9zdE1vZGUoU3ludGhldGljTG9zdENvbnRleHQpCisgICAgLCBtX2F0dHJpYnV0
ZXMoYXR0cmlidXRlcykKKyAgICAsIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUodHJ1ZSkK
KyAgICAsIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKG1heEdMRXJyb3JzQWxsb3dlZFRv
Q29uc29sZSkKKyAgICAsIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKKyAgICAs
IG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKK3sKKyAgICBBU1NFUlQobV9j
b250ZXh0KTsKKyAgICBtX2NvbnRleHRHcm91cCA9IFdlYkdMQ29udGV4dEdyb3VwOjpjcmVhdGUo
KTsKKyAgICBtX2NvbnRleHRHcm91cC0+YWRkQ29udGV4dCh0aGlzKTsKKworICAgIG1fbWF4Vmll
d3BvcnREaW1zWzBdID0gbV9tYXhWaWV3cG9ydERpbXNbMV0gPSAwOworICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVXUE9SVF9ESU1TLCBtX21heFZp
ZXdwb3J0RGltcyk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPmJpbmQoKTsKKworICAgIHNldHVwRmxhZ3MoKTsKKyAgICBpbml0aWFsaXplTmV3
Q29udGV4dCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5l
d0NvbnRleHQoKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0TG9zdCk7CisgICAgbV9uZWVkc1Vw
ZGF0ZSA9IHRydWU7CisgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOworICAgIG1fYWN0
aXZlVGV4dHVyZVVuaXQgPSAwOworICAgIG1fcGFja0FsaWdubWVudCA9IDQ7CisgICAgbV91bnBh
Y2tBbGlnbm1lbnQgPSA0OworICAgIG1fdW5wYWNrRmxpcFkgPSBmYWxzZTsKKyAgICBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKKyAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJz
aW9uID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJHTDsKKyAgICBtX2Jv
dW5kQXJyYXlCdWZmZXIgPSAwOworICAgIG1fY3VycmVudFByb2dyYW0gPSAwOworICAgIG1fZnJh
bWVidWZmZXJCaW5kaW5nID0gMDsKKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAwOworICAg
IG1fZGVwdGhNYXNrID0gdHJ1ZTsKKyAgICBtX3N0ZW5jaWxFbmFibGVkID0gZmFsc2U7CisgICAg
bV9zdGVuY2lsTWFzayA9IDB4RkZGRkZGRkY7CisgICAgbV9zdGVuY2lsTWFza0JhY2sgPSAweEZG
RkZGRkZGOworICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSAwOworICAgIG1fc3RlbmNpbEZ1bmNSZWZC
YWNrID0gMDsKKyAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IDB4RkZGRkZGRkY7CisgICAgbV9zdGVu
Y2lsRnVuY01hc2tCYWNrID0gMHhGRkZGRkZGRjsKKyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNl
OworICAgIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkID0gbWF4R0xFcnJvcnNBbGxvd2Vk
VG9Db25zb2xlOworICAgIAorICAgIG1fY2xlYXJDb2xvclswXSA9IG1fY2xlYXJDb2xvclsxXSA9
IG1fY2xlYXJDb2xvclsyXSA9IG1fY2xlYXJDb2xvclszXSA9IDA7CisgICAgbV9zY2lzc29yRW5h
YmxlZCA9IGZhbHNlOworICAgIG1fY2xlYXJEZXB0aCA9IDE7CisgICAgbV9jbGVhclN0ZW5jaWwg
PSAwOworICAgIG1fY29sb3JNYXNrWzBdID0gbV9jb2xvck1hc2tbMV0gPSBtX2NvbG9yTWFza1sy
XSA9IG1fY29sb3JNYXNrWzNdID0gdHJ1ZTsKKworICAgIEdDM0RpbnQgbnVtQ29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzKTsKKyAgICBtX3RleHR1cmVVbml0cy5jbGVhcigpOworICAgIG1fdGV4
dHVyZVVuaXRzLnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKworICAgIEdD
M0RpbnQgbnVtVmVydGV4QXR0cmlicyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmbnVtVmVydGV4QXR0cmlicyk7
CisgICAgbV9tYXhWZXJ0ZXhBdHRyaWJzID0gbnVtVmVydGV4QXR0cmliczsKKyAgICAKKyAgICBt
X21heFRleHR1cmVTaXplID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9t
YXhUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4VGV4
dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpOworICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVTaXpl
ID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
Q1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUpOworICAgIG1f
bWF4Q3ViZU1hcFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVsQ291bnQo
bV9tYXhDdWJlTWFwVGV4dHVyZVNpemUsIG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKKyAgICBt
X21heFJlbmRlcmJ1ZmZlclNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRSwgJm1fbWF4UmVuZGVyYnVmZmVy
U2l6ZSk7CisKKyAgICAvLyBUaGVzZSB0d28gdmFsdWVzIGZyb20gRVhUX2RyYXdfYnVmZmVycyBh
cmUgbGF6aWx5IHF1ZXJpZWQuCisgICAgbV9tYXhEcmF3QnVmZmVycyA9IDA7CisgICAgbV9tYXhD
b2xvckF0dGFjaG1lbnRzID0gMDsKKworICAgIG1fYmFja0RyYXdCdWZmZXIgPSBHcmFwaGljc0Nv
bnRleHQzRDo6QkFDSzsKKyAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2Vk
ID0gZmFsc2U7CisgICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZCA9IGZhbHNlOworCisgICAgbV9k
ZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpjcmVh
dGUodGhpcywgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmFvVHlwZURlZmF1bHQpOworICAg
IGFkZENvbnRleHRPYmplY3QobV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QuZ2V0KCkpOworICAg
IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0Owor
ICAgIAorICAgIG1fdmVydGV4QXR0cmliVmFsdWUucmVzaXplKG1fbWF4VmVydGV4QXR0cmlicyk7
CisKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNyZWF0ZUZhbGxiYWNr
QmxhY2tUZXh0dXJlczF4MSgpOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAg
ICBpbml0VmVydGV4QXR0cmliMCgpOworCisgICAgSW50U2l6ZSBjYW52YXNTaXplID0gY2xhbXBl
ZENhbnZhc1NpemUoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOworCisgICAgbV9jb250ZXh0LT5yZXNoYXBlKGNh
bnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7CisgICAgbV9jb250ZXh0LT52
aWV3cG9ydCgwLCAwLCBjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwor
ICAgIG1fY29udGV4dC0+c2Npc3NvcigwLCAwLCBjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1Np
emUuaGVpZ2h0KCkpOworCisgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKHN0
ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrPih0aGlzKSk7
CisgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhzdGQ6Om1ha2VfdW5pcXVl
PFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrPih0aGlzKSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZsYWdzKCkKK3sKKyAgICBBU1NFUlQo
bV9jb250ZXh0KTsKKworICAgIGlmIChQYWdlKiBwYWdlID0gY2FudmFzKCktPmRvY3VtZW50KCku
cGFnZSgpKQorICAgICAgICBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlID0gcGFnZS0+c2V0
dGluZ3MoKS53ZWJHTEVycm9yc1RvQ29uc29sZUVuYWJsZWQoKTsKKworICAgIG1faXNHTEVTMkNv
bXBsaWFudCA9IG1fY29udGV4dC0+aXNHTEVTMkNvbXBsaWFudCgpOworICAgIG1faXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3N0cmljdF9hdHRyaWJzIik7CisgICAgbV9pc1Jlc291
cmNlU2FmZSA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9N
SVVNX3Jlc291cmNlX3NhZmUiKTsKKyAgICBpZiAobV9pc0dMRVMyQ29tcGxpYW50KSB7CisgICAg
ICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlz
RW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfbnBvdCIpOworICAgICAgICBtX2lzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VT
X3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pc0dMRVMy
TlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9B
UkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxT
dXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRf
cGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyAgICB9CisgICAgbV9pc1JvYnVzdG5lc3NFWFRTdXBw
b3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcm9i
dXN0bmVzcyIpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWxsb3dQcml2aWxl
Z2VkRXh0ZW5zaW9ucygpIGNvbnN0Cit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMoKS0+
ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnByaXZp
bGVnZWRXZWJHTEV4dGVuc2lvbnNFbmFibGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0Mz
RGVudW0gZm9ybWF0KQoreworICAgIGlmICghbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29u
dGFpbnMoZm9ybWF0KSkKKyAgICAgICAgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuYXBwZW5k
KGZvcm1hdCk7Cit9CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6fldlYkdMUmVuZGVyaW5nQ29u
dGV4dCgpCit7CisgICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIFdlYkdMT2JqZWN0cyBz
byBpZiB0aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICAvLyB0aGV5IHdpbGwgYmUgZnJl
ZWQgYmVmb3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250ZXh0IGdy
b3VwLgorICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9kZWZhdWx0VmVy
dGV4QXJyYXlPYmplY3QgPSBudWxscHRyOworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9
IG51bGxwdHI7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1
cnJlbnRQcm9ncmFtID0gbnVsbHB0cjsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxw
dHI7CisgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgbV90
ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmluZGluZyA9IG51bGxwdHI7CisgICAgICAgIG1fdGV4
dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IG51bGxwdHI7CisgICAgfQorCisg
ICAgbV9ibGFja1RleHR1cmUyRCA9IG51bGxwdHI7CisgICAgbV9ibGFja1RleHR1cmVDdWJlTWFw
ID0gbnVsbHB0cjsKKworICAgIGlmICghbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Cisg
ICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKyAgICAgICAgZGVzdHJveUdyYXBo
aWNzQ29udGV4dDNEKCk7CisgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVDb250ZXh0KHRo
aXMpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlc3Ryb3lHcmFw
aGljc0NvbnRleHQzRCgpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGRyYXdpbmcgYnVmZmVyIGhvbGRzIGEgY29u
dGV4dCByZWZlcmVuY2UuIEl0IG11c3QgYWxzbyBiZSBkZXN0cm95ZWQKKyAgICAvLyBpbiBvcmRl
ciBmb3IgdGhlIGNvbnRleHQgdG8gYmUgcmVsZWFzZWQuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLmNsZWFyKCk7CisKKyAgICBpZiAobV9jb250ZXh0
KSB7CisgICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhudWxscHRyKTsK
KyAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhudWxscHRyKTsKKyAg
ICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFya0NvbnRleHRDaGFu
Z2VkKCk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsKKworICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7
CisgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CisgICAg
aWYgKGlzQWNjZWxlcmF0ZWQoKSAmJiByZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCkpIHsKKyAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7
CisgICAgICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7CisgICAgICAgIHJlbmRlckJv
eC0+Y29udGVudENoYW5nZWQoQ2FudmFzQ2hhbmdlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KSB7CisgICAgICAgICAgICBtX21hcmtlZENhbnZhc0Rp
cnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGNhbnZhcygpLT5kaWREcmF3KEZsb2F0UmVjdChGbG9h
dFBvaW50KDAsIDApLCBjbGFtcGVkQ2FudmFzU2l6ZSgpKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29tcG9zaXRlZChHQzNEYml0
ZmllbGQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkg
fHwgbV9sYXllckNsZWFyZWQKKyAgICAgICAgfHwgbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2lu
Z0J1ZmZlciB8fCAobWFzayAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBjb250ZXh0QXR0
cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICAvLyBEZXRlcm1pbmUgaWYg
aXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0aGUgdXNlciBhc2tlZCBmb3IgYW5k
IHRoaXMgY2xlYXIuCisgICAgYm9vbCBjb21iaW5lZENsZWFyID0gbWFzayAmJiAhbV9zY2lzc29y
RW5hYmxlZDsKKworICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKTsKKyAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9y
KG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9yWzBdIDogMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY29sb3JNYXNrWzFdID8gbV9jbGVhckNvbG9yWzFdIDogMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzJdID8gbV9jbGVhckNvbG9yWzJd
IDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzNdID8gbV9j
bGVhckNvbG9yWzNdIDogMCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29s
b3IoMCwgMCwgMCwgMCk7CisgICAgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1
ZSwgdHJ1ZSk7CisgICAgR0MzRGJpdGZpZWxkIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9CVUZGRVJfQklUOworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+ZGVwdGgoKSkg
eworICAgICAgICBpZiAoIWNvbWJpbmVkQ2xlYXIgfHwgIW1fZGVwdGhNYXNrIHx8ICEobWFzayAm
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUKSkKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJEZXB0aCgxLjBmKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOworICAgICAgICBtX2NvbnRleHQtPmRlcHRoTWFzayh0
cnVlKTsKKyAgICB9CisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzLT5zdGVuY2lsKCkpIHsKKyAg
ICAgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9CVUZGRVJfQklUKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1f
Y2xlYXJTdGVuY2lsICYgbV9zdGVuY2lsTWFzayk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKKyAgICAgICAgbV9jb250ZXh0LT5zdGVu
Y2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgMHhGRkZGRkZGRik7Cisg
ICAgfQorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
Y2xlYXJGcmFtZWJ1ZmZlcnMoY2xlYXJNYXNrKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgbV9jb250ZXh0
LT5jbGVhcihjbGVhck1hc2spOworICAgIH0KKworICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIo
KTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJv
KG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgbV9sYXllckNsZWFyZWQgPSB0cnVl
OworCisgICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZXN0b3JlU3RhdGVBZnRlckNsZWFyKCkKK3sKKyAgICAvLyBSZXN0b3JlIHRoZSBz
dGF0ZSB0aGF0IHRoZSBjb250ZXh0IHNldC4KKyAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkKKyAg
ICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7
CisgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY2xlYXJDb2xvclswXSwgbV9jbGVhckNvbG9y
WzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NsZWFyQ29sb3JbMl0sIG1fY2xlYXJD
b2xvclszXSk7CisgICAgbV9jb250ZXh0LT5jb2xvck1hc2sobV9jb2xvck1hc2tbMF0sIG1fY29s
b3JNYXNrWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzJdLCBtX2Nv
bG9yTWFza1szXSk7CisgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKG1fY2xlYXJEZXB0aCk7Cisg
ICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwpOworICAgIG1fY29udGV4
dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIG1fc3RlbmNp
bE1hc2spOworICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKG1fZGVwdGhNYXNrKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRl
eHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY2FudmFzKCktPmRv
Y3VtZW50KCkucHJpbnRpbmcoKSkKKyAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9u
Q29weSgpOworCisgICAgLy8gVW50aWwgdGhlIGNhbnZhcyBpcyB3cml0dGVuIHRvIGJ5IHRoZSBh
cHBsaWNhdGlvbiwgdGhlIGNsZWFyIHRoYXQKKyAgICAvLyBoYXBwZW5lZCBhZnRlciBpdCB3YXMg
Y29tcG9zaXRlZCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgY29tcG9zaXRvci4KKyAgICBpZiAo
bV9jb250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAmJiAhbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJh
d2luZ0J1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPnBhaW50Q29tcG9zaXRlZFJlc3VsdHNU
b0NhbnZhcyhjYW52YXMoKS0+YnVmZmVyKCkpOworCisgICAgICAgIGNhbnZhcygpLT5tYWtlUHJl
c2VudGF0aW9uQ29weSgpOworICAgIH0gZWxzZQorICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVz
ZW50YXRpb25Db3B5KCk7CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGlmICghbV9t
YXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7CisgICAgbV9tYXJrZWRDYW52YXNEaXJ0
eSA9IGZhbHNlOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5jb21taXQoKTsKKyAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSwgbV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKKworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
KQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Cisg
ICAgfQorfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2xlYXJJZkNvbXBv
c2l0ZWQoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmNvbW1pdCgpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IG1fY29udGV4
dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEobV9kcmF3aW5nQnVmZmVyLmdldCgp
KTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRp
bmcuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5i
aW5kKCk7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRo
aXMgaXMgYW4gYXBwcm94aW1hdGlvbiBiZWNhdXNlIGF0IFdlYkdMUmVuZGVyaW5nQ29udGV4dCBs
ZXZlbCB3ZSBkb24ndAorICAgIC8vIGtub3cgaWYgdGhlIHVuZGVybHlpbmcgRkJPIHVzZXMgdGV4
dHVyZXMgb3IgcmVuZGVyYnVmZmVycy4KKyAgICBHQzNEaW50IG1heFNpemUgPSBzdGQ6Om1pbiht
X21heFRleHR1cmVTaXplLCBtX21heFJlbmRlcmJ1ZmZlclNpemUpOworICAgIC8vIExpbWl0IGRy
YXdpbmcgYnVmZmVyIHNpemUgdG8gNGsgdG8gYXZvaWQgbWVtb3J5IGV4aGF1c3Rpb24uCisgICAg
Y29uc3QgaW50IHNpemVVcHBlckxpbWl0ID0gNDA5NjsKKyAgICBtYXhTaXplID0gc3RkOjptaW4o
bWF4U2l6ZSwgc2l6ZVVwcGVyTGltaXQpOworICAgIEdDM0RpbnQgbWF4V2lkdGggPSBzdGQ6Om1p
bihtYXhTaXplLCBtX21heFZpZXdwb3J0RGltc1swXSk7CisgICAgR0MzRGludCBtYXhIZWlnaHQg
PSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdwb3J0RGltc1sxXSk7CisgICAgd2lkdGggPSBj
bGFtcCh3aWR0aCwgMSwgbWF4V2lkdGgpOworICAgIGhlaWdodCA9IGNsYW1wKGhlaWdodCwgMSwg
bWF4SGVpZ2h0KTsKKworICAgIGlmIChtX25lZWRzVXBkYXRlKSB7CisgICAgICAgIFJlbmRlckJv
eCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOworICAgICAgICBpZiAocmVuZGVy
Qm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgICAgICAg
ICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKKyAgICAgICAgbV9u
ZWVkc1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFy
ayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3bHkgY3JlYXRlZCBpbWFnZSBidWZm
ZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgorICAgIC8vIGNsZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdo
YXQgcmVzaGFwZSB3aWxsIGRvKS4KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAg
IHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0
LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworCisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKG1fdGV4dHVyZVVuaXRz
W21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2Nv
bnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
b2JqZWN0T3JaZXJvKG1fcmVuZGVyYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKKyAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5k
aW5nLmdldCgpKSk7Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZm
ZXJXaWR0aCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisKKyAgICByZXR1cm4gbV9jb250
ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Cit9CisKK2ludCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdAoreworICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUo
KS5oZWlnaHQoKTsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkuaGVpZ2h0KCk7Cit9CisKK3Vuc2lnbmVkIGludCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihH
QzNEYnl0ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihHQzNEdWJ5dGUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RzaG9ydCk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2Yo
R0MzRHVzaG9ydCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgorICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdDM0RpbnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdWludCk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGZsb2F0KTsK
KyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXh0dXJl
IC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwID49IG1fdGV4dHVyZVVuaXRzLnNpemUoKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0dXJlIHVuaXQgb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmUgLSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7CisgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJl
KHRleHR1cmUpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5zZXRBY3RpdmVUZXh0dXJlVW5pdCh0ZXh0dXJlKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdM
U2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdCgiYXR0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImF0
dGFjaFNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXByb2dyYW0t
PmF0dGFjaFNoYWRlcihzaGFkZXIpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImF0dGFjaFNoYWRlciIsICJzaGFkZXIg
YXR0YWNobWVudCBhbHJlYWR5IGhhcyBzaGFkZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVj
dE9yWmVybyhzaGFkZXIpKTsKKyAgICBzaGFkZXItPm9uQXR0YWNoZWQoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgcHJv
Z3JhbSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgo
ImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2
YWxpZGF0ZVN0cmluZygiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQXR0cmli
TG9jYXRpb24iLCAicmVzZXJ2ZWQgcHJlZml4Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJpbmRBdHRyaWJMb2Nh
dGlvbiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIGlu
ZGV4LCBuYW1lKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrT2JqZWN0
VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCwg
Ym9vbCYgZGVsZXRlZCkKK3sKKyAgICBkZWxldGVkID0gZmFsc2U7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChvYmplY3Qp
IHsKKyAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
eworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qgbm90IGZyb20gdGhpcyBjb250ZXh0
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRl
ZCA9ICFvYmplY3QtPm9iamVjdCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJH
TEJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJi
aW5kQnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChk
ZWxldGVkKQorICAgICAgICBidWZmZXIgPSAwOworICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5n
ZXRUYXJnZXQoKSAmJiBidWZmZXItPmdldFRhcmdldCgpICE9IHRhcmdldCkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJi
aW5kQnVmZmVyIiwgImJ1ZmZlcnMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0
cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKKyAgICAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gYnVm
ZmVyOworICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9B
UlJBWV9CVUZGRVIpCisgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0RWxlbWVu
dEFycmF5QnVmZmVyKGJ1ZmZlcik7CisgICAgZWxzZSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kQnVmZmVyIiwgImludmFs
aWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPmJp
bmRCdWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVyKSk7CisgICAgaWYgKGJ1ZmZlcikK
KyAgICAgICAgYnVmZmVyLT5zZXRUYXJnZXQodGFyZ2V0KTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVi
dWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmlu
ZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChkZWxldGVkKQorICAgICAgICBidWZmZXIgPSAwOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kRnJhbWVidWZmZXIiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVyQmlu
ZGluZyA9IGJ1ZmZlcjsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZyhvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJh
d2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9mIGJpbmRpbmcgZmIgMCwgYmluZCB0
aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAg
IH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG9iamVj
dE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoYnVmZmVyKQorICAgICAgICBidWZmZXItPnNldEhh
c0V2ZXJCZWVuQm91bmQoKTsKKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2Vi
R0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVj
dFRvQmVCb3VuZCgiYmluZFJlbmRlcmJ1ZmZlciIsIHJlbmRlckJ1ZmZlciwgZGVsZXRlZCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgcmVuZGVyQnVmZmVyID0g
MDsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImJpbmRSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSByZW5kZXJCdWZmZXI7CisgICAg
bV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKHJlbmRlckJ1
ZmZlcikpOworICAgIGlmIChyZW5kZXJCdWZmZXIpCisgICAgICAgIHJlbmRlckJ1ZmZlci0+c2V0
SGFzRXZlckJlZW5Cb3VuZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymlu
ZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxldGVkOwor
ICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRUZXh0dXJlIiwgdGV4dHVyZSwgZGVs
ZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgdGV4dHVy
ZSA9IDA7CisgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgJiYgdGV4dHVy
ZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRUZXh0dXJlIiwgInRleHR1
cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBHQzNEaW50IG1heExldmVsID0gMDsKKyAgICBpZiAodGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7CisgICAgICAgIG1fdGV4dHVyZVVuaXRz
W21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcgPSB0ZXh0dXJlOworICAgICAg
ICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOworCisgICAgICAgIGlmIChtX2RyYXdpbmdC
dWZmZXIgJiYgIW1fYWN0aXZlVGV4dHVyZVVuaXQpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPnNldFRleHR1cmUyREJpbmRpbmcob2JqZWN0T3JaZXJvKHRleHR1cmUpKTsKKworICAgIH0g
ZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7
CisgICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJl
TWFwQmluZGluZyA9IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhDdWJlTWFwVGV4
dHVyZUxldmVsOworICAgIH0gZWxzZSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kVGV4dHVyZSIsICJpbnZhbGlkIHRhcmdl
dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
dGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkpOworICAgIGlmICh0ZXh0dXJlKQorICAgICAg
ICB0ZXh0dXJlLT5zZXRUYXJnZXQodGFyZ2V0LCBtYXhMZXZlbCk7CisKKyAgICAvLyBOb3RlOiBw
cmV2aW91c2x5IHdlIHVzZWQgdG8gYXV0b21hdGljYWxseSBzZXQgdGhlIFRFWFRVUkVfV1JBUF9S
CisgICAgLy8gcmVwZWF0IG1vZGUgdG8gQ0xBTVBfVE9fRURHRSBmb3IgY3ViZSBtYXAgdGV4dHVy
ZXMsIGJlY2F1c2UgT3BlbkdMCisgICAgLy8gRVMgMi4wIGRvZXNuJ3QgZXhwb3NlIHRoaXMgZmxh
ZyAoYSBidWcgaW4gdGhlIHNwZWNpZmljYXRpb24pIGFuZAorICAgIC8vIG90aGVyd2lzZSB0aGUg
YXBwbGljYXRpb24gaGFzIG5vIGNvbnRyb2wgb3ZlciB0aGUgc2VhbXMgaW4gdGhpcworICAgIC8v
IGRpbWVuc2lvbi4gSG93ZXZlciwgaXQgYXBwZWFycyB0aGF0IHN1cHBvcnRpbmcgdGhpcyBwcm9w
ZXJseSBvbiBhbGwKKyAgICAvLyBwbGF0Zm9ybXMgaXMgZmFpcmx5IGludm9sdmVkICh3aWxsIHJl
cXVpcmUgYSBIYXNoTWFwIGZyb20gdGV4dHVyZSBJRAorICAgIC8vIGluIGFsbCBwb3J0cyksIGFu
ZCB3ZSBoYXZlIG5vdCBoYWQgYW55IGNvbXBsYWludHMsIHNvIHRoZSBsb2dpYyBoYXMKKyAgICAv
LyBiZWVuIHJlbW92ZWQuCit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZENv
bG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0Rm
bG9hdCBhbHBoYSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb24oR0Mz
RGVudW0gbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBH
QzNEZW51bSBtb2RlQWxwaGEpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZVJHQikgfHwgIXZh
bGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGVBbHBoYSkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBt
b2RlQWxwaGEpOworfQorCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmMo
R0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5kRnVuYyIs
IHNmYWN0b3IsIGRmYWN0b3IpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVu
ZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0Mz
RGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAgIC8vIE5vdGU6IEFscGhh
IGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIFJHQi4KKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5k
RnVuYyIsIHNyY1JHQiwgZHN0UkdCKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+
YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgbG9uZyBsb25nIHNpemUsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZm
ZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2UpOworICAgIGlmICgh
YnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVy
RGF0YSIsICJzaXplIDwgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghc2l6
ZSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA9PSAwIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsK
KyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoc3RhdGljX2Nhc3Q8R0Mz
RHNpemVpcHRyPihzaXplKSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZl
ciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmJ1
ZmZlckRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpLCB1c2FnZSk7
CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsK
KyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZm
ZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgorICAgICAgICBi
dWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXIq
IGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1l
dGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2UpOworICAgIGlmICghYnVmZmVyKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJubyBkYXRh
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25P
dXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1
ZmZlckRhdGEoZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb250ZXh0
LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZl
ckRhdGEodGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmRhdGEoKSwgdXNhZ2UpOwor
ICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Cisg
ICAgICAgIC8vIFRoZSBidWZmZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVy
IGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVm
ZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmll
dyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJh
bWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CisgICAgaWYgKCFidWZmZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgIm5vIGRh
dGEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRl
QnVmZmVyRGF0YShkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVy
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NvbnRl
eHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVm
ZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSwg
dXNhZ2UpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpKSB7CisgICAgICAgIC8vIFRoZSBidWZmZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0
aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAg
ICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxv
bmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZm
ZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRhcmdldCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgPCAwIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAg
ICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSwgZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQg
b3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1f
Y29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9m
ZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0YSgpKTsKKyAgICBpZiAobV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUg
YnVmZmVyU3ViRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0
IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNz
b2NpYXRlQnVmZmVyRGF0YSgpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJh
eUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJz
KCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcp
OworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDAp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JH
ZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+
YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBk
YXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY29udGV4dC0+
bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJT
dWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0
ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyU3Vi
RGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhl
IGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVm
ZmVyRGF0YSgpOworICAgIH0KK30KKworR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgImludmFsaWQg
dGFyZ2V0Iik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fZnJhbWVidWZm
ZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7CisgICAgY29uc3Qg
Y2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIEdDM0RlbnVtIHJl
c3VsdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5jaGVja1N0YXR1cygmcmVhc29uKTsKKyAgICBp
ZiAocmVzdWx0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewor
ICAgICAgICBwcmludEdMV2FybmluZ1RvQ29uc29sZSgiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIs
IHJlYXNvbik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJlc3VsdCA9IG1f
Y29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQg
bWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKG1hc2sgJiB+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklU
IHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyIiwgImludmFsaWQgbWFzayIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1
ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJj
ZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY2xlYXIiLCByZWFzb24p
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghY2xlYXJJZkNvbXBvc2l0ZWQobWFz
aykpCisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIobWFzayk7CisgICAgbWFya0NvbnRleHRDaGFu
Z2VkKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckNvbG9yKEdDM0Rm
bG9hdCByLCBHQzNEZmxvYXQgZywgR0MzRGZsb2F0IGIsIEdDM0RmbG9hdCBhKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc3Rk
Ojppc25hbihyKSkKKyAgICAgICAgciA9IDA7CisgICAgaWYgKHN0ZDo6aXNuYW4oZykpCisgICAg
ICAgIGcgPSAwOworICAgIGlmIChzdGQ6OmlzbmFuKGIpKQorICAgICAgICBiID0gMDsKKyAgICBp
ZiAoc3RkOjppc25hbihhKSkKKyAgICAgICAgYSA9IDE7CisgICAgbV9jbGVhckNvbG9yWzBdID0g
cjsKKyAgICBtX2NsZWFyQ29sb3JbMV0gPSBnOworICAgIG1fY2xlYXJDb2xvclsyXSA9IGI7Cisg
ICAgbV9jbGVhckNvbG9yWzNdID0gYTsKKyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IociwgZywg
YiwgYSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckRlcHRoKEdDM0Rm
bG9hdCBkZXB0aCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jbGVhckRlcHRoID0gZGVwdGg7CisgICAgbV9jb250ZXh0LT5jbGVh
ckRlcHRoKGRlcHRoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyU3Rl
bmNpbChHQzNEaW50IHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fY2xlYXJTdGVuY2lsID0gczsKKyAgICBtX2NvbnRleHQtPmNs
ZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFz
ayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBH
QzNEYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9jb2xvck1hc2tbMF0gPSByZWQ7CisgICAgbV9jb2xvck1h
c2tbMV0gPSBncmVlbjsKKyAgICBtX2NvbG9yTWFza1syXSA9IGJsdWU7CisgICAgbV9jb2xvck1h
c2tbM10gPSBhbHBoYTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGVy
KFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiY29tcGlsZVNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIob2JqZWN0T3JaZXJvKHNoYWRlcikpOworICAgIEdD
M0RpbnQgdmFsdWU7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hh
ZGVyKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTLCAmdmFsdWUpOworICAgIHNo
YWRlci0+c2V0VmFsaWQodmFsdWUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2
ZWwoImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KGludGVybmFsZm9ybWF0
KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChib3JkZXIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVz
c2VkVGV4SW1hZ2UyRCIsICJib3JkZXIgbm90IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhJ
bWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YSgi
Y29tcHJlc3NlZFRleEltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZGF0
YSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAg
IGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgp
KSB7CisgICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVp
Z2h0KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBv
d2VyIG9mIDIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBt
X2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4
dC0+Y29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsCisgICAgICAgIGJvcmRlciwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5i
YXNlQWRkcmVzcygpKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgY29tcHJlc3NlZFRleEltYWdlMkQgZnVuY3Rp
b24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRh
IGZvciB0aGlzIGxldmVsLgorICAgICAgICB0ZXgtPm1hcmtJbnZhbGlkKHRhcmdldCwgbGV2ZWwp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKTsKKyAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVy
VmlldyogZGF0YSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleFN1
YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFs
aWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KGZvcm1hdCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEIiwgImludmFsaWQgZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YSgiY29tcHJlc3NlZFRleFN1YkltYWdl
MkQiLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRhdGEpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGZvcm1hdCAhPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwg
bGV2ZWwpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgImZvcm1hdCBkb2Vz
IG5vdCBtYXRjaCB0ZXh0dXJlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKCJjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdGV4KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3JhcGhpY3NDb250ZXh0
M0QoKS0+Y29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJl
c3MoKSk7CisgICAgdGV4LT5zZXRDb21wcmVzc2VkKCk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gZm9ybWF0KQoreworICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6Z2V0
Q2xlYXJCaXRzQnlGb3JtYXQoZm9ybWF0KSAmIChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVG
RkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0IGNhbiBub3QgYmUgc2V0LCBvbmx5IHJlbmRlcmVkIHRv
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
cikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJjb3B5VGV4SW1hZ2UyRCIsIE5v
dFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3Jt
YXQoImNvcHlUZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICByZXR1cm47Cisg
ICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4SW1h
Z2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50
ZXJuYWxmb3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJjb3B5VGV4SW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpICYm
IGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29w
eVRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxl
dGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVh
c29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2UyRCIsIHJlYXNvbik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICBpZiAo
aXNSZXNvdXJjZVNhZmUoKSkgeworICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJp
bmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsK
KyAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0
KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgR0MzRGludCBjbGlwcGVk
WCwgY2xpcHBlZFk7CisgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWln
aHQ7CisgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFt
ZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAm
Y2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgeworICAgICAgICAgICAg
bV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAgICBpZiAoY2xpcHBl
ZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgIG1fY29u
dGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgY2xpcHBlZFggLSB4LCBjbGlw
cGVkWSAtIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyKTsKKyAgICB9CisgICAgLy8gRklYTUU6IGlmIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3Qg
Y29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3VsZCBiZSBleGVjdXRlZC4KKyAgICB0ZXgt
PnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0
ZVRleEZ1bmNMZXZlbCgiY29weVRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGlu
ZygiY29weVRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFnZTJEIiwg
eG9mZnNldCwgeW9mZnNldCkgfHwgIXZhbGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB3
aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEJlZm9yZSBjaGVja2luZyBp
ZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCisg
ICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQgZGltZW5zaW9ucyIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwg
bGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVs
KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgInJlY3RhbmdsZSBvdXQgb2YgcmFuZ2UiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCA9IHRl
eC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CisgICAgaWYgKCF2YWxpZGF0ZVNl
dHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4U3ViSW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29t
YmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9y
bWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGlu
Y29tcGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBj
aGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3ND
b250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7
CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZl
ci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQt
PmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgs
IGNsaXBwZWRZOworICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0
OworICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVi
dWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNs
aXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7Cisg
ICAgICAgICAgICBHQzNEZW51bSB0eXBlID0gdGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpOwor
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVkIGNoYXJbXT4gemVybzsKKyAgICAg
ICAgICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgc2l6ZTsKKyAgICAgICAgICAgICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFj
a0FsaWdubWVudCwgJnNpemUsIDApOworICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoZXJyb3IsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQgZGltZW5zaW9ucyIpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHplcm8gPSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkIGNoYXJbXT4oc2l6ZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCF6ZXJvKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1Yklt
YWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBz
aXplKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHplcm8uZ2V0KCkpOworICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYg
Y2xpcHBlZEhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVy
QmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5n
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQgKyBjbGlwcGVkWCAtIHgsIHlvZmZzZXQgKyBjbGlwcGVkWSAt
IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcGVk
WCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVy
IGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgp
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG8gPSBXZWJHTEJ1
ZmZlcjo6Y3JlYXRlKHRoaXMpOworICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICBy
ZXR1cm4gbzsKK30KKworUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2ViR0xGcmFt
ZWJ1ZmZlcj4gbyA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRDb250
ZXh0T2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdM
VGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBvID0gV2ViR0xUZXh0dXJlOjpjcmVhdGUodGhpcyk7Cisg
ICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVm
UHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBvID0gV2ViR0xQcm9ncmFtOjpjcmVhdGUo
dGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQor
CitQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBv
ID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qo
by5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBR01FTlRfU0hBREVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjcmVhdGVTaGFkZXIiLCAiaW52YWxpZCBzaGFk
ZXIgdHlwZSIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8
V2ViR0xTaGFkZXI+IG8gPSBXZWJHTFNoYWRlcjo6Y3JlYXRlKHRoaXMsIHR5cGUpOworICAgIGFk
ZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y3Vs
bEZhY2UobW9kZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVPYmpl
Y3QoV2ViR0xPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICFvYmplY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW9iamVjdC0+
dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRlbGV0ZSIsICJvYmpl
Y3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmIChvYmplY3QtPm9iamVjdCgpKQorICAgICAgICAvLyBXZSBuZWVk
IHRvIHBhc3MgaW4gY29udGV4dCBoZXJlIGJlY2F1c2Ugd2Ugd2FudAorICAgICAgICAvLyB0aGlu
Z3MgaW4gdGhpcyBjb250ZXh0IHVuYm91bmQuCisgICAgICAgIG9iamVjdC0+ZGVsZXRlT2JqZWN0
KGdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCit7Cisg
ICAgaWYgKCFkZWxldGVPYmplY3QoYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICht
X2JvdW5kQXJyYXlCdWZmZXIgPT0gYnVmZmVyKQorICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIg
PSAwOworCisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT51bmJpbmRCdWZmZXIoYnVmZmVy
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKFdl
YkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQoreworICAgIGlmICghZGVsZXRlT2JqZWN0KGZy
YW1lYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX2Zy
YW1lYnVmZmVyQmluZGluZykgeworICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7Cisg
ICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOworICAgICAgICAgICAgLy8gSGF2ZSB0byBjYWxs
IGJpbmRGcmFtZWJ1ZmZlciBoZXJlIHRvIGJpbmQgYmFjayB0byBpbnRlcm5hbCBmYm8uCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIDApOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGRlbGV0ZU9iamVjdChwcm9n
cmFtKTsKKyAgICAvLyBXZSBkb24ndCByZXNldCBtX2N1cnJlbnRQcm9ncmFtIHRvIDAgaGVyZSBi
ZWNhdXNlIHRoZSBkZWxldGlvbiBvZiB0aGUKKyAgICAvLyBjdXJyZW50IHByb2dyYW0gaXMgZGVs
YXllZC4KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZl
cihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghZGVsZXRlT2Jq
ZWN0KHJlbmRlcmJ1ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVmZmVy
ID09IG1fcmVuZGVyYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5n
ID0gMDsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIocmVuZGVyYnVm
ZmVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVNoYWRlcihXZWJH
TFNoYWRlciogc2hhZGVyKQoreworICAgIGRlbGV0ZU9iamVjdChzaGFkZXIpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1
cmUpCit7CisgICAgaWYgKCFkZWxldGVPYmplY3QodGV4dHVyZSkpCisgICAgICAgIHJldHVybjsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmICh0ZXh0dXJlID09IG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRp
bmcpCisgICAgICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVs
bHB0cjsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1
YmVNYXBCaW5kaW5nKQorICAgICAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVN
YXBCaW5kaW5nID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
KQorICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudEZyb21Cb3Vu
ZEZyYW1lYnVmZmVyKHRleHR1cmUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZGVwdGhGdW5jKGZ1bmMpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZs
YWcpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fZGVwdGhNYXNrID0gZmxhZzsKKyAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhmbGFn
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoUmFuZ2UoR0MzRGZsb2F0
IHpOZWFyLCBHQzNEZmxvYXQgekZhcikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHpOZWFyID4gekZhcikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJk
ZXB0aFJhbmdlIiwgInpOZWFyID4gekZhciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNo
YWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImRldGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRh
Y2hTaGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFwcm9ncmFtLT5k
ZXRhY2hTaGFkZXIoc2hhZGVyKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRhY2hTaGFkZXIiLCAic2hhZGVyIG5v
dCBhdHRhY2hlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+ZGV0
YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwor
ICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRGVudW0gY2FwKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZGlzYWJsZSIs
IGNhcCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX1RFU1QpIHsKKyAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCA9IGZhbHNlOworICAg
ICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CisgICAgICAgIG1fc2Np
c3NvckVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxl
ZCk7CisgICAgfQorICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaW5kZXgg
Pj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5Iiwg
ImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3Rh
dGUuZW5hYmxlZCA9IGZhbHNlOworCisgICAgaWYgKGluZGV4ID4gMCB8fCBpc0dMRVMyQ29tcGxp
YW50KCkpCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRWxlbWVudEFycmF5
U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQor
eworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICAKKyAgICBpZiAo
IWVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG9m
ZnNldCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKKyAgICAgICAgLy8gRm9yIGFuIHVuc2lnbmVk
IGludCBhcnJheSwgb2Zmc2V0IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDQgZm9yIGFsaWdubWVudCBy
ZWFzb25zLgorICAgICAgICBpZiAob2Zmc2V0ICUgNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAg
IG9mZnNldCAvPSA0OworCisgICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVm
ZmVyLT5ieXRlTGVuZ3RoKCkgLyA0OworICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+
IG4gLSBvZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmICh0
eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCkgeworICAgICAgICAvLyBG
b3IgYW4gdW5zaWduZWQgc2hvcnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlzaWJsZSBieSAy
IGZvciBhbGlnbm1lbnQgcmVhc29ucy4KKyAgICAgICAgaWYgKG9mZnNldCAlIDIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQg
b2Zmc2V0LgorICAgICAgICBvZmZzZXQgLz0gMjsKKworICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9
IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gMjsKKyAgICAgICAgaWYgKG9mZnNl
dCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkg
eworICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpOworICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdD
M0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQoreworICAgIC8vIFBl
cmZvcm1zIGNvbnNlcnZhdGl2ZSB2YWxpZGF0aW9uIGJ5IGNhY2hpbmcgYSBtYXhpbXVtIGluZGV4
IG9mCisgICAgLy8gdGhlIGdpdmVuIHR5cGUgcGVyIGVsZW1lbnQgYXJyYXkgYnVmZmVyLiBJZiBh
bGwgb2YgdGhlIGJvdW5kCisgICAgLy8gYXJyYXkgYnVmZmVycyBoYXZlIGVub3VnaCBlbGVtZW50
cyB0byBzYXRpc2Z5IHRoYXQgbWF4aW11bQorICAgIC8vIGluZGV4LCBza2lwcyB0aGUgZXhwZW5z
aXZlIHBlci1kcmF3LWNhbGwgaXRlcmF0aW9uIGluCisgICAgLy8gdmFsaWRhdGVJbmRleEFycmF5
UHJlY2lzZS4KKyAgICAKKyAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZl
ciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisK
KyAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgR0MzRHNpemVpcHRyIG51bUVsZW1lbnRzID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVu
Z3RoKCk7CisgICAgLy8gVGhlIGNhc2UgY291bnQ9PTAgaXMgYWxyZWFkeSBkZWFsdCB3aXRoIGlu
IGRyYXdFbGVtZW50cyBiZWZvcmUgdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlLgorICAg
IGlmICghbnVtRWxlbWVudHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBBcnJh
eUJ1ZmZlciogYnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIo
KTsKKyAgICBBU1NFUlQoYnVmZmVyKTsKKworICAgIGludCBtYXhJbmRleCA9IGVsZW1lbnRBcnJh
eUJ1ZmZlci0+Z2V0Q2FjaGVkTWF4SW5kZXgodHlwZSk7CisgICAgaWYgKG1heEluZGV4IDwgMCkg
eworICAgICAgICAvLyBDb21wdXRlIHRoZSBtYXhpbXVtIGluZGV4IGluIHRoZSBlbnRpcmUgYnVm
ZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBpbmRleC4KKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6IHsKKyAgICAg
ICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+
KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBp
IDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4
KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
OiB7CisgICAgICAgICAgICBudW1FbGVtZW50cyAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAg
ICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9y
dCo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAw
OyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6
bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lO
VDogeworICAgICAgICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdD
M0R1aW50KTsKKyAgICAgICAgICAgIGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0MzRHVpbnQqPihidWZmZXItPmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXpl
aXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCisgICAgICAgICAgICAgICAgbWF4SW5k
ZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsZW1lbnRBcnJheUJ1ZmZlci0+c2V0Q2Fj
aGVkTWF4SW5kZXgodHlwZSwgbWF4SW5kZXgpOworICAgIH0KKworICAgIGlmIChtYXhJbmRleCA+
PSAwKSB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgcmVxdWlyZWQgZWxlbWVudHMgaXMgb25l
IG1vcmUgdGhhbiB0aGUgbWF4aW11bQorICAgICAgICAvLyBpbmRleCB0aGF0IHdpbGwgYmUgYWNj
ZXNzZWQuCisgICAgICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBtYXhJbmRleCArIDE7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgdW5zaWduZWQmIG51bUVs
ZW1lbnRzUmVxdWlyZWQpCit7CisgICAgQVNTRVJUKGNvdW50ID49IDAgJiYgb2Zmc2V0ID49IDAp
OworICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IDA7CisgICAgCisgICAgUmVmUHRyPFdlYkdMQnVm
ZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghY291bnQpIHsKKyAgICAgICAgbnVtRWxlbWVu
dHNSZXF1aXJlZCA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICgh
ZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdW5zaWduZWQgbG9uZyB1b2Zmc2V0ID0gb2Zmc2V0OworICAgIHVuc2ln
bmVkIGxvbmcgbiA9IGNvdW50OworCisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0lOVCkgeworICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZz
ZXQuCisgICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgY29uc3Qg
R0MzRHVpbnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGVsZW1lbnRBcnJheUJ1
ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0OworICAgICAgICB3
aGlsZSAobi0tID4gMCkgeworICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4KQorICAgICAg
ICAgICAgICAgIGxhc3RJbmRleCA9ICpwOworICAgICAgICAgICAgKytwOworICAgICAgICB9Cisg
ICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCkg
eworICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIHVv
ZmZzZXQgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBw
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxl
bWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0OworICAgICAgICB3aGlsZSAobi0t
ID4gMCkgeworICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4KQorICAgICAgICAgICAgICAg
IGxhc3RJbmRleCA9ICpwOworICAgICAgICAgICAgKytwOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAg
IGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGVsZW1l
bnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0Owor
ICAgICAgICB3aGlsZSAobi0tID4gMCkgeworICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4
KQorICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOworICAgICAgICAgICAgKytwOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gVGhlbiBzZXQgdGhlIGxhc3QgaW5kZXggaW4gdGhlIGlu
ZGV4IGFycmF5IGFuZCBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCisgICAgbnVtRWxlbWVudHNSZXF1
aXJlZCA9IGxhc3RJbmRleCArIDE7CisgICAgcmV0dXJuIG51bUVsZW1lbnRzUmVxdWlyZWQgPiAw
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1
dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwgdW5zaWduZWQgcHJpbWl0aXZlQ291bnQpCit7Cisg
ICAgaWYgKCFtX2N1cnJlbnRQcm9ncmFtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBMb29rIGluIGVhY2ggZW5hYmxlZCB2ZXJ0ZXggYXR0cmliIGFuZCBjaGVjayBpZiB0aGV5J3Zl
IGJlZW4gYm91bmQgdG8gYSBidWZmZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bWF4VmVydGV4QXR0cmliczsgKytpKSB7CisgICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpKS52YWxpZGF0ZUJpbmRpbmcoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZWxlbWVudENvdW50IDw9IDAp
CisgICAgICAgIHJldHVybiB0cnVlOworCisKKyAgICAvLyBMb29rIGluIGVhY2ggY29uc3VtZWQg
dmVydGV4IGF0dHJpYiAoYnkgdGhlIGN1cnJlbnQgcHJvZ3JhbSkuCisgICAgYm9vbCBzYXdOb25J
bnN0YW5jZWRBdHRyaWIgPSBmYWxzZTsKKyAgICBib29sIHNhd0VuYWJsZWRBdHRyaWIgPSBmYWxz
ZTsKKyAgICBpbnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zID0gbV9jdXJyZW50UHJvZ3JhbS0+
bnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1B
Y3RpdmVBdHRyaWJMb2NhdGlvbnM7ICsraSkgeworICAgICAgICBpbnQgbG9jID0gbV9jdXJyZW50
UHJvZ3JhbS0+Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24oaSk7CisgICAgICAgIGlmIChsb2MgPj0g
MCAmJiBsb2MgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fbWF4VmVydGV4QXR0cmlicykpIHsKKyAgICAg
ICAgICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRl
JiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUo
bG9jKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkKSB7CisgICAgICAgICAgICAgICAg
c2F3RW5hYmxlZEF0dHJpYiA9IHRydWU7CisgICAgICAgICAgICAgICAgLy8gQXZvaWQgb2ZmLWJ5
LW9uZSBlcnJvcnMgaW4gbnVtRWxlbWVudHMgY29tcHV0YXRpb24uCisgICAgICAgICAgICAgICAg
Ly8gRm9yIHRoZSBsYXN0IGVsZW1lbnQsIHdlIHdpbGwgb25seSB0b3VjaCB0aGUgZGF0YSBmb3Ig
dGhlCisgICAgICAgICAgICAgICAgLy8gZWxlbWVudCBhbmQgbm90aGluZyBiZXlvbmQgaXQuCisg
ICAgICAgICAgICAgICAgaW50IGJ5dGVzUmVtYWluaW5nID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0
ZS5idWZmZXJCaW5kaW5nLT5ieXRlTGVuZ3RoKCkgLSBzdGF0ZS5vZmZzZXQpOworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c3RhdGUuc3RyaWRlID4gMCk7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVzUmVtYWluaW5nID49
IHN0YXRlLmJ5dGVzUGVyRWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgbnVtRWxlbWVudHMg
PSAxICsgKGJ5dGVzUmVtYWluaW5nIC0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KSAvIHN0YXRlLnN0
cmlkZTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmRpdmlzb3IpCisgICAgICAgICAgICAg
ICAgICAgIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYg
KCghc3RhdGUuZGl2aXNvciAmJiBlbGVtZW50Q291bnQgPiBudW1FbGVtZW50cykgfHwgKHN0YXRl
LmRpdmlzb3IgJiYgcHJpbWl0aXZlQ291bnQgPiBudW1FbGVtZW50cykpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghc2F3Tm9uSW5zdGFuY2VkQXR0cmliICYmIHNhd0VuYWJsZWRBdHRyaWIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIFdlYkdMT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC0+
b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIG9iamVjdCBvciBvYmplY3QgZGVsZXRl
ZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghb2JqZWN0LT52YWxp
ZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmpl
Y3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNv
dW50KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJh
d01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoZmlyc3QgPCAwIHx8IGNvdW50IDwgMCkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiZmlyc3Qgb3IgY291bnQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoIWNvdW50KSB7CisgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHByaW1jb3VudCA8IDApIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
cygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRl
CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChm
aXJzdCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRD
b3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNo
ZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2VkQ291bnQ7CisgICAgICAgIENoZWNrZWQ8
R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQcmltQ291bnQocHJpbWNvdW50KTsKKyAg
ICAgICAgaWYgKGNoZWNrZWRTdW0uaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltQ291bnQu
aGFzT3ZlcmZsb3dlZCgpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51
bnNhZmVHZXQoKSwgY2hlY2tlZFByaW1Db3VudC51bnNhZmVHZXQoKSkpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmICghdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgY2hhciogcmVhc29uID0g
ImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAm
JiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFp
c1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyhHQzNE
ZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0Fy
cmF5cygiZHJhd0FycmF5cyIsIG1vZGUsIGZpcnN0LCBjb3VudCwgMCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisKKyAgICBib29sIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAg
dmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNv
dW50IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1Rl
eHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCB0cnVlKTsKKyAgICBtX2NvbnRleHQtPmRy
YXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
KyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOwor
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQs
IHVuc2lnbmVkJiBudW1FbGVtZW50cykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25O
YW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICBpZiAobV9vZXNFbGVtZW50SW5k
ZXhVaW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlw
ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoY291bnQgPCAwIHx8IG9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImNvdW50IG9y
IG9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgh
Y291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxl
bWVudEFycmF5QnVmZmVyKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyBFTEVNRU5UX0FS
UkFZX0JVRkZFUiBib3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAgICAg
Ly8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRw
dHI+KG9mZnNldCkpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInJlcXVlc3Qgb3V0IG9m
IGJvdW5kcyBmb3IgY3VycmVudCBFTEVNRU5UX0FSUkFZX0JVRkZFUiIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghY291bnQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0
aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKG51bUVs
ZW1lbnRzKSkgeworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNv
dW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cykg
fHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cykpIHsKKyAgICAgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlz
Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMo
MCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVj
dGx5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3Mo
Z3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNE
ZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworCisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgIGlm
ICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50cyIsIG1vZGUsIGNvdW50LCB0eXBl
LCBvZmZzZXQsIG51bUVsZW1lbnRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJJZkNv
bXBvc2l0ZWQoKTsKKworICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwor
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMp
CisgICAgICAgICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRl
eEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwor
ICAgIH0KKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVy
ZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzIiwgdHJ1ZSk7CisgICAgbV9jb250ZXh0LT5kcmF3
RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNl
dCkpOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0
ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7
CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21w
bGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIGZhbHNlKTsKKyAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZW51bSBjYXAp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmls
aXR5KCJlbmFibGUiLCBjYXApKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNhcCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7CisgICAgICAgIG1fc3RlbmNpbEVuYWJsZWQg
PSB0cnVlOworICAgICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7Cisg
ICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3Nj
aXNzb3JFbmFibGVkKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1
aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUg
PSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsK
KyAgICBzdGF0ZS5lbmFibGVkID0gdHJ1ZTsKKworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmlu
aXNoKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgbV9jb250ZXh0LT5maW5pc2goKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZsdXNoKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVu
ZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFt
ZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsIHRhcmdldCwg
YXR0YWNobWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVmZmVydGFyZ2V0
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gYnVmZmVyIG9yIGJ1ZmZl
ciBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAv
LyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBhbGwg
Y3VycmVudAorICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkgaW4g
cGxhY2Ugb2YgdGhlIGRlZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXJPYmplY3QgPSBvYmpl
Y3RPclplcm8oYnVmZmVyKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOworICAg
ICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJP
YmplY3QpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVy
dGFyZ2V0LCBidWZmZXJPYmplY3QpOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+
c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgYnVmZmVyKTsKKyAg
ICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpm
cmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQzNEaW50IGxldmVs
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1l
dGVycygiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGxldmVsKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAi
bGV2ZWwgbm90IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGV4dHVyZSAm
JiAhdGV4dHVyZS0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZy
YW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIHRleHR1cmUgb3IgdGV4dHVyZSBub3QgZnJvbSB0aGlz
IGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBEb24ndCBhbGxvdyB0
aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBhbGwgY3VycmVudAorICAgIC8v
IGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRl
ZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVy
ZTJEIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlT2JqZWN0ID0gb2JqZWN0T3JaZXJvKHRleHR1cmUp
OworICAgIHN3aXRjaCAoYXR0YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZl
clRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCB0
ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFD
SE1FTlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFy
Z2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVy
ZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFy
Z2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgfQorICAgIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50LCB0ZXh0YXJn
ZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250
ZXh0LT5mcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFs
aWRhdGVUZXh0dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAiLCB0YXJnZXQsIGZhbHNlKTsKKyAg
ICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdGV4LT5jYW5HZW5lcmF0ZU1p
cG1hcHMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJsZXZlbCAwIG5vdCBwb3dlciBv
ZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIz
OTE2LiBDb21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBhbGxvd2VkIGluIFdlYkdMIDI6Cisg
ICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAi
dHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21wcmVzc2VkIHRleHR1cmUiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQo
ImdlbmVyYXRlTWlwbWFwIiwgdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIDApKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gZ2VuZXJhdGVNaXBtYXAgd29uJ3Qgd29yayBwcm9wZXJs
eSBpZiBtaW5GaWx0ZXIgaXMgbm90IE5FQVJFU1RfTUlQTUFQX0xJTkVBUgorICAgIC8vIG9uIE1h
Yy4gIFJlbW92ZSB0aGUgaGFjayBvbmNlIHRoaXMgZHJpdmVyIGJ1ZyBpcyBmaXhlZC4KKyNpZiBP
UyhEQVJXSU4pCisgICAgYm9vbCBuZWVkVG9SZXNldE1pbkZpbHRlciA9IGZhbHNlOworICAgIGlm
ICh0ZXgtPmdldE1pbkZpbHRlcigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1B
UF9MSU5FQVIpIHsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5F
QVJFU1RfTUlQTUFQX0xJTkVBUik7CisgICAgICAgIG5lZWRUb1Jlc2V0TWluRmlsdGVyID0gdHJ1
ZTsKKyAgICB9CisjZW5kaWYKKyAgICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7
CisjaWYgT1MoREFSV0lOKQorICAgIGlmIChuZWVkVG9SZXNldE1pbkZpbHRlcikKKyAgICAgICAg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUlOX0ZJTFRFUiwgdGV4LT5nZXRNaW5GaWx0ZXIoKSk7CisjZW5kaWYKKyAgICB0ZXgtPmdl
bmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZv
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImdldEFjdGl2ZUF0dHJpYiIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBBY3RpdmVJbmZvIGluZm87CisgICAgaWYgKCFtX2NvbnRleHQtPmdldEFj
dGl2ZUF0dHJpYihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZlIGF0dHJp
YnV0ZSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0
dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNp
emUpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QWN0
aXZlVW5pZm9ybSIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBY3RpdmVJbmZv
IGluZm87CisgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICBpZiAoaW5mby5zaXplID4gMSAmJiAhaW5m
by5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKKyAgICAgICAgICAgIGluZm8ubmFtZS5hcHBlbmQoIlsw
XSIpOworCisgICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSB1bmlmb3JtICVkOiAlcyIs
IGluZGV4LCBpbmZvLm5hbWUudXRmOCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gV2ViR0xBY3Rp
dmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4mIHNoYWRlck9iamVjdHMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgc2hhZGVyT2Jq
ZWN0cy5jbGVhcigpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldEF0dGFjaGVkU2hhZGVycyIsIHByb2dyYW0pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBHQzNEZW51bSBzaGFkZXJUeXBlW10gPSB7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSLAorICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBR01FTlRfU0hBREVSCisgICAgfTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZW9mKHNoYWRlclR5cGUpIC8gc2l6ZW9mKEdDM0RlbnVtKTsgKytpKSB7CisgICAg
ICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihzaGFk
ZXJUeXBlW2ldKTsKKyAgICAgICAgaWYgKHNoYWRlcikKKyAgICAgICAgICAgIHNoYWRlck9iamVj
dHMuYXBwZW5kKHNoYWRlcik7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitHQzNEaW50
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0cmliTG9jYXRpb24iLCBwcm9n
cmFtKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0
aCgiZ2V0QXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlm
ICghdmFsaWRhdGVTdHJpbmcoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybiAtMTsKKyAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEF0
dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOworICAgICAgICByZXR1cm4gLTE7
CisgICAgfQorICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgbmFtZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIgJiYgdGFy
Z2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKKyAgICB9CisKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkJVRkZFUl9TSVpFICYmIHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfVVNBR0Up
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisKKyAgICBHQzNEaW50IHZhbHVl
ID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUs
ICZ2YWx1ZSk7CisgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0la
RSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Cit9CisKK1Bhc3NSZWZQ
dHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRDb250
ZXh0QXR0cmlidXRlcygpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gV2UgYWx3YXlzIG5lZWQgdG8gcmV0dXJuIGEg
bmV3IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgb2JqZWN0IHRvCisgICAgLy8gcHJldmVudCB0aGUg
dXNlciBmcm9tIG11dGF0aW5nIGFueSBjYWNoZWQgdmVyc2lvbi4KKworICAgIC8vIEFsc28sIHdl
IG5lZWQgdG8gZW5mb3JjZSByZXF1ZXN0ZWQgdmFsdWVzIG9mICJmYWxzZSIgZm9yIGRlcHRoCisg
ICAgLy8gYW5kIHN0ZW5jaWwsIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHVu
ZGVybHlpbmcKKyAgICAvLyBHcmFwaGljc0NvbnRleHQzRCBvciBEcmF3aW5nQnVmZmVyLgorICAg
IFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVzID0gV2ViR0xDb250ZXh0
QXR0cmlidXRlczo6Y3JlYXRlKG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSk7Cisg
ICAgaWYgKCFtX2F0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgIGF0dHJpYnV0ZXMtPnNldERlcHRo
KGZhbHNlKTsKKyAgICBpZiAoIW1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICBhdHRyaWJ1
dGVzLT5zZXRTdGVuY2lsKGZhbHNlKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAg
ICAgIC8vIFRoZSBEcmF3aW5nQnVmZmVyIG9idGFpbnMgaXRzIHBhcmFtZXRlcnMgZnJvbSBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSwKKyAgICAgICAgLy8gYnV0IGl0
IG1ha2VzIGl0cyBvd24gZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIG11bHRpc2FtcGxpbmcgaXMg
c3VwcG9ydGVkLgorICAgICAgICBhdHRyaWJ1dGVzLT5zZXRBbnRpYWxpYXMobV9kcmF3aW5nQnVm
ZmVyLT5tdWx0aXNhbXBsZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGF0dHJpYnV0ZXMucmVsZWFz
ZSgpOworfQorCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEVycm9yKCkKK3sK
KyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworICAgIHJldHVybiBtX2NvbnRleHQtPmdldEVycm9y
KCk7Cit9CisKK1dlYkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVu
c2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKQorICAgICAgICAmJiAobV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikg
fHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3Rl
eHR1cmVfbG9kIikpKSB7CisgICAgICAgIGlmICghbV9leHRTaGFkZXJUZXh0dXJlTE9EKSB7Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xf
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOworICAgICAgICAgICAgbV9leHRTaGFkZXJUZXh0dXJl
TE9EID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRTaGFkZXJUZXh0dXJlTE9EPih0aGlzKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbV9leHRTaGFkZXJUZXh0dXJlTE9ELmdldCgpOworICAgIH0K
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9FWFRfdGV4dHVyZV9maWx0
ZXJfYW5pc290cm9waWMiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKSB7CisgICAgICAg
IGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfdGV4dHVyZV9maWx0
ZXJfYW5pc290cm9waWMiKTsKKyAgICAgICAgICAgIG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM+KHRoaXMp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpKSB7CisgICAgICAgIGlm
ICghbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
Iik7CisgICAgICAgICAgICBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfZmxvYXQiKQorICAgICAgICAmJiBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0Iikp
IHsKKyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdCkgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0
Iik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VT
VGV4dHVyZUZsb2F0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNUZXh0
dXJlRmxvYXQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
T0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkgeworICAg
ICAgICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0TGluZWFyKSB7CisgICAgICAgICAgICBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfZmxvYXRf
bGluZWFyIik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdExpbmVhciA9IHN0ZDo6bWFr
ZV91bmlxdWU8T0VTVGV4dHVyZUZsb2F0TGluZWFyPih0aGlzKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIuZ2V0KCk7CisgICAgfQorICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpCisgICAgICAg
ICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVf
aGFsZl9mbG9hdCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlSGFsZkZsb2F0KSB7Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xf
T0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlSGFsZkZs
b2F0ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNUZXh0dXJlSGFsZkZsb2F0Pih0aGlzKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0LmdldCgpOworICAgIH0K
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRf
bGluZWFyIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKSB7CisgICAgICAgIGlmICghbV9v
ZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhciA9IHN0ZDo6bWFr
ZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhci5nZXQoKTsKKyAgICB9Cisg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdmVydGV4X2FycmF5X29iamVjdCIp
CisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VT
X3ZlcnRleF9hcnJheV9vYmplY3QiKSkgeworICAgICAgICBpZiAoIW1fb2VzVmVydGV4QXJyYXlP
YmplY3QpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVF
bmFibGVkKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpOworICAgICAgICAgICAgbV9vZXNW
ZXJ0ZXhBcnJheU9iamVjdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVmVydGV4QXJyYXlPYmplY3Q+
KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29lc1ZlcnRleEFycmF5T2JqZWN0
LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU19lbGVt
ZW50X2luZGV4X3VpbnQiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkgeworICAgICAgICBpZiAoIW1f
b2VzRWxlbWVudEluZGV4VWludCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKTsKKyAgICAg
ICAgICAgIG1fb2VzRWxlbWVudEluZGV4VWludCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTRWxlbWVu
dEluZGV4VWludD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzRWxlbWVu
dEluZGV4VWludC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJHTF9sb3NlX2NvbnRleHQiKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xMb3NlQ29udGV4
dCkKKyAgICAgICAgICAgIG1fd2ViZ2xMb3NlQ29udGV4dCA9IHN0ZDo6bWFrZV91bmlxdWU8V2Vi
R0xMb3NlQ29udGV4dD4odGhpcyk7CisgICAgICAgIHJldHVybiBtX3dlYmdsTG9zZUNvbnRleHQu
Z2V0KCk7CisgICAgfQorICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9X
RUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21w
cmVzc2VkVGV4dHVyZUFUQykKKyAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFU
QyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQz4odGhpcyk7Cisg
ICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMuZ2V0KCk7CisgICAgfQor
ICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9XRUJHTF9jb21wcmVzc2Vk
X3RleHR1cmVfcHZydGMiKSkKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRD
OjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1
cmVQVlJUQykKKyAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDID0gc3Rk
OjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM+KHRoaXMpOworICAgICAg
ICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMuZ2V0KCk7CisgICAgfQorICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3Mz
dGMiKQorICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKHRo
aXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQykKKyAgICAg
ICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fd2ViZ2xD
b21wcmVzc2VkVGV4dHVyZVMzVEMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiV0VCR0xfZGVwdGhfdGV4dHVyZSIpCisgICAgICAgICYmIFdlYkdMRGVwdGhU
ZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpIHsKKyAgICAgICAgaWYgKCFt
X3dlYmdsRGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fZGVwdGhfdGV4dHVyZSIpOworICAgICAg
ICAgICAgbV93ZWJnbERlcHRoVGV4dHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZXB0aFRl
eHR1cmU+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRGVwdGhUZXh0
dXJlLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdM
X2RyYXdfYnVmZmVycyIpICYmIHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkgeworICAgICAgICBpZiAo
IW1fd2ViZ2xEcmF3QnVmZmVycykgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgICAg
IG1fd2ViZ2xEcmF3QnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEcmF3QnVmZmVycz4o
dGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fd2ViZ2xEcmF3QnVmZmVycy5nZXQo
KTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJBTkdMRV9pbnN0YW5j
ZWRfYXJyYXlzIikgJiYgQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkgewor
ICAgICAgICBpZiAoIW1fYW5nbGVJbnN0YW5jZWRBcnJheXMpIHsKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9pbnN0YW5jZWRf
YXJyYXlzIik7CisgICAgICAgICAgICBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzID0gc3RkOjptYWtl
X3VuaXF1ZTxBTkdMRUluc3RhbmNlZEFycmF5cz4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG1fYW5nbGVJbnN0YW5jZWRBcnJheXMuZ2V0KCk7CisgICAgfQorICAgIGlmIChhbGxv
d1ByaXZpbGVnZWRFeHRlbnNpb25zKCkpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIikpIHsKKyAgICAgICAgICAgIGlmICgh
bV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1Jl
bmRlcmVySW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbz4odGhp
cyk7CisgICAgICAgICAgICByZXR1cm4gbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvLmdldCgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVi
dWdfc2hhZGVycyIpCisgICAgICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpKSB7CisgICAgICAg
ICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1NoYWRlcnMpCisgICAgICAgICAgICAgICAgbV93ZWJnbERl
YnVnU2hhZGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1Z1NoYWRlcnM+KHRoaXMpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMuZ2V0KCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5n
IHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisKKyAgICBXZWJHTFNoYXJlZE9iamVj
dCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEF0dGFjaG1lbnRPYmplY3QoYXR0
YWNobWVudCk7CisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKHBuYW1lID09IEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKQorICAgICAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7CisgICAg
ICAgIC8vIE9wZW5HTCBFUyAyLjAgc3BlY2lmaWVzIElOVkFMSURfRU5VTSBpbiB0aGlzIGNhc2Us
IHdoaWxlIGRlc2t0b3AgR0wKKyAgICAgICAgLy8gc3BlY2lmaWVzIElOVkFMSURfT1BFUkFUSU9O
LgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKworICAg
IEFTU0VSVChvYmplY3QtPmlzVGV4dHVyZSgpIHx8IG9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSk7
CisgICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkpIHsKKyAgICAgICAgc3dpdGNoIChwbmFtZSkg
eworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihyZWludGVycHJldF9jYXN0PFdlYkdMVGV4
dHVyZSo+KG9iamVjdCkpKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICAgICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIpOworICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChw
bmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4ocmVpbnRlcnBy
ZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCkpKTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgIH0KK30KKworV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBj
b25zdCBpbnQgaW50WmVybyA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFDVElWRV9URVhUVVJFOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFT
RURfTElORV9XSURUSF9SQU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9QT0lO
VF9TSVpFX1JBTkdFOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVy
KHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQV9CSVRTOgorICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMQnVmZmVyPihtX2JvdW5kQXJyYXlCdWZmZXIpKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORDoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgorICAg
ICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfQUxQSEE6CisgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkRfRFNUX1JHQjoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9BTFBIQToK
KyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9SR0I6CisgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkRfU1JDX0FMUEhBOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19SR0I6Cisg
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QkxVRV9CSVRTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxV
RToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLOgorICAgICAgICByZXR1
cm4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhVaW50MzJBcnJheTo6Y3JlYXRlKG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmRh
dGEoKSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6ZSgpKSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFX01PREU6
CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNOgorICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPihtX2N1cnJlbnRQcm9ncmFtKSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQklUUzoKKyAgICAgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFMVUU6
CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfRlVOQzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5H
RToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKKyAgICAgICAgcmV0dXJuIGdl
dEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKKyAgICAgICAgcmV0dXJuIGdl
dEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
UGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJH
TEZyYW1lYnVmZmVyPihtX2ZyYW1lYnVmZmVyQmluZGluZykpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZST05UX0ZBQ0U6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQ
X0hJTlQ6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFRU5fQklUUzoKKyAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9X
SURUSDoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFOgor
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRV
UkVfU0laRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUzoKKyAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgorICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVklFV1BPUlRfRElNUzoKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5VTV9TSEFERVJfQklOQVJZ
X0ZPUk1BVFM6CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgYWx3YXlzIHJldHVybiAwIGZv
ciB0aGlzPworICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9P
RkZTRVRfRkFDVE9SOgorICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZJTEw6CisgICAgICAg
IHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpQT0xZR09OX09GRlNFVF9VTklUUzoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfQklUUzoKKyAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4obV9yZW5kZXJidWZmZXJCaW5kaW5nKSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVI6CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oU3RyaW5nKCJXZWJLaXQgV2ViR0wiKSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFX0JVRkZFUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9DT1ZFUkFHRV9JTlZF
UlQ6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfVkFMVUU6CisgICAgICAgIHJldHVy
biBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6CisgICAgICAgIHJldHVybiBnZXRXZWJH
TEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldlYkdMIEdMU0wgRVMgMS4wICgiICsgbV9jb250
ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURJTkdfTEFOR1VBR0VfVkVSU0lP
TikgKyAiKSIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GQUlM
OgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GVU5DOgorICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6CisgICAgICAgIHJldHVybiBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JB
Q0tfUkVGOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoKKyAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQklUUzoKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1
dGVzLnN0ZW5jaWwpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGludFplcm8pOwor
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0ZBSUw6
CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GVU5DOgorICAgICAgICByZXR1cm4gZ2V0VW5z
aWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFTU19E
RVBUSF9QQVNTOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUkVGOgorICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1ZBTFVFX01BU0s6CisgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0s6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25l
ZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1VCUElY
RUxfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HXzJEOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3RleHR1cmVVbml0c1ttX2Fj
dGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgorICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRl
eHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9ZX1dFQkdM
OgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrRmxpcFkpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6
CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lv
bik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IikpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlNJT046CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldlYkdMIDEuMCAoIiAr
IG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OKSArICIpIik7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6CisgICAgICAgIHJldHVybiBn
ZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcworICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKQorICAgICAgICAg
ICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVuc2lvbnMzRDo6RlJBR01FTlRf
U0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVMpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUsIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBub3QgZW5hYmxlZCIpOwor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBXZWJHTERlYnVnUmVuZGVy
ZXJJbmZvOjpVTk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEZWJ1
Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9jb250ZXh0
LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSKSk7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBu
b3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9WRU5ET1JfV0VCR0w6CisgICAgICAgIGlm
IChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpWRU5ET1IpKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5k
ZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTOiAvLyBPRVNf
dmVydGV4X2FycmF5X29iamVjdAorICAgICAgICBpZiAobV9vZXNWZXJ0ZXhBcnJheU9iamVjdCkg
eworICAgICAgICAgICAgaWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmlzRGVmYXVsdE9i
amVjdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPihtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QpKTsKKyAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1l
dGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5v
dCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKQorICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVu
c2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUOiAvLyBFWFRfZHJhd19i
dWZmZXJzIEJFR0lOCisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMpCisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKGdldE1heENvbG9yQXR0YWNobWVudHMoKSk7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZHJhd19idWZmZXJzIG5v
dCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQ6CisgICAgICAgIGlmIChtX3dlYmdsRHJh
d0J1ZmZlcnMpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGdldE1heERyYXdCdWZm
ZXJzKCkpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdM
X2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycworICAgICAg
ICAgICAgJiYgcG5hbWUgPj0gRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUCisgICAgICAg
ICAgICAmJiBwbmFtZSA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihFeHRlbnNpb25zM0Q6OkRSQVdf
QlVGRkVSMF9FWFQgKyBnZXRNYXhEcmF3QnVmZmVycygpKSkgeworICAgICAgICAgICAgR0MzRGlu
dCB2YWx1ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOworICAgICAgICAgICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPmdldERyYXdCdWZmZXIocG5hbWUpOworICAgICAgICAgICAgZWxzZSAvLyBlbXVsYXRl
ZCBiYWNrYnVmZmVyCisgICAgICAgICAgICAgICAgdmFsdWUgPSBtX2JhY2tEcmF3QnVmZmVyOwor
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRQcm9ncmFtUGFyYW1ldGVyIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHByb2dyYW0tPmlzRGVsZXRlZCgpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpWQUxJREFURV9TVEFUVVM6CisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2
KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5LX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhwcm9n
cmFtLT5nZXRMaW5rU3RhdHVzKCkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFUVEFD
SEVEX1NIQURFUlM6CisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVTOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUzoKKyAgICAgICAgbV9j
b250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQob2JqZWN0T3JaZXJvKHByb2dy
YW0pLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1QYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitT
dHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbUluZm9Mb2ciLCBw
cm9ncmFtKSkKKyAgICAgICAgcmV0dXJuICIiOworICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKG1f
Y29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2cob2JqZWN0T3JaZXJvKHByb2dyYW0pKSk7Cit9CisK
K1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgfQorICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIs
ICJubyByZW5kZXJidWZmZXIgYm91bmQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OworICAgIH0KKworICAgIGlmIChtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9y
bWF0KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwKKyAgICAgICAgJiYgIW1f
cmVuZGVyYnVmZmVyQmluZGluZy0+aXNWYWxpZCgpKSB7CisgICAgICAgIEFTU0VSVCghaXNEZXB0
aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7CisgICAgICAgIGludCB2YWx1ZSA9IDA7CisgICAgICAgIHN3
aXRjaCAocG5hbWUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX1dJRFRIOgorICAgICAgICAgICAgdmFsdWUgPSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdl
dFdpZHRoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKKyAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJi
dWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgorICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxVRV9TSVpFOgorICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICAgICAg
ICAgIHZhbHVlID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICAgICAgICAgIHZhbHVlID0g
MjQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgIHZhbHVlID0gODsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfSU5URVJOQUxfRk9STUFUOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lIik7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgfQorCisgICAgR0MzRGludCB2
YWx1ZSA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfSEVJR0hUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9SRURfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JF
RU5fU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxVRV9T
SVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6Cisg
ICAgICAgIG1fY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFt
ZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFs
Rm9ybWF0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFk
ZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVyUGFyYW1ldGVy
Iiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIEdDM0RpbnQg
dmFsdWUgPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERUxFVEVfU1RBVFVTOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHNoYWRlci0+
aXNEZWxldGVkKCkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVT
OgorICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBw
bmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxi
b29sPih2YWx1ZSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFOgor
ICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFt
ZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KHZhbHVlKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKKyAgICB9Cit9CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlcklu
Zm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFk
ZXJJbmZvTG9nIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuICIiOworICAgIHJldHVybiBlbnN1
cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhvYmplY3RPclplcm8oc2hhZGVy
KSkpOworfQorCitQYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0PiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJU
eXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgeworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBR01FTlRfU0hBREVSOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNRURJVU1fRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElH
SF9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfSU5UOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6Ok1FRElVTV9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SElHSF9JTlQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQiLCAiaW52YWxpZCBwcmVjaXNpb24gdHlwZSIpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHQzNEaW50IHJhbmdlWzJdID0gezAsIDB9OworICAg
IEdDM0RpbnQgcHJlY2lzaW9uID0gMDsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlclByZWNpc2lv
bkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgJnByZWNpc2lvbik7Cisg
ICAgcmV0dXJuIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpjcmVhdGUocmFuZ2VbMF0sIHJh
bmdlWzFdLCBwcmVjaXNpb24pOworfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRTaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm4gIiI7CisgICAgcmV0
dXJuIGVuc3VyZU5vdE51bGwoc2hhZGVyLT5nZXRTb3VyY2UoKSk7Cit9CisKK1ZlY3RvcjxTdHJp
bmc+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpCit7Cisg
ICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworCisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbikKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0IikpCisgICAgICAg
IHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2Zsb2F0Iik7CisgICAgaWYgKG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikp
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOworICAg
IGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJl
X2hhbGZfZmxvYXQiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9m
bG9hdCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQo
Ik9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikpCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAgIGlm
IChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zaGFkZXJfdGV4
dHVyZV9sb2QiKSB8fCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FS
Ql9zaGFkZXJfdGV4dHVyZV9sb2QiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX3NoYWRl
cl90ZXh0dXJlX2xvZCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAg
aWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3ZlcnRleF9hcnJheV9v
YmplY3QiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU19l
bGVtZW50X2luZGV4X3VpbnQiKTsKKyAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9sb3NlX2NvbnRl
eHQiKTsKKyAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6c3VwcG9ydGVkKHRoaXMp
KQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJl
X2F0YyIpOworICAgIGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZCh0
aGlzKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4
dHVyZV9wdnJ0YyIpOworICAgIGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9y
dGVkKHRoaXMpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1
cmVfczN0YyIpOworICAgIGlmIChXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNz
Q29udGV4dDNEKCkpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZXB0aF90ZXh0dXJl
Iik7CisgICAgaWYgKHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiV0VCR0xfZHJhd19idWZmZXJzIik7CisgICAgaWYgKEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpz
dXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkFOR0xFX2luc3RhbmNlZF9h
cnJheXMiKTsKKworICAgIGlmIChhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkpIHsKKyAgICAg
ICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQU5HTEVfdHJh
bnNsYXRlZF9zaGFkZXJfc291cmNlIikpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJH
TF9kZWJ1Z19zaGFkZXJzIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3Jl
bmRlcmVyX2luZm8iKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1
cmVCaW5kaW5nKCJnZXRUZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRl
eCkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIEdDM0RpbnQgdmFsdWUgPSAw
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5f
RklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgorICAgICAgICBtX2NvbnRl
eHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOworICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3Rl
eHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYykgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0
YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHVuaWZvcm1Mb2NhdGlvbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtIiwgcHJv
Z3JhbSkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBpZiAoIXVuaWZvcm1M
b2NhdGlvbiB8fCB1bmlmb3JtTG9jYXRpb24tPnByb2dyYW0oKSAhPSBwcm9ncmFtKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0aW9uIG9yIG5vdCB2YWxpZCBmb3IgdGhp
cyBwcm9ncmFtIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAg
R0MzRGludCBsb2NhdGlvbiA9IHVuaWZvcm1Mb2NhdGlvbi0+bG9jYXRpb24oKTsKKworICAgIEdD
M0RlbnVtIGJhc2VUeXBlOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICBzd2l0Y2ggKHVuaWZv
cm1Mb2NhdGlvbi0+dHlwZSgpKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVu
Z3RoID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9P
TF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAg
ICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCT09MX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJP
T0w7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkJPT0xfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUM0OgorICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMjoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxl
bmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwor
ICAgICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVF9WRUM0OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDM6CisgICAgICAgIGJhc2VUeXBl
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA5OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQ0OgorICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0g
MTY7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJf
MkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFOgorICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIENhbid0IGhhbmRsZSB0aGlz
IHR5cGUKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVuaGFuZGxlZCB0eXBlIik7CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgc3dpdGNoIChiYXNlVHlwZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiB7CisgICAgICAgIEdDM0RmbG9hdCB2YWx1ZVsx
Nl0gPSB7MH07CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWZ2RVhUKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDE2ICogc2l6ZW9mKEdDM0RmbG9hdCksIHZhbHVl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtZnYob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3Ro
ID09IDEpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3Ro
KSk7CisgICAgfQorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDogeworICAgICAgICBH
QzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBw
b3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZv
cm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdDM0Rp
bnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5p
Zm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAg
aWYgKGxlbmd0aCA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZVsw
XSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVl
LCBsZW5ndGgpKTsKKyAgICB9CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDogewor
ICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5l
c3NFWFRTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
Z2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6
ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsK
KyAgICAgICAgaWYgKGxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIGJvb2wgYm9vbFZhbHVlWzE2
XSA9IHswfTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBsZW5ndGg7IGor
KykKKyAgICAgICAgICAgICAgICBib29sVmFsdWVbal0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1
ZVtqXSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGJvb2xWYWx1ZSwgbGVuZ3Ro
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJv
b2w+KHZhbHVlWzBdKSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgfQorCisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHNvbWV0aGluZyB3ZW50IHdy
b25nIGluIG91ciB1bmZvcnR1bmF0ZWx5IGNvbXBsZXggbG9naWMgYWJvdmUKKyAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0i
LCAidW5rbm93biBlcnJvciIpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKK30KKworUGFz
c1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRV
bmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9y
bUxvY2F0aW9uIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICgh
dmFsaWRhdGVMb2NhdGlvbkxlbmd0aCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldFVuaWZvcm1M
b2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXNQcmVm
aXhSZXNlcnZlZChuYW1lKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFwcm9n
cmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgInBy
b2dyYW0gbm90IGxpbmtlZCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAg
R0MzRGludCB1bmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihv
YmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOworICAgIGlmICh1bmlmb3JtTG9jYXRpb24gPT0g
LTEpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgR0MzRGludCBhY3RpdmVVbmlmb3Jt
cyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZPUk1TLCAm
YWN0aXZlVW5pZm9ybXMpOworICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8IGFjdGl2ZVVuaWZv
cm1zOyBpKyspIHsKKyAgICAgICAgQWN0aXZlSW5mbyBpbmZvOworICAgICAgICBpZiAoIW1fY29u
dGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSksIGksIGluZm8pKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIC8vIFN0cmlwICJbMF0iIGZyb20g
dGhlIG5hbWUgaWYgaXQncyBhbiBhcnJheS4KKyAgICAgICAgaWYgKGluZm8ubmFtZS5lbmRzV2l0
aCgiWzBdIikpCisgICAgICAgICAgICBpbmZvLm5hbWUgPSBpbmZvLm5hbWUubGVmdChpbmZvLm5h
bWUubGVuZ3RoKCkgLSAzKTsKKyAgICAgICAgLy8gSWYgaXQncyBhbiBhcnJheSwgd2UgbmVlZCB0
byBpdGVyYXRlIHRocm91Z2ggZWFjaCBlbGVtZW50LCBhcHBlbmRpbmcgIltpbmRleF0iIHRvIHRo
ZSBuYW1lLgorICAgICAgICBmb3IgKEdDM0RpbnQgaW5kZXggPSAwOyBpbmRleCA8IGluZm8uc2l6
ZTsgKytpbmRleCkgeworICAgICAgICAgICAgU3RyaW5nIHVuaWZvcm1OYW1lID0gaW5mby5uYW1l
ICsgIlsiICsgU3RyaW5nOjpudW1iZXIoaW5kZXgpICsgIl0iOworCisgICAgICAgICAgICBpZiAo
bmFtZSA9PSB1bmlmb3JtTmFtZSB8fCBuYW1lID09IGluZm8ubmFtZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZShwcm9ncmFtLCB1bmlmb3JtTG9j
YXRpb24sIGluZm8udHlwZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJp
YihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisKKyAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VmVydGV4QXR0cmliIiwgImluZGV4IG91dCBvZiBy
YW5nZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorCisgICAgY29u
c3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0g
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisK
KyAgICBpZiAobV9hbmdsZUluc3RhbmNlZEFycmF5cyAmJiBwbmFtZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFKQorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHN0YXRlLmRpdmlzb3IpOworCisgICAgc3dpdGNoIChwbmFtZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6CisgICAgICAgIGlmICgoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiAhaW5kZXggJiYgbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKS5idWZmZXJCaW5kaW5n
ID09IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikKKyAgICAgICAgICAgIHx8ICFzdGF0ZS5idWZmZXJC
aW5kaW5nCisgICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisg
ICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4oc3RhdGUuYnVmZmVyQmluZGluZykpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5lbmFibGVkKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGUubm9ybWFsaXplZCk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKHN0YXRlLnNpemUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9B
VFRSSUJfQVJSQVlfU1RSSURFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm9y
aWdpbmFsU3RyaWRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklC
X0FSUkFZX1RZUEU6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUudHlwZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOgorICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKG1fdmVydGV4QXR0cmli
VmFsdWVbaW5kZXhdLnZhbHVlLCA0KSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFZlcnRleEF0dHJp
YiIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICB9Cit9CisKK2xvbmcgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZl
cnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgR0Mz
RHNpemVpcHRyIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4
LCBwbmFtZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4ocmVzdWx0KTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKHRhcmdldCkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgorICAg
ICAgICBpc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMKKyAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKKyAgICAg
ICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCFp
c1ZhbGlkKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJoaW50IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9jb250ZXh0LT5oaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK0dDM0Rib29s
ZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikK
K3sKKyAgICBpZiAoIWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKCFidWZmZXItPmhhc0V2ZXJCZWVuQm91bmQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0J1ZmZlcihidWZmZXItPm9i
amVjdCgpKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQ29udGV4dExvc3Qo
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRMb3N0OworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdE9yUGVuZGluZygpCit7CisgICAgaWYgKG1faXNQ
ZW5kaW5nUG9saWN5UmVzb2x1dGlvbiAmJiAhbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9u
KSB7CisgICAgICAgIExPRyhXZWJHTCwgIkNvbnRleHQgaXMgYmVpbmcgdXNlZC4gQXR0ZW1wdCB0
byByZXNvbHZlIHRoZSBwb2xpY3kuIik7CisgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNh
bnZhcygpLT5kb2N1bWVudCgpLnRvcERvY3VtZW50KCk7CisgICAgICAgIFBhZ2UqIHBhZ2UgPSBk
b2N1bWVudC5wYWdlKCk7CisgICAgICAgIGlmIChwYWdlICYmICFkb2N1bWVudC51cmwoKS5pc0xv
Y2FsRmlsZSgpKQorICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50
KCkucmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKGRvY3VtZW50LnVybCgpKTsKKyAgICAgICAgLy8g
RklYTUU6IFdlIGRvbid0IGN1cnJlbnRseSBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQgZnJv
bSByZXNvbHV0aW9uLiBBIG1vcmUKKyAgICAgICAgLy8gY29tcGxldGUgaW1wbGVtZW50YXRpb24g
bWlnaHQgdHJ5IHRvIGNvbnN0cnVjdCBhIHJlYWwgY29udGV4dCwgZXRjIGFuZCBwcm9jZWVkCisg
ICAgICAgIC8vIHdpdGggbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTEyMgorICAgICAgICBtX2hhc1JlcXVlc3Rl
ZFBvbGljeVJlc29sdXRpb24gPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBtX2NvbnRleHRM
b3N0IHx8IG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKK30KKworR0MzRGJvb2xlYW4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiaXNFbmFibGVk
IiwgY2FwKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9URVNUKQorICAgICAgICByZXR1cm4gbV9zdGVuY2lsRW5hYmxlZDsKKyAg
ICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQoY2FwKTsKK30KKworR0MzRGJvb2xlYW4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1l
YnVmZmVyKQoreworICAgIGlmICghZnJhbWVidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghZnJhbWVidWZmZXItPmhhc0V2ZXJC
ZWVuQm91bmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9jb250ZXh0LT5p
c0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyLT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sK
KyAgICBpZiAoIXByb2dyYW0gfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJvZ3JhbShwcm9ncmFtLT5vYmpl
Y3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNSZW5kZXJi
dWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRl
cmJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKCFyZW5kZXJidWZmZXItPmhhc0V2ZXJCZWVuQm91bmQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZm
ZXItPm9iamVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyIHx8IGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9j
b250ZXh0LT5pc1NoYWRlcihzaGFkZXItPm9iamVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQorewor
ICAgIGlmICghdGV4dHVyZSB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKCF0ZXh0dXJlLT5oYXNFdmVyQmVlbkJvdW5kKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNUZXh0dXJlKHRleHR1cmUtPm9i
amVjdCgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmVXaWR0aChHQzNE
ZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+bGluZVdpZHRoKHdpZHRoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJsaW5rUHJvZ3Jh
bSIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkpIHsKKyAgICAgICAgV2ViR0xTaGFkZXIqIHZlcnRleFNoYWRlciA9IHByb2dyYW0tPmdldEF0
dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICAgICAg
V2ViR0xTaGFkZXIqIGZyYWdtZW50U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgICAgIGlmICghdmVydGV4
U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzVmFsaWQoKSB8fCAhZnJhZ21lbnRTaGFkZXIgfHwg
IWZyYWdtZW50U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIW1fY29udGV4dC0+cHJlY2lzaW9uc01hdGNo
KG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclplcm8oZnJhZ21lbnRTaGFkZXIp
KSB8fCAhbV9jb250ZXh0LT5jaGVja1ZhcnlpbmdzUGFja2luZyhvYmplY3RPclplcm8odmVydGV4
U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkpIHsKKyAgICAgICAgICAgIHBy
b2dyYW0tPnNldExpbmtTdGF0dXMoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShvYmplY3RPclplcm8ocHJv
Z3JhbSkpOworICAgIHByb2dyYW0tPmluY3JlYXNlTGlua0NvdW50KCk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBw
YXJhbSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
UEFDS19GTElQX1lfV0VCR0w6CisgICAgICAgIG1fdW5wYWNrRmxpcFkgPSBwYXJhbTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1BSRU1VTFRJUExZ
X0FMUEhBX1dFQkdMOgorICAgICAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBwYXJhbTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0NPTE9S
U1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKKyAgICAgICAgaWYgKHBhcmFtID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wgfHwgcGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PTkUpCisgICAgICAgICAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gc3Rh
dGljX2Nhc3Q8R0MzRGVudW0+KHBhcmFtKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInBpeGVs
U3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJT
SU9OX1dFQkdMIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgaWYgKHBhcmFt
ID09IDEgfHwgcGFyYW0gPT0gMiB8fCBwYXJhbSA9PSA0IHx8IHBhcmFtID09IDgpIHsKKyAgICAg
ICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQpCisg
ICAgICAgICAgICAgICAgbV9wYWNrQWxpZ25tZW50ID0gcGFyYW07CisgICAgICAgICAgICBlbHNl
IC8vIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICAgICAgICAg
IG1fdW5wYWNrQWxpZ25tZW50ID0gcGFyYW07CisgICAgICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKHBuYW1lLCBwYXJhbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInBpeGVsU3Rv
cmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBhbGlnbm1lbnQiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicGl4ZWxT
dG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cG9seWdvbk9mZnNldChHQzNEZmxv
YXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNldChm
YWN0b3IsIHVuaXRzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVs
cywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIC8vIER1ZSB0byBXZWJHTCdzIHNhbWUtb3JpZ2luIHJlc3Ry
aWN0aW9ucywgaXQgaXMgbm90IHBvc3NpYmxlIHRvCisgICAgLy8gdGFpbnQgdGhlIG9yaWdpbiB1
c2luZyB0aGUgV2ViR0wgQVBJLgorICAgIEFTU0VSVChjYW52YXMoKS0+b3JpZ2luQ2xlYW4oKSk7
CisgICAgLy8gVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycy4KKyAgICBpZiAoIXBpeGVscykgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInJlYWRQaXhlbHMiLCAibm8gZGVzdGluYXRpb24gQXJyYXlCdWZmZXJWaWV3Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRf
NF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVf
MToKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxp
ZCB0eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGZvcm1hdCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSB8fCB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiZm9ybWF0IG5vdCBSR0JBIG9yIHR5cGUg
bm90IFVOU0lHTkVEX0JZVEUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBWYWxp
ZGF0ZSBhcnJheSB0eXBlIGFnYWluc3QgcGl4ZWwgdHlwZS4KKyAgICBpZiAocGl4ZWxzLT5nZXRU
eXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1
ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
b25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3Jh
cGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCByZWFzb24pOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIC8vIENhbGN1bGF0ZSBhcnJheSBzaXplLCB0YWtpbmcgaW50byBjb25zaWRlcmF0aW9u
IG9mIFBBQ0tfQUxJR05NRU5ULgorICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVzUmVxdWlyZWQg
PSAwOworICAgIHVuc2lnbmVkIGludCBwYWRkaW5nID0gMDsKKyAgICBpZiAoIW1faXNSb2J1c3Ru
ZXNzRVhUU3VwcG9ydGVkKSB7CisgICAgICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5j
b21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFj
a0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRpbmcpOworICAgICAgICBpZiAo
ZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihlcnJvciwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBkaW1lbnNpb25zIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBpeGVscy0+Ynl0
ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxz
IiwgIkFycmF5QnVmZmVyVmlldyBub3QgbGFyZ2UgZW5vdWdoIGZvciBkaW1lbnNpb25zIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOworICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CisKKyAgICB7
CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZl
ci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBpZiAobV9pc1Jv
YnVzdG5lc3NFWFRTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+cmVhZG5QaXhlbHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMtPmJ5dGVMZW5ndGgoKSwgZGF0YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRh
dGEpOworICAgIH0KKworI2lmIE9TKERBUldJTikKKyAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRT
dXBwb3J0ZWQpIC8vIHdlIGhhdmVuJ3QgY29tcHV0ZWQgcGFkZGluZworICAgICAgICBtX2NvbnRl
eHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwg
bV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAmcGFkZGluZyk7CisgICAgLy8g
RklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBkcml2ZXIgYnVnIG9uIE1hYyBBTkQg
dGhlIEdMRVMgZHJpdmVyIGJ1ZworICAgIC8vIG9uIFFDIGlzIGZpeGVkLCBpLmUuLCB3aGVuIGFs
cGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQKKyAgICAvLyBzZXQgYWxwaGEgdG8gMjU1IGlu
c3RlYWQgb2YgMC4KKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2NvbnRleHQt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciog
cGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSk7CisgICAgICAg
IGZvciAoR0MzRHNpemVpIGl5ID0gMDsgaXkgPCBoZWlnaHQ7ICsraXkpIHsKKyAgICAgICAgICAg
IGZvciAoR0MzRHNpemVpIGl4ID0gMDsgaXggPCB3aWR0aDsgKytpeCkgeworICAgICAgICAgICAg
ICAgIHBpeGVsc1szXSA9IDI1NTsKKyAgICAgICAgICAgICAgICBwaXhlbHMgKz0gNDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHBpeGVscyArPSBwYWRkaW5nOworICAgICAgICB9CisgICAg
fQorI2VuZGlmCit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbnRleHQtPnJlbGVhc2VTaGFkZXJDb21waWxlcigpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlbmRlcmJ1ZmZlclN0b3Jh
Z2UiLCAibm8gYm91bmQgcmVuZGVyYnVmZmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKCF2YWxpZGF0ZVNpemUoInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCB3aWR0aCwgaGVpZ2h0
KSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0Ex
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKKyAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZm
ZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAg
ICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0
KTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKHRydWUpOworICAg
ICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Cisg
ICAgICAgIGlmIChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKSB7CisgICAgICAgICAgICBtX2Nv
bnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRf
U1RFTkNJTDgsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgICAgIG1fcmVuZGVyYnVm
ZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpOworICAgICAg
ICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2Ui
LCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGFwcGx5U3RlbmNpbFRlc3QoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNh
bXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQoreworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Nv
bnRleHQtPnNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgic2Npc3NvciIsIHdp
ZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zY2lzc29yKHgs
IHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2hh
ZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInNoYWRlclNvdXJjZSIs
IHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgc3RyaW5nV2l0aG91dENvbW1l
bnRzID0gU3RyaXBDb21tZW50cyhzdHJpbmcpLnJlc3VsdCgpOworICAgIGlmICghdmFsaWRhdGVT
dHJpbmcoInNoYWRlclNvdXJjZSIsIHN0cmluZ1dpdGhvdXRDb21tZW50cykpCisgICAgICAgIHJl
dHVybjsKKyAgICBzaGFkZXItPnNldFNvdXJjZShzdHJpbmcpOworICAgIG1fY29udGV4dC0+c2hh
ZGVyU291cmNlKG9iamVjdE9yWmVybyhzaGFkZXIpLCBzdHJpbmdXaXRob3V0Q29tbWVudHMpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVu
YywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVu
Yygic3RlbmNpbEZ1bmMiLCBmdW5jKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RlbmNpbEZ1
bmNSZWYgPSByZWY7CisgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7CisgICAgbV9zdGVu
Y2lsRnVuY01hc2sgPSBtYXNrOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7Cisg
ICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBH
QzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0
ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgZnVuYykpCisgICAgICAgIHJldHVy
bjsKKyAgICBzd2l0Y2ggKGZhY2UpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9O
VF9BTkRfQkFDSzoKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICAgICAgbV9z
dGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7CisgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFz
azsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6CisgICAgICAgIG1fc3RlbmNpbEZ1
bmNSZWYgPSByZWY7CisgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9zdGVu
Y2lsRnVuY1JlZkJhY2sgPSByZWY7CisgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1h
c2s7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsRnVuY1NlcGFyYXRl
IiwgImludmFsaWQgZmFjZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4
dC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9z
dGVuY2lsTWFzayA9IG1hc2s7CisgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOworICAgIG1f
Y29udGV4dC0+c3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHN3aXRjaCAoZmFjZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0FORF9C
QUNLOgorICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICAgICAgbV9zdGVuY2lsTWFz
a0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVDoKKyAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s6CisgICAgICAgIG1fc3RlbmNpbE1hc2tC
YWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxNYXNr
U2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
bV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpm
YWlsLCBHQzNEZW51bSB6cGFzcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zdGVuY2lsT3AoZmFpbCwgemZhaWws
IHpwYXNzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcFNlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51
bSB6cGFzcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9jb250ZXh0LT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFp
bCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJh
c2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3Jz
IHJldHVybmVkLgorICAgIGVjID0gMDsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRl
VGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIEFTU0VSVCh2
YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwg
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlKSk7CisgICAgQVNTRVJUKHRleCk7CisgICAgQVNTRVJUKCFsZXZlbCB8fCAhV2Vi
R0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpOworICAgIGlmICghcGl4ZWxzKSB7Cisg
ICAgICAgIC8vIE5vdGU6IENocm9taXVtJ3MgT3BlbkdMIGltcGxlbWVudGF0aW9uIGNsZWFycyB0
ZXh0dXJlcyBhbmQgaXNSZXNvdXJjZVNhZmUoKSBpcyB0aGVyZWZvcmUgdHJ1ZS4KKyAgICAgICAg
Ly8gRm9yIG90aGVyIGltcGxlbWVudGF0aW9ucywgaWYgdGhleSBhcmUgdXNpbmcgQU5HTEVfZGVw
dGhfdGV4dHVyZSwgQU5HTEUgZGVwdGggdGV4dHVyZXMKKyAgICAgICAgLy8gY2FuIG5vdCBiZSBj
bGVhcmVkIHdpdGggdGV4SW1hZ2UyRCBhbmQgbXVzdCBiZSBjbGVhcmVkIGJ5IGJpbmRpbmcgdG8g
YW4gZmJvIGFuZCBjYWxsaW5nCisgICAgICAgIC8vIGNsZWFyLgorICAgICAgICBpZiAoaXNSZXNv
dXJjZVNhZmUoKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IG51bGxwdHIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGJvb2wgc3VjY2VlZCA9IG1f
Y29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tB
bGlnbm1lbnQpOworICAgICAgICAgICAgaWYgKCFzdWNjZWVkKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZVNl
dHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKTsKKyAgICAgICAg
bV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICAgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5
cGUsIHBpeGVscyk7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgdGV4SW1hZ2UyRCBmdW5jdGlvbiBm
YWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgZm9y
IHRoaXMgbGV2ZWwuCisgICAgICAgICAgICB0ZXgtPm1hcmtJbnZhbGlkKHRhcmdldCwgbGV2ZWwp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIHRleC0+c2V0TGV2
ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBl
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGRhdGE7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGlt
YWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
Q29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOworICAgIGlm
ICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIs
ICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5p
bWFnZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhh
T3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBjb25zdCB2b2lkKiBpbWFn
ZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7CisKKyAgICBib29s
IG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYm
IGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkK
KyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYg
KCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQs
IHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5p
bWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9y
LmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdl
MkQiLCAicGFja0ltYWdlIGVycm9yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250
ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7
CisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdl
LT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7CisgICAgaWYgKG1fdW5wYWNr
QWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuYyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwgVGV4
RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHNvdXJjZVR5cGUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQpCit7CisgICAgaWYgKCF2YWxp
ZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25UeXBlLCB0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5
cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCB0cnVlKTsKKyAg
ICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChmdW5jdGlv
blR5cGUgPT0gTm90VGV4U3ViSW1hZ2UyRCkgeworICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xU
ZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJs
ZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBGb3IgU291cmNlQXJyYXlCdWZmZXJWaWV3LCBmdW5jdGlvbiB2
YWxpZGF0ZVRleEZ1bmNEYXRhKCkgd291bGQgaGFuZGxlIHdoZXRoZXIgdG8gdmFsaWRhdGUgdGhl
IFNldHRhYmxlVGV4Rm9ybWF0CisgICAgICAgIC8vIGJ5IGNoZWNraW5nIGlmIHRoZSBBcnJheUJ1
ZmZlclZpZXcgaXMgbnVsbCBvciBub3QuCisgICAgICAgIGlmIChzb3VyY2VUeXBlICE9IFNvdXJj
ZUFycmF5QnVmZmVyVmlldykgeworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4
Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXZhbGlkYXRlU2V0dGFi
bGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoIXZhbGlkYXRlU2l6ZShmdW5jdGlvbk5hbWUsIHhvZmZzZXQsIHlv
ZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBCZWZvcmUgY2hl
Y2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBjaGVjayBpZiBvdmVyZmxvdyBoYXBwZW5zIGZp
cnN0LgorICAgICAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsgaGVpZ2h0
IDwgMCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJhZCBkaW1lbnNpb25zIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHhvZmZzZXQgKyB3aWR0
aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQg
PiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKSAhPSBmb3JtYXQgfHwgdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSAh
PSB0eXBlKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgYW5kIGZvcm1hdCBkbyBu
b3QgbWF0Y2ggdGV4dHVyZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSgi
dGV4SW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscywg
TnVsbEFsbG93ZWQpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBO
b3RUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgMCwgMCkp
CisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8gcGl4ZWxzLT5iYXNl
QWRkcmVzcygpIDogMDsKKyAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CisgICAgYm9vbCBj
aGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICBpZiAoZGF0YSAmJiAobV91bnBhY2tG
bGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7CisgICAgICAgIGlmICghbV9jb250
ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBEYXRhKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YSA9
IHRlbXBEYXRhLmRhdGEoKTsKKyAgICAgICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKKyAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Cisg
ICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEsIGVj
KTsKKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0Fs
aWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhcGl4ZWxzIHx8
ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VJ
bWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCks
IHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0g
dHJ1ZTsKKyAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2YgZm9ybWF0
IFJHQkE4LgorICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9uIGZv
cm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQcmVt
dWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFtX3VucGFja0ZsaXBZICYm
ICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpCisgICAg
ICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9j
b250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdl
MkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Cisg
ICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+
d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lv
biA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSwgZWMpOworICAgIGlmICht
X3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9
CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0ltYWdlSW50
b0J1ZmZlcihJbWFnZSogaW1hZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRldmljZVNj
YWxlRmFjdG9yKQoreworICAgIEludFNpemUgc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzaXpl
LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9nZW5l
cmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOworICAgIGlmICghYnVmKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAi
dGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2UtPnNpemUo
KSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7CisgICAgYnVm
LT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJl
Y3QsIHNyY1JlY3QpOworICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFz
dENvcHlJbWFnZU1vZGUoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgaW1hZ2UsIGVjKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlciA9IGlt
YWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKTsK
KyAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKKyAgICAgICAgaW1hZ2VGb3JS
ZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVyLmdldCgpLCBpbWFnZS0+
d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKKworICAgIGlmICghaW1hZ2VGb3JSZW5kZXIg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJj
ZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZUZv
clJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgY2Fu
dmFzLCBlYykgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdl
MkQsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAs
IDApKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICAvLyBJ
ZiBwb3NzaWJsZSwgY29weSBmcm9tIHRoZSBjYW52YXMgZWxlbWVudCBkaXJlY3RseSB0byB0aGUg
dGV4dHVyZQorICAgIC8vIHZpYSB0aGUgR1BVLCB3aXRob3V0IGEgcmVhZC1iYWNrIHRvIHN5c3Rl
bSBtZW1vcnkuCisgICAgLy8KKyAgICAvLyBGSVhNRTogcmVzdHJpY3Rpb24gb2YgKFJHQiB8fCBS
R0JBKS9VTlNJR05FRF9CWVRFIHNob3VsZCBiZSBsaWZ0ZWQgd2hlbgorICAgIC8vIEltYWdlQnVm
ZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgaW1wbGVtZW50YXRpb25zIGFyZSBmdWxseSBmdW5j
dGlvbmFsLgorICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQg
JiYgdGV4dHVyZSAmJiB0eXBlID09IHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkKKyAg
ICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCIHx8IGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSkgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSkgeworICAgICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZm
ZXIoKTsKKyAgICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVy
ZSgqbV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgIHRl
eHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFz
LT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNh
bnZhcy0+Z2V0SW1hZ2VEYXRhKCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgdGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZURh
dGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2Uo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQorUGFzc1Jl
ZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZShIVE1M
VmlkZW9FbGVtZW50KiB2aWRlbywgQmFja2luZ1N0b3JlQ29weSBiYWNraW5nU3RvcmVDb3B5LCBF
eGNlcHRpb25Db2RlJikKK3sKKyAgICBJbnRTaXplIHNpemUodmlkZW8tPnZpZGVvV2lkdGgoKSwg
dmlkZW8tPnZpZGVvSGVpZ2h0KCkpOworICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2dlbmVyYXRl
ZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFidWYpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlksICJ0ZXhJ
bWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIEludFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKyAgICAvLyBGSVhNRTogVHVybiB0aGlzIGludG8gYSBHUFUtR1BVIHRleHR1cmUgY29weSBp
bnN0ZWFkIG9mIENQVSByZWFkYmFjay4KKyAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoYnVmLT5jb250ZXh0KCksIGRlc3RSZWN0KTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1h
Z2UoYmFja2luZ1N0b3JlQ29weSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhJbWFnZTJEIiwgdmlkZW8sIGVj
KQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1h
Z2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQs
IHR5cGUsIDAsIDApKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBHbyB0aHJvdWdoIHRoZSBm
YXN0IHBhdGggZG9pbmcgYSBHUFUtR1BVIHRleHR1cmVzIGNvcHkgd2l0aG91dCBhIHJlYWRiYWNr
IHRvIHN5c3RlbSBtZW1vcnkgaWYgcG9zc2libGUuCisgICAgLy8gT3RoZXJ3aXNlLCBpdCB3aWxs
IGZhbGwgYmFjayB0byB0aGUgbm9ybWFsIFNXIHBhdGguCisgICAgLy8gRklYTUU6IFRoZSBjdXJy
ZW50IHJlc3RyaWN0aW9ucyByZXF1aXJlIHRoYXQgZm9ybWF0IHNob3VkIGJlIFJHQiBvciBSR0JB
LAorICAgIC8vIHR5cGUgc2hvdWxkIGJlIFVOU0lHTkVEX0JZVEUgYW5kIGxldmVsIHNob3VsZCBi
ZSAwLiBJdCBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUuCisgICAgV2ViR0xUZXh0dXJlKiB0
ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1
ZSk7CisgICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEID09IHRhcmdldCAmJiB0
ZXh0dXJlCisgICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpCisgICAgICAgICYmIHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgJiYgKHRleHR1cmUtPmdldFR5
cGUodGFyZ2V0LCBsZXZlbCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgfHwg
IXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpCisgICAgICAgICYmICFsZXZlbCkgewor
ICAgICAgICBpZiAodmlkZW8tPmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShtX2Nv
bnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBsZXZlbCwgdHlwZSwgaW50ZXJuYWxmb3Jt
YXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAg
ICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
dmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIHR5cGUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm9ybWFsIHB1cmUgU1cg
cGF0aC4KKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8s
IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBlYyk7CisgICAgaWYgKCFpbWFnZSkK
KyAgICAgICAgcmV0dXJuOworICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6
SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVj
KTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbWYsIEdDM0Rp
bnQgcGFyYW1pLCBib29sIGlzRmxvYXQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygidGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBmYWxzZSk7CisgICAgaWYgKCF0
ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1Q6CisgICAgICAgIGlmICgoaXNGbG9hdCAmJiBwYXJhbWYgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBF
QVQpCisgICAgICAgICAgICB8fCAoIWlzRmxvYXQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9S
RURfUkVQRUFUICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKSkgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpU
RVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJv
cGljCisgICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIsIEVYVF90ZXh0dXJlX2ZpbHRlcl9h
bmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpc0Zs
b2F0KSB7CisgICAgICAgIHRleC0+c2V0UGFyYW1ldGVyZihwbmFtZSwgcGFyYW1mKTsKKyAgICAg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHBhcmFtZik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJpKHBuYW1lLCBwYXJhbWkpOworICAg
ICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW1pKTsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJmKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkKK3sKKyAgICB0ZXhQ
YXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgcGFyYW0sIDAsIHRydWUpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1l
LCAwLCBwYXJhbSwgZmFsc2UpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBl
cnJvcnMgcmV0dXJuZWQKKyAgICBlYyA9IDA7CisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkp
OworICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhTdWJJbWFnZTJEIiwg
VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBm
b3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodmFsaWRhdGVTaXplKCJ0ZXhTdWJJbWFnZTJEIiwg
eG9mZnNldCwgeW9mZnNldCkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0
KCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0KSk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBp
ZiAoIXRleCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBBU1NFUlQoKHhvZmZzZXQgKyB3aWR0aCkgPj0gMCk7CisgICAgQVNTRVJU
KCh5b2Zmc2V0ICsgaGVpZ2h0KSA+PSAwKTsKKyAgICBBU1NFUlQodGV4LT5nZXRXaWR0aCh0YXJn
ZXQsIGxldmVsKSA+PSAoeG9mZnNldCArIHdpZHRoKSk7CisgICAgQVNTRVJUKHRleC0+Z2V0SGVp
Z2h0KHRhcmdldCwgbGV2ZWwpID49ICh5b2Zmc2V0ICsgaGVpZ2h0KSk7CisgICAgQVNTRVJUKHRl
eC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgPT0gZm9ybWF0KTsKKyAgICBBU1NF
UlQodGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IHR5cGUpOworICAgIG1fY29udGV4dC0+
dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJj
ZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwg
ZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9u
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsgIAorICAgIGlmICghaW1hZ2VFeHRyYWN0b3Iu
ZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsK
KyAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3Iu
aW1hZ2VBbHBoYU9wKCk7CisgICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4
dHJhY3Rvci5pbWFnZVBpeGVsRGF0YSgpOworCisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRy
dWU7CisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYg
c291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYm
IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCisgICAgICAgIG5lZWRDb252ZXJz
aW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1h
Z2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFP
cCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4
dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0Fs
aWdubWVudCgpLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRh
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV91
bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgdGV4U3ViSW1hZ2UyREJh
c2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKCksIGltYWdl
LT5oZWlnaHQoKSwgZm9ybWF0LCB0eXBlLCAgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6
IGltYWdlUGl4ZWxEYXRhLCBlYyk7CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisg
ICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0Rh
dGEoInRleFN1YkltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMsIE51bGxOb3RBbGxvd2VkKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhT
dWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQs
IGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwg
eW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNl
QWRkcmVzcygpOworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5n
ZVVucGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZ
IHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQt
PmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhID0gdGVt
cERhdGEuZGF0YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAg
IH0KKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0
ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxp
Z25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRl
eEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VJbWFnZURhdGEsIHRh
cmdldCwgbGV2ZWwsIGZvcm1hdCwgIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwg
MCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7
CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JB
OC4KKyAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQg
aXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlw
bHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAm
JiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKQorICAgICAgICBu
ZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4
dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJE
IiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+
cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAg
IHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHBpeGVs
cy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lv
biA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSwgZWMpOworICAgIGlmICht
X3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgaW1hZ2UsIGVjKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlciA9IGltYWdl
LT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKTsKKyAg
ICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKKyAgICAgICAgaW1hZ2VGb3JSZW5k
ZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVyLmdldCgpLCBpbWFnZS0+d2lk
dGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKKworICAgIGlmICghaW1hZ2VGb3JSZW5kZXIgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhU
TUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndp
ZHRoKCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0
LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRl
ci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52
YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVt
ZW50KCJ0ZXhTdWJJbWFnZTJEIiwgY2FudmFzLCBlYykKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4
RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxDYW52YXNFbGVt
ZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gY2FudmFzLT5nZXRJbWFnZURh
dGEoKTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICB0ZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBl
Yyk7CisgICAgZWxzZQorICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgZWMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0g
MDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRl
b0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCB2aWRlbywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9F
bGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVv
LT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1h
Z2UodmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBlYyk7CisgICAgaWYg
KCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZWMpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxv
YXQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtMWYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCAxKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSwg
di0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6
ZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlv
bi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFpIiwg
ImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExF
Ul9DVUJFKSAmJiB4ID49IChpbnQpbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9y
bTFpIiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYs
IDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVSX0NVQkUpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAodi0+ZGF0YSgpW2ldID49IHN0
YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSkgeworICAgICAgICAgICAgICAg
IExPRyhXZWJHTCwgIlRleHR1cmUgdW5pdCBzaXplPSV6dSwgdlslZF09JWQuIExvY2F0aW9uIHR5
cGUgPSAlMDRYLiIsIG1fdGV4dHVyZVVuaXRzLnNpemUoKSwgaSwgdi0+ZGF0YSgpW2ldLCBsb2Nh
dGlvbi0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0dXJl
IHVuaXQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
bGVuZ3RoKCksIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFUl9DVUJFKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNpemUpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgoKEdDM0RpbnQqKXYp
W2ldID49IHN0YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSkgeworICAgICAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgbV9jb250ZXh0LT51
bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplLCB2KTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMmYiLCAibG9jYXRp
b24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9u
LCB2LCAyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDIsIHYtPmRhdGEoKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2Iiwg
bG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQt
PnVuaWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnBy
b2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0yaSIsICJsb2Nh
dGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9jb250ZXh0LT51bmlmb3JtMmkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHkpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxvY2F0aW9u
LCB2LCAyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDIsIHYtPmRhdGEoKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxv
Y2F0aW9uLCB2LCBzaXplLCAyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51
bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMiwgdik7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVu
aWZvcm0zZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2YobG9jYXRpb24tPmxvY2F0
aW9uKCksIHgsIHksIHopOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSog
diwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYsIDMpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nv
bnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywg
di0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6
ZSAvIDMsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ1bmlmb3JtM2kiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dy
YW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTNp
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlvbiwgdiwgMykpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgc2l6ZSAvIDMsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0
IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlv
bi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTRmIiwg
ImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00Zihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwg
eSwgeiwgdyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00
ZnYiLCBsb2NhdGlvbiwgdiwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+
dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRh
KCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygi
dW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwg
dik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGlu
dCB6LCBHQzNEaW50IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTRpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBw
cm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRpb24sIHYsIDQpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRpb24sIHYsIHNpemUs
IDQpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0
cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxl
bmd0aCgpIC8gNCwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwg
NCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB0cmFuc3Bvc2UsIHYpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRl
cnMoInVuaWZvcm1NYXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA5KSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA5LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNw
b3NlLCB2LCBzaXplLCA5KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDksIHRyYW5zcG9zZSwgdik7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBG
bG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
TWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2Us
IHYsIDE2KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAxNiwgdHJhbnNwb3NlLCB2LT5k
YXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5z
cG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2Iiwg
bG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgMTYpKQorICAgICAgICByZXR1cm47CisgICAg
bV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8g
MTYsIHRyYW5zcG9zZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQ
cm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVj
dFRvQmVCb3VuZCgidXNlUHJvZ3JhbSIsIHByb2dyYW0sIGRlbGV0ZWQpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIHByb2dyYW0gPSAwOworICAgIGlmIChwcm9n
cmFtICYmICFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidXNlUHJvZ3JhbSIs
ICJwcm9ncmFtIG5vdCB2YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICht
X2N1cnJlbnRQcm9ncmFtICE9IHByb2dyYW0pIHsKKyAgICAgICAgaWYgKG1fY3VycmVudFByb2dy
YW0pCisgICAgICAgICAgICBtX2N1cnJlbnRQcm9ncmFtLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29u
dGV4dDNEKCkpOworICAgICAgICBtX2N1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKKyAgICAgICAg
bV9jb250ZXh0LT51c2VQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CisgICAgICAgIGlm
IChwcm9ncmFtKQorICAgICAgICAgICAgcHJvZ3JhbS0+b25BdHRhY2hlZCgpOworICAgIH0KK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVj
dCgidmFsaWRhdGVQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Nv
bnRleHQtPnZhbGlkYXRlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCB2MCkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliMWYiLCBp
bmRleCwgMSwgdjAsIDAuMGYsIDAuMGYsIDEuMGYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYp
Cit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwgdiwg
MSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4
QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwgdiwgc2l6ZSwgMSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwo
InZlcnRleEF0dHJpYjJmIiwgaW5kZXgsIDIsIHYwLCB2MSwgMC4wZiwgMS4wZik7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgs
IEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJp
YjJmdiIsIGluZGV4LCB2LCAyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6
ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjJmdiIsIGluZGV4LCB2
LCBzaXplLCAyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0
IHYyKQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZiIsIGluZGV4LCAz
LCB2MCwgdjEsIHYyLCAxLjBmKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZl
cnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYsIDMpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1w
bCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYsIHNpemUsIDMpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sKKyAgICB2
ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliNGYiLCBpbmRleCwgNCwgdjAsIHYxLCB2Miwg
djMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KEdD
M0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBs
KCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgdiwgNCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0
ZnYiLCBpbmRleCwgdiwgc2l6ZSwgNCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0Rl
bnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIGxvbmcg
bG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTSE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW52YWxpZCB0eXBlIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0
cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0IHx8
IHN0cmlkZSA8IDAgfHwgc3RyaWRlID4gMjU1IHx8IG9mZnNldCA8IDApIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhB
dHRyaWJQb2ludGVyIiwgImJhZCBzaXplLCBzdHJpZGUgb3Igb2Zmc2V0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidmVy
dGV4QXR0cmliUG9pbnRlciIsICJubyBib3VuZCBBUlJBWV9CVUZGRVIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAvLyBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0aGUg
Ym91bmQgYnVmZmVyIGNhbiBob2xkLCBnaXZlbiB0aGUgb2Zmc2V0LCBzaXplLCB0eXBlIGFuZCBz
dHJpZGUKKyAgICB1bnNpZ25lZCBpbnQgdHlwZVNpemUgPSBzaXplSW5CeXRlcyh0eXBlKTsKKyAg
ICBpZiAoIXR5cGVTaXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlw
ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgoc3RyaWRlICUgdHlwZVNpemUp
IHx8IChzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpICUgdHlwZVNpemUpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAic3RyaWRlIG9yIG9mZnNldCBub3QgdmFsaWQgZm9y
IHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHQzNEc2l6ZWkgYnl0ZXNQZXJF
bGVtZW50ID0gc2l6ZSAqIHR5cGVTaXplOworCisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgYnl0ZXNQZXJFbGVtZW50LCBzaXplLCB0eXBl
LCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG1f
Ym91bmRBcnJheUJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGlu
ZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXRpY19jYXN0PEdDM0RpbnRw
dHI+KG9mZnNldCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQo
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCF2YWxpZGF0ZVNpemUoInZpZXdwb3J0Iiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBhbHJl
YWR5IGxvc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dEdyb3Vw
LT5sb3NlQ29udGV4dEdyb3VwKG1vZGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2Rl
IG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CisgICAgbV9jb250ZXh0TG9zdE1vZGUgPSBtb2RlOwor
CisgICAgaWYgKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSB7CisgICAgICAgIC8vIEluZm9ybSB0
aGUgZW1iZWRkZXIgdGhhdCBhIGxvc3QgY29udGV4dCB3YXMgcmVjZWl2ZWQuIEluIHJlc3BvbnNl
LCB0aGUgZW1iZWRkZXIgbWlnaHQKKyAgICAgICAgLy8gZGVjaWRlIHRvIHRha2UgYWN0aW9uIHN1
Y2ggYXMgYXNraW5nIHRoZSB1c2VyIGZvciBwZXJtaXNzaW9uIHRvIHVzZSBXZWJHTCBhZ2Fpbi4K
KyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLmZyYW1lKCkp
CisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuZGlkTG9zZVdlYkdMQ29udGV4
dChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
KTsKKyAgICB9CisKKyAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisKKyAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIE1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIGRv
IG5vdCByZWZlciB0byBhbiBhbHJlYWR5LWRlbGV0ZWQgdGV4dHVyZSBvciBmcmFtZWJ1ZmZlci4K
KyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRUZXh0dXJlMkRCaW5kaW5nKDApOworICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZygwKTsKKyAgICB9CisKKyAg
ICAvLyBUaGVyZSBpcyBubyBkaXJlY3Qgd2F5IHRvIGNsZWFyIGVycm9ycyBmcm9tIGEgR0wgaW1w
bGVtZW50YXRpb24gYW5kCisgICAgLy8gbG9vcGluZyB1bnRpbCBnZXRFcnJvcigpIGJlY29tZXMg
Tk9fRVJST1IgbWlnaHQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBpZgorICAgIC8vIHRoZSBkcml2
ZXIgb3IgY29udGV4dCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBidWcuIFNvLCBsb29wIGEgcmVhc29u
YWJseQorICAgIC8vIGxhcmdlIG51bWJlciBvZiB0aW1lcyB0byBjbGVhciBhbnkgZXhpc3Rpbmcg
ZXJyb3JzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlIGRp
c3BsYXkgPSAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpID8gRGlzcGxheUluQ29uc29sZTogRG9u
dERpc3BsYXlJbkNvbnNvbGU7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTCwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgbG9zdCIsIGRp
c3BsYXkpOworCisgICAgLy8gRG9uJ3QgYWxsb3cgcmVzdG9yYXRpb24gdW5sZXNzIHRoZSBjb250
ZXh0IGxvc3QgZXZlbnQgaGFzIGJvdGggYmVlbgorICAgIC8vIGRpc3BhdGNoZWQgYW5kIGl0cyBk
ZWZhdWx0IGJlaGF2aW9yIHByZXZlbnRlZC4KKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZmFsc2U7
CisKKyAgICAvLyBBbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBjb250ZXh0IGxvc3Qg
ZXZlbnQsIHRvIGltcGxlbWVudAorICAgIC8vIHRoZSBzcGVjIGJlaGF2aW9yIG9mIHF1ZXVlaW5n
IGEgdGFzay4KKyAgICBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlUmVzdG9yZUNvbnRl
eHQoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJl
c3RvcmVDb250ZXh0IiwgImNvbnRleHQgbm90IGxvc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghbV9yZXN0b3JlQWxsb3dlZCkgeworICAgICAgICBpZiAobV9jb250ZXh0
TG9zdE1vZGUgPT0gU3ludGhldGljTG9zdENvbnRleHQpCisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29u
dGV4dCIsICJjb250ZXh0IHJlc3RvcmF0aW9uIG5vdCBhbGxvd2VkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVzdG9yZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAg
IG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworUGxhdGZvcm1MYXllciogV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
KCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgPyBtX2Nv
bnRleHQtPnBsYXRmb3JtTGF5ZXIoKSA6IDA7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpyZW1vdmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjphZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9jb250ZXh0R3JvdXAt
PmFkZE9iamVjdChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVt
b3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAo
bV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nv
bnRleHRPYmplY3RzLnJlbW92ZShvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9jb250ZXh0T2JqZWN0cy5hZGQob2Jq
ZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaEFuZFJlbW92ZUFs
bE9iamVjdHMoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIHdoaWxlIChtX2NvbnRleHRPYmplY3RzLnNpemUoKSA+IDApIHsK
KyAgICAgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPjo6aXRlcmF0b3IgaXQgPSBtX2Nv
bnRleHRPYmplY3RzLmJlZ2luKCk7CisgICAgICAgICgqaXQpLT5kZXRhY2hDb250ZXh0KCk7Cisg
ICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzdG9wKCkKK3sKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uKSB7CisgICAgICAgIGZvcmNlTG9zdENvbnRleHQoU3ludGhldGlj
TG9zdENvbnRleHQpOworICAgICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB9
Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5QYXJh
bWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7CisgICAgR0MzRGJvb2xlYW4gdmFsdWUgPSAwOworICAg
IG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOworfQorCitXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5h
bWUpCit7CisgICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklURU1B
U0spIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygwLCAwKTsKKyAgICB9CisgICAgR0MzRGJvb2xlYW4gdmFsdWVbNF0gPSB7MH07CisgICAg
bV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOworICAgIGJvb2wgYm9vbFZhbHVl
WzRdOworICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCA0OyArK2lpKQorICAgICAgICBib29sVmFs
dWVbaWldID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbaWldKTsKKyAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKGJvb2xWYWx1ZSwgNCk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEZsb2F0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RmbG9h
dCB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsICZ2YWx1ZSk7Cisg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEludFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBH
QzNEaW50IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCAmdmFs
dWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworfQorCitXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbnNpZ25lZEludFBhcmFtZXRlcihHQzNEZW51bSBw
bmFtZSkKK3sKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50Pih2YWx1ZSkpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgR0MzRGZsb2F0IHZhbHVlWzRdID0gezB9OworICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KHBu
YW1lLCB2YWx1ZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1l
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5HRToKKyAgICAgICAgbGVuZ3Ro
ID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRf
Q09MT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6Cisg
ICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQz
MkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1l
KQoreworICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihwbmFtZSwgdmFsdWUpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisgICAgc3dpdGNo
IChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVXUE9SVF9ESU1T
OgorICAgICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX0JPWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWSUVX
UE9SVDoKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgYm9vbCBwcmVwYXJlVG9EcmF3KQoreworICAgIGJvb2wgcmVzZXRBY3RpdmVVbml0
ID0gZmFsc2U7CisgICAgV2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uRmxhZyBleHRlbnNp
b25zID0gc3RhdGljX2Nhc3Q8V2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uRmxhZz4oKG1f
b2VzVGV4dHVyZUZsb2F0TGluZWFyID8gV2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uRmxv
YXRMaW5lYXJFbmFibGVkIDogMCkgfCAobV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyID8gV2Vi
R0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uSGFsZkZsb2F0TGluZWFyRW5hYmxlZCA6IDApKTsK
KworICAgIGZvciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsg
KytpaSkgeworICAgICAgICBpZiAoKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5n
ICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1Rl
eHR1cmUoZXh0ZW5zaW9ucykpCisgICAgICAgICAgICB8fCAobV90ZXh0dXJlVW5pdHNbaWldLnRl
eHR1cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBC
aW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpKSB7CisgICAgICAgICAg
ICBpZiAoaWkgIT0gbV9hY3RpdmVUZXh0dXJlVW5pdCkgeworICAgICAgICAgICAgICAgIG1fY29u
dGV4dC0+YWN0aXZlVGV4dHVyZShpaSk7CisgICAgICAgICAgICAgICAgcmVzZXRBY3RpdmVVbml0
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzZXRBY3RpdmVVbml0KSB7CisgICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKKyAgICAgICAgICAgICAg
ICByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFdl
YkdMVGV4dHVyZSogdGV4MkQ7CisgICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleEN1YmVNYXA7
CisgICAgICAgICAgICBpZiAocHJlcGFyZVRvRHJhdykgeworICAgICAgICAgICAgICAgIFN0cmlu
ZyBtc2coU3RyaW5nKCJ0ZXh0dXJlIGJvdW5kIHRvIHRleHR1cmUgdW5pdCAiKSArIFN0cmluZzo6
bnVtYmVyKGlpKQorICAgICAgICAgICAgICAgICAgICArICIgaXMgbm90IHJlbmRlcmFibGUuIEl0
IG1heWJlIG5vbi1wb3dlci1vZi0yIGFuZCBoYXZlIGluY29tcGF0aWJsZSB0ZXh0dXJlIGZpbHRl
cmluZyBvciBpcyBub3QgJ3RleHR1cmUgY29tcGxldGUnLCIKKyAgICAgICAgICAgICAgICAgICAg
KyAiIG9yIGl0IGlzIGEgZmxvYXQvaGFsZi1mbG9hdCB0eXBlIHdpdGggbGluZWFyIGZpbHRlcmlu
ZyBhbmQgd2l0aG91dCB0aGUgcmVsZXZhbnQgZmxvYXQvaGFsZi1mbG9hdCBsaW5lYXIgZXh0ZW5z
aW9uIGVuYWJsZWQuIik7CisgICAgICAgICAgICAgICAgcHJpbnRHTFdhcm5pbmdUb0NvbnNvbGUo
ZnVuY3Rpb25OYW1lLCBtc2cudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgdGV4MkQg
PSBtX2JsYWNrVGV4dHVyZTJELmdldCgpOworICAgICAgICAgICAgICAgIHRleEN1YmVNYXAgPSBt
X2JsYWNrVGV4dHVyZUN1YmVNYXAuZ2V0KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHRleDJEID0gbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmcuZ2V0
KCk7CisgICAgICAgICAgICAgICAgdGV4Q3ViZU1hcCA9IG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0
dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWld
LnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKKyAg
ICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBvYmplY3RPclplcm8odGV4MkQpKTsKKyAgICAgICAgICAgIGlmIChtX3RleHR1
cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50
ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkK
KyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQLCBvYmplY3RPclplcm8odGV4Q3ViZU1hcCkpOworICAgICAgICB9
CisgICAgfQorICAgIGlmIChyZXNldEFjdGl2ZVVuaXQpCisgICAgICAgIG1fY29udGV4dC0+YWN0
aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmVVbml0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpCit7CisgICAgdW5zaWdu
ZWQgY2hhciBibGFja1tdID0gezAsIDAsIDAsIDI1NX07CisgICAgbV9ibGFja1RleHR1cmUyRCA9
IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX2JsYWNrVGV4dHVyZTJELT5vYmplY3QoKSk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCBibGFjayk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCk7CisgICAgbV9ibGFja1RleHR1cmVDdWJlTWFwID0gY3JlYXRlVGV4dHVy
ZSgpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVAsIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC0+b2JqZWN0KCkpOworICAgIG1fY29u
dGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1gsIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNr
KTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+dGV4
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBt
X2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIDApOworfQorCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRp
b25WYWxpZChHQzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0KQoreworICAgIHVuc2lnbmVkIG5lZWQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdCh0ZXhJbnRlcm5hbEZvcm1hdCk7Cisg
ICAgdW5zaWduZWQgaGF2ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9y
bWF0KGNvbG9yQnVmZmVyRm9ybWF0KTsKKyAgICByZXR1cm4gKG5lZWQgJiBoYXZlKSA9PSBuZWVk
OworfQorCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZm
ZXJDb2xvckZvcm1hdCgpCit7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5nZXRDb2xvckJ1ZmZlckZvcm1hdCgpOworICAgIGlmIChtX2F0dHJpYnV0ZXMuYWxw
aGEpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyV2lkdGgoKTsKKyAgICByZXR1cm4gbV9k
cmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKSA6IG1fY29udGV4
dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOworfQorCitpbnQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKK3sKKyAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQor
ICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVySGVpZ2h0
KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgp
LmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdo
dCgpOworfQorCitXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVU
ZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwg
Ym9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApCit7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJl
ID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2Fj
dGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWjoKKyAgICAgICAgaWYgKCF1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2Fj
dGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVA6CisgICAg
ICAgIGlmICh1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVV
bml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJubyB0ZXh0dXJlIik7CisgICAgcmV0dXJuIHRleHR1cmU7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgY29uc3QgdW5zaWdu
ZWQgbWF4V2ViR0xMb2NhdGlvbkxlbmd0aCA9IDI1NjsKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgp
ID4gbWF4V2ViR0xMb2NhdGlvbkxlbmd0aCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24g
bGVuZ3RoID4gMjU2Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVNpemUoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkKK3sKKyAgICBpZiAo
eCA8IDAgfHwgeSA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInNpemUgPCAwIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Ry
aW5nLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZUNoYXJhY3RlcihzdHJp
bmdbaV0pKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic3RyaW5nIG5vdCBBU0NJSSIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0
QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgR0MzRGludCBsZXZlbCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkE6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9O
RU5UOgorICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJkZXB0aCB0ZXh0dXJlIGZvcm1hdHMgbm90IGVuYWJsZWQiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgaWYg
KG1fb2VzVGV4dHVyZUZsb2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgaWYgKG1fb2VzVGV4
dHVyZUhhbGZGbG9hdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUOgorICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0
dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFZlcmlm
eSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgor
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpIQUxGX0ZMT0FUX09FUykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHR5cGUgZm9yIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAg
ICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAg
ICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81Cisg
ICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAorICAgICAgICAg
ICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0IgZm9ybWF0Iik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQKKyAgICAgICAgICAgICYmIHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEKKyAgICAgICAgICAgICYm
IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIFJHQkEgZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgorICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1
cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9DT01QT05F
TlQgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQKKyAg
ICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIERFUFRIX0NPTVBPTkVO
VCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJl
IDAgZm9yIERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTDoKKyAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhfU1RFTkNJTCBub3QgZW5hYmxl
ZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0
eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxldmVs
ID4gMCkgeworICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgbXVzdCBiZSAwIGZvciBERVBU
SF9TVEVOQ0lMIGZvcm1hdCIpOworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKQoreworICAgIGlmIChsZXZlbCA8IDApIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxldmVsIDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRDoKKyAgICAgICAgaWYgKGxldmVsID49IG1fbWF4VGV4dHVyZUxldmVsKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGlmIChs
ZXZlbCA+PSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGNo
ZWNrcyBpZiBsZXZlbCBpcyBsZWdhbCwgc28gd2UgcmV0dXJuIHRydWUgYW5kIGRvbid0CisgICAg
Ly8gZ2VuZXJhdGUgSU5WQUxJRF9FTlVNIGlmIHRhcmdldCBpcyBpbGxlZ2FsLgorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5j
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0
aW9uVHlwZSBmdW5jdGlvblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpCit7CisgICAgLy8gV2UgYWJz
b2x1dGVseSBoYXZlIHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24u
CisgICAgLy8gVGhlIHRleEltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBIVE1MSW1hZ2UsIGV0
Yy4gd2lsbCBwcm9kdWNlCisgICAgLy8gdGVtcG9yYXJ5IGRhdGEgYmFzZWQgb24gdGhpcyBjb21i
aW5hdGlvbiwgc28gaXQgbXVzdCBiZSBsZWdhbC4KKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zv
cm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSB8fCAhdmFsaWRh
dGVUZXhGdW5jTGV2ZWwoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBHQzNEaW50IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgPSBwb3coMi4wLCBt
X21heFRleHR1cmVMZXZlbCAtIDEgLSBsZXZlbCk7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAod2lkdGgg
PiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsIHx8IGhlaWdodCA+IG1heFRleHR1cmVTaXplRm9yTGV2
ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdl
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6CisgICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gVGV4U3ViSW1hZ2UyRCAmJiB3aWR0
aCAhPSBoZWlnaHQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCAhPSBoZWlnaHQgZm9y
IGN1YmUgbWFwIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gTm8gbmVlZCB0byBjaGVjayBoZWlnaHQgaGVyZS4gRm9yIHRleEltYWdlIHdpZHRoID09
IGhlaWdodC4KKyAgICAgICAgLy8gRm9yIHRleFN1YkltYWdlIHRoYXQgd2lsbCBiZSBjaGVja2Vk
IHdoZW4gY2hlY2tpbmcgeW9mZnNldCArIGhlaWdodCBpcyBpbiByYW5nZS4KKyAgICAgICAgaWYg
KHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
IndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UgZm9yIGN1YmUgbWFwIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChib3JkZXIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJv
cmRlciAhPSAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Rh
dGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IGxldmVsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9z
aXRpb24gZGlzcG9zaXRpb24pCit7CisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgaWYgKGRp
c3Bvc2l0aW9uID09IE51bGxBbGxvd2VkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZv
cm1hdCwgdHlwZSwgbGV2ZWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2YWxp
ZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURToKKyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpT
Qzo6VHlwZVVpbnQ4KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURf
QllURSBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkg
IT0gSlNDOjpUeXBlVWludDE2KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5T
SUdORURfU0hPUlQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWludDE2QXJyYXkiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKKyAgICAgICAg
aWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZUZsb2F0MzIpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAidHlwZSBGTE9BVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBGbG9hdDMy
QXJyYXkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VT
X3RleHR1cmVfaGFsZl9mbG9hdAorICAgICAgICAvLyBBcyBwZXIgdGhlIHNwZWNpZmljYXRpb24s
IEFycmF5QnVmZmVyVmlldyBzaG91bGQgYmUgbnVsbCB3aGVuCisgICAgICAgIC8vIE9FU190ZXh0
dXJlX2hhbGZfZmxvYXQgaXMgZW5hYmxlZC4KKyAgICAgICAgaWYgKHBpeGVscykgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEhBTEZfRkxPQVRfT0VTIGJ1dCBBcnJheUJ1ZmZlclZp
ZXcgaXMgbm90IE5VTEwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkOworICAgIEdD
M0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQs
IHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVp
cmVkLCAwKTsKKyAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgZGltZW5zaW9ucyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgeworICAgICAg
ICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkgeworICAgICAgICAgIGVycm9yID0gbV9jb250
ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQs
IDEsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsIDApOworICAgICAgICAgIGlmIChwaXhlbHMtPmJ5dGVM
ZW5ndGgoKSA9PSB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0IHdpdGggVU5QQUNL
X0FMSUdOTUVOVCA+IDEiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJp
ZyBlbm91Z2ggZm9yIHJlcXVlc3QiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
Q29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQpCit7CisgICAgcmV0dXJuIG1fY29t
cHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMpCit7CisgICAgaWYgKCFwaXhl
bHMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgaW50IGJ5dGVzUmVxdWlyZWQgPSAwOworCisgICAgc3dpdGNo
IChmb3JtYXQpIHsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQl9BTUQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKKyAgICAgICAg
ICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7CisgICAgICAgICAgICBjb25zdCBpbnQga0Js
b2NrSGVpZ2h0ID0gNDsKKyAgICAgICAgICAgIGludCBudW1CbG9ja3NBY3Jvc3MgPSAod2lkdGgg
KyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lkdGg7CisgICAgICAgICAgICBpbnQgbnVtQmxv
Y2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAvIGtCbG9ja0hlaWdodDsKKyAg
ICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3du
ICoga0Jsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FNRDoKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBPTEFURURfQUxQSEFfQU1EOgor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDE2OworICAgICAg
ICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgICAgIGNvbnN0IGludCBr
QmxvY2tIZWlnaHQgPSA0OworICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9zcyA9ICh3aWR0
aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAgICAgIGludCBudW1C
bG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8ga0Jsb2NrSGVpZ2h0Owor
ICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51bUJsb2Nrc0Rv
d24gKiBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OworICAgICAgICAgICAgY29uc3Qg
aW50IGtCbG9ja1dpZHRoID0gODsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQg
PSA4OworICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwga0Jsb2Nr
V2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICogNCArIDcpIC8ga0Jsb2Nr
U2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tX
aWR0aCA9IDE2OworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDg7CisgICAg
ICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRoLCBrQmxvY2tXaWR0aCkgKiBz
dGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiAyICsgNykgLyBrQmxvY2tTaXplOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgZm9ybWF0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
cGl4ZWxzLT5ieXRlTGVuZ3RoKCkgIT0gYnl0ZXNSZXF1aXJlZCkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibGVuZ3RoIG9mIEFycmF5QnVmZmVyVmlldyBpcyBub3QgY29ycmVjdCBmb3IgZGltZW5zaW9u
cyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1l
bnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDVfRVhUOiB7CisgICAgICAgIGNvbnN0IEdDM0RzaXplaSBrQmxvY2tXaWR0
aCA9IDQ7CisgICAgICAgIGNvbnN0IEdDM0RzaXplaSBrQmxvY2tIZWlnaHQgPSA0OworICAgICAg
ICBjb25zdCBHQzNEaW50IG1heFRleHR1cmVTaXplID0gdGFyZ2V0ID8gbV9tYXhUZXh0dXJlU2l6
ZSA6IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOworICAgICAgICBjb25zdCBHQzNEc2l6ZWkgbWF4
Q29tcHJlc3NlZERpbWVuc2lvbiA9IG1heFRleHR1cmVTaXplID4+IGxldmVsOworICAgICAgICBi
b29sIHdpZHRoVmFsaWQgPSAobGV2ZWwgJiYgd2lkdGggPT0gMSkgfHwgKGxldmVsICYmIHdpZHRo
ID09IDIpIHx8ICghKHdpZHRoICUga0Jsb2NrV2lkdGgpICYmIHdpZHRoIDw9IG1heENvbXByZXNz
ZWREaW1lbnNpb24pOworICAgICAgICBib29sIGhlaWdodFZhbGlkID0gKGxldmVsICYmIGhlaWdo
dCA9PSAxKSB8fCAobGV2ZWwgJiYgaGVpZ2h0ID09IDIpIHx8ICghKGhlaWdodCAlIGtCbG9ja0hl
aWdodCkgJiYgaGVpZ2h0IDw9IG1heENvbXByZXNzZWREaW1lbnNpb24pOworICAgICAgICBpZiAo
IXdpZHRoVmFsaWQgfHwgIWhlaWdodFZhbGlkKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
IndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgorICAgICAg
ICAvLyBIZWlnaHQgYW5kIHdpZHRoIG11c3QgYmUgcG93ZXJzIG9mIDIuCisgICAgICAgIGlmICgo
d2lkdGggJiAod2lkdGggLSAxKSkgfHwgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lv
bnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIFdlYkdMVGV4dHVyZSogdGV4
KQoreworICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCkgeworICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgInhvZmZzZXQgb3IgeW9mZnNldCA8IDAiKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfRVhUOiB7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7Cisg
ICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OworICAgICAgICBpZiAoKHhvZmZzZXQg
JSBrQmxvY2tXaWR0aCkgfHwgKHlvZmZzZXQgJSBrQmxvY2tIZWlnaHQpKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCBub3QgbXVsdGlwbGUgb2YgNCIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh3aWR0aCAt
IHhvZmZzZXQgPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICAgICB8fCBo
ZWlnaHQgLSB5b2Zmc2V0ID4gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsaWRhdGVDb21w
cmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCk7CisgICAgfQorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6IHsKKyAgICAgICAgaWYgKHhvZmZzZXQgfHwgeW9mZnNl
dCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IGFuZCB5b2Zmc2V0IG11c3Qg
YmUgemVybyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmICh3aWR0aCAhPSB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICAgICB8
fCBoZWlnaHQgIT0gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBtdXN0IG1hdGNoIGV4aXN0aW5nIGxldmVsIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbGlk
YXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsLCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVEcmF3TW9kZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCit7Cisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9JTlRTOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfU1RSSVA6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TElORV9MT09QOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVT
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgZHJhdyBtb2RlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxT
ZXR0aW5ncyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgaWYgKG1fc3RlbmNpbE1h
c2sgIT0gbV9zdGVuY2lsTWFza0JhY2sgfHwgbV9zdGVuY2lsRnVuY1JlZiAhPSBtX3N0ZW5jaWxG
dW5jUmVmQmFjayB8fCBtX3N0ZW5jaWxGdW5jTWFzayAhPSBtX3N0ZW5jaWxGdW5jTWFza0JhY2sp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmcm9udCBhbmQgYmFjayBzdGVuY2lscyBzZXR0aW5n
cyBkbyBub3QgbWF0Y2giKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RlbmNp
bEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmdW5jKQoreworICAgIHN3
aXRjaCAoZnVuYykgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFU1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TEVRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUFURVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6R0VRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVR
VUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PVEVRVUFMOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFMV0FZUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmdW5jdGlvbiIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cHJpbnRHTEVy
cm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIW1fbnVtR0xF
cnJvcnNUb0NvbnNvbGVBbGxvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAtLW1fbnVtR0xF
cnJvcnNUb0NvbnNvbGVBbGxvd2VkOworICAgIHByaW50V2FybmluZ1RvQ29uc29sZShtZXNzYWdl
KTsKKworICAgIGlmICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCisgICAgICAgIHBy
aW50V2FybmluZ1RvQ29uc29sZSgiV2ViR0w6IHRvbyBtYW55IGVycm9ycywgbm8gbW9yZSBlcnJv
cnMgd2lsbCBiZSByZXBvcnRlZCB0byB0aGUgY29uc29sZSBmb3IgdGhpcyBjb250ZXh0LiIpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cHJpbnRXYXJuaW5nVG9Db25zb2xlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIWNhbnZhcygpKQorICAgICAgICByZXR1
cm47CisgICAgY2FudmFzKCktPmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNv
dXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsIG1lc3NhZ2UpOworfQorCiti
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0
ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50KQoreworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDA6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RF
TkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBp
ZiAobV93ZWJnbERyYXdCdWZmZXJzCisgICAgICAgICAgICAmJiBhdHRhY2htZW50ID4gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwCisgICAgICAgICAgICAmJiBhdHRhY2htZW50
IDwgc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hN
RU5UMCArIGdldE1heENvbG9yQXR0YWNobWVudHMoKSkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50Iik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZVTkNfQUREOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfU1VCVFJB
Q1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19SRVZFUlNFX1NVQlRSQUNUOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIG1vZGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KQoreworICAgIGlmICgoKHNy
YyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgc3JjID09IEdyYXBoaWNz
Q29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCisgICAgICAgICAmJiAoZHN0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBkc3QgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpCisgICAgICAgIHx8ICgoZHN0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xPUiB8fCBkc3QgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKKyAgICAgICAgICAgICYmIChzcmMgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJp
bmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNhcCkKK3sK
KyAgICBzd2l0Y2ggKGNhcCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhF
UjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfVEVTVDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCBjYXBhYmlsaXR5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUp
Cit7CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYtPmxl
bmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgR0MzRHNp
emVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
Im5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFs
c2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCB2
b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAg
ICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxv
Y2F0aW9uLCBmYWxzZSwgdiwgc2l6ZSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWly
ZWRNaW5TaXplKQoreworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXki
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlm
b3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYt
PmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkg
cmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24gaXMgbm90IGZyb20gY3VycmVudCBwcm9n
cmFtIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCF2KSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGlmICh0cmFuc3Bvc2UpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRyYW5zcG9zZSBub3QgRkFM
U0UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc2l6ZSA8IHJlcXVp
cmVkTWluU2l6ZSB8fCAoc2l6ZSAlIHJlcXVpcmVkTWluU2l6ZSkpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgc2l6ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitXZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0g
MDsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlP
YmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLmdldCgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6CisgICAgICAgIGJ1ZmZlciA9
IG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8g
YnVmZmVyIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBzd2l0Y2ggKHVz
YWdlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVc6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RFlOQU1JQ19EUkFXOgorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKyAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHVzYWdlIik7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgIm5vIGltYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgY29uc3QgVVJMJiB1cmwgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+cmVzcG9uc2UoKS51cmwo
KTsKKyAgICBpZiAodXJsLmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgaW1hZ2UiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbihpbWFnZSkpIHsKKyAgICAg
ICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhU
TUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjYW52YXMgfHwgIWNh
bnZhcy0+YnVmZmVyKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGNhbnZhcyIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGNhbnZhcykp
IHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZpZGVvLT52aWRl
b0hlaWdodCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyB2aWRlbyIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVvKSkgeworICAg
ICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRl
eCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdD
M0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRy
aWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJp
YjAgdmFsdWVzLgorICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAg
ICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
bV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmYo
aW5kZXgsIHYwLCB2MSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAg
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVl
ID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07CisgICAgYXR0cmliVmFsdWUudmFsdWVbMF0g
PSB2MDsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVsxXSA9IHYxOworICAgIGF0dHJpYlZhbHVlLnZh
bHVlWzJdID0gdjI7CisgICAgYXR0cmliVmFsdWUudmFsdWVbM10gPSB2MzsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSBleHBl
Y3RlZFNpemUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoZnVuY3Rpb25OYW1l
LCBpbmRleCwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgZXhwZWN0ZWRTaXplKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
Im5vIGFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHNpemUgPCBleHBl
Y3RlZFNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMu
CisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBzd2l0Y2gg
KGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBtX2NvbnRleHQt
PnZlcnRleEF0dHJpYjFmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAyOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHYp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmRl
eCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBWZXJ0ZXhB
dHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XTsKKyAg
ICBhdHRyaWJWYWx1ZS5pbml0VmFsdWUoKTsKKyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgZXhw
ZWN0ZWRTaXplOyArK2lpKQorICAgICAgICBhdHRyaWJWYWx1ZS52YWx1ZVtpaV0gPSB2W2lpXTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIwKCkKK3sK
KyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUg
PSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOworICAg
IAorICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlcigpOworICAgIG1fY29u
dGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFN
SUNfRFJBVyk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIHN0YXRlLmJ1ZmZlckJpbmRp
bmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOworICAgIG1fY29udGV4dC0+ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IDA7
CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0gPSAwLjBmOworICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVsyXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSAxLjBm
OworICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7CisgICAgbV92ZXJ0ZXhB
dHRyaWIwVXNlZEJlZm9yZSA9IGZhbHNlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1WZXJ0ZXgpCit7CisgICAgY29u
c3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0g
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICBj
b25zdCBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVl
WzBdOworICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGJvb2wgdXNpbmdWZXJ0ZXhBdHRyaWIwID0gbV9jdXJyZW50UHJvZ3JhbS0+aXNVc2luZ1Zl
cnRleEF0dHJpYjAoKTsKKyAgICBpZiAodXNpbmdWZXJ0ZXhBdHRyaWIwKQorICAgICAgICBtX3Zl
cnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKKyAgICBpZiAoc3RhdGUuZW5hYmxlZCAmJiB1
c2luZ1ZlcnRleEF0dHJpYjApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXVzaW5n
VmVydGV4QXR0cmliMCAmJiAhbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSB0cnVlOworICAgIG1f
Y29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3Zl
cnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBHQzNEc2l6ZWlwdHIgYnVmZmVyRGF0
YVNpemUgPSAobnVtVmVydGV4ICsgMSkgKiA0ICogc2l6ZW9mKEdDM0RmbG9hdCk7CisgICAgaWYg
KGJ1ZmZlckRhdGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSkgeworICAgICAgICBt
X2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgYnVm
ZmVyRGF0YVNpemUsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAgICAg
ICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gYnVmZmVyRGF0YVNpemU7CisgICAgICAgIG1f
Zm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHVzaW5nVmVy
dGV4QXR0cmliMAorICAgICAgICAmJiAobV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwKKyAgICAg
ICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzBdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzBdCisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVsxXSAhPSBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJWYWx1ZVsxXQorICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMl0g
IT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KKyAgICAgICAgICAgIHx8IGF0dHJpYlZh
bHVlLnZhbHVlWzNdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdKSkgeworICAgICAg
ICBhdXRvIGJ1ZmZlckRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPEdDM0RmbG9hdFtdPigobnVtVmVy
dGV4ICsgMSkgKiA0KTsKKyAgICAgICAgZm9yIChHQzNEc2l6ZWkgaWkgPSAwOyBpaSA8IG51bVZl
cnRleCArIDE7ICsraWkpIHsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0XSA9IGF0dHJp
YlZhbHVlLnZhbHVlWzBdOworICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAxXSA9IGF0
dHJpYlZhbHVlLnZhbHVlWzFdOworICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAyXSA9
IGF0dHJpYlZhbHVlLnZhbHVlWzJdOworICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAz
XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOworICAgICAgICB9CisgICAgICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzBdID0gYXR0cmliVmFsdWUudmFsdWVbMF07CisgICAgICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gYXR0cmliVmFsdWUudmFsdWVbMV07CisgICAgICAg
IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gYXR0cmliVmFsdWUudmFsdWVbMl07Cisg
ICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gYXR0cmliVmFsdWUudmFsdWVb
M107CisgICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7CisgICAgICAg
IG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
LCAwLCBidWZmZXJEYXRhU2l6ZSwgYnVmZmVyRGF0YS5nZXQoKSk7CisgICAgfQorICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQs
IDAsIDAsIDApOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQoreworICAg
IGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0
ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7Cisg
ICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVG
RkVSLCBvYmplY3RPclplcm8oc3RhdGUuYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBt
X2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3RhdGUuc2l6ZSwgc3RhdGUudHlwZSwg
c3RhdGUubm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJpZGUsIHN0YXRlLm9mZnNldCk7Cisg
ICAgfQorICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSLCBvYmplY3RPclplcm8obV9ib3VuZEFycmF5QnVmZmVyLmdldCgpKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQorewor
ICAgIFJlZlB0cjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0cnVlLCAi
Iik7CisgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIG1fcmVzdG9yZUFs
bG93ZWQgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgIGlmIChtX2NvbnRleHRMb3N0
TW9kZSA9PSBSZWFsTG9zdENvbnRleHQgJiYgbV9yZXN0b3JlQWxsb3dlZCkKKyAgICAgICAgbV9y
ZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCgpCit7CisgICAgQVNTRVJUKG1fY29udGV4dExvc3Qp
OworICAgIGlmICghbV9jb250ZXh0TG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhl
IHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCB1bmxlc3MgdGhlIGRlZmF1bHQgYmVo
YXZpb3Igb2YgdGhlCisgICAgLy8gd2ViZ2xjb250ZXh0bG9zdCBldmVudCB3YXMgcHJldmVudGVk
IGVhcmxpZXIuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIG9mIHRoZSB3YXkgbV9yZXN0b3JlVGlt
ZXIgaXMgc2V0IHVwIGZvciByZWFsIHZzLiBzeW50aGV0aWMgbG9zdAorICAgIC8vIGNvbnRleHQg
ZXZlbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdGVzdCBzaG9ydC1jaXJj
dWl0aW5nCisgICAgLy8gdGhlIHJldHJ5IGxvb3AgZm9yIHJlYWwgY29udGV4dCBsb3N0IGV2ZW50
cy4KKyAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlu
dCBjb250ZXh0TG9zdFJlYXNvbiA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCk7CisKKyAgICBzd2l0Y2ggKGNvbnRleHRMb3N0UmVhc29uKSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I6CisgICAgICAgIC8vIFRoZSBH
cmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiBtaWdodCBub3QgZnVsbHkKKyAgICAgICAg
Ly8gc3VwcG9ydCBHTF9BUkJfcm9idXN0bmVzcyBzZW1hbnRpY3MgeWV0LiBBbHRlcm5hdGl2ZWx5
LCB0aGUKKyAgICAgICAgLy8gV0VCR0xfbG9zZV9jb250ZXh0IGV4dGVuc2lvbiBtaWdodCBoYXZl
IGJlZW4gdXNlZCB0byBmb3JjZQorICAgICAgICAvLyBhIGxvc3QgY29udGV4dC4KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkdVSUxUWV9DT05URVhUX1JFU0VUX0FSQjoK
KyAgICAgICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCBpZiB0aGlz
IGNvbnRleHQgd2FzCisgICAgICAgIC8vIGd1aWx0eSBvZiBjYXVzaW5nIHRoZSBncmFwaGljcyBy
ZXNldC4KKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250
ZW50IG9uIHRoZSBwYWdlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0byByZXNldDsgbm90IHJl
c3RvcmluZyB0aGUgY29udGV4dCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OklOTk9DRU5UX0NPTlRFWFRfUkVTRVRfQVJCOgorICAgICAgICAvLyBBbHdheXMgYWxs
b3cgdGhlIGNvbnRleHQgdG8gYmUgcmVzdG9yZWQuCisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCOgorICAgICAgICAvLyBXYXJu
LiBJZGVhbGx5LCBwcm9tcHQgdGhlIHVzZXIgdGVsbGluZyB0aGVtIHRoYXQgV2ViR0wKKyAgICAg
ICAgLy8gY29udGVudCBvbiB0aGUgcGFnZSBtaWdodCBoYXZlIGNhdXNlZCB0aGUgZ3JhcGhpY3Mg
Y2FyZCB0bworICAgICAgICAvLyByZXNldCBhbmQgYXNrIHRoZW0gd2hldGhlciB0aGV5IHdhbnQg
dG8gY29udGludWUgcnVubmluZworICAgICAgICAvLyB0aGUgY29udGVudC4gT25seSBpZiB0aGV5
IHNheSAieWVzIiBzaG91bGQgd2Ugc3RhcnQKKyAgICAgICAgLy8gYXR0ZW1wdGluZyB0byByZXN0
b3JlIHRoZSBjb250ZXh0LgorICAgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoIldBUk5JTkc6
IFdlYkdMIGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNz
IGNhcmQgdG8gcmVzZXQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgRnJhbWUqIGZy
YW1lID0gY2FudmFzKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5hbGxvd1dl
YkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHJldHVybjsKKyAgICBTY3JvbGxWaWV3KiByb290ID0gdmlldy0+cm9vdCgpOworICAg
IGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuOworICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cg
PSByb290LT5ob3N0V2luZG93KCk7CisgICAgaWYgKCFob3N0V2luZG93KQorICAgICAgICByZXR1
cm47CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZShtX2F0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKKyAgICBpZiAoIWNvbnRl
eHQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29udGV4dCkK
KyAgICAgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdChzZWNvbmRzQmV0d2VlblJl
c3RvcmVBdHRlbXB0cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIFRoaXMgbGlrZWx5
IHNob3VsZG4ndCBoYXBwZW4gYnV0IGlzIHRoZSBiZXN0IHdheSB0byByZXBvcnQgaXQgdG8gdGhl
IFdlYkdMIGFwcC4KKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgIiIsICJlcnJvciByZXN0b3JpbmcgY29udGV4dCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ29uc3RydWN0IGEgbmV3IGRyYXdpbmcg
YnVmZmVyIHdpdGggdGhlIG5ldyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+ZGlzY2FyZFJlc291cmNlcygpOwor
ICAgICAgICBEcmF3aW5nQnVmZmVyOjpQcmVzZXJ2ZURyYXdpbmdCdWZmZXIgcHJlc2VydmUgPSBt
X2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID8gRHJhd2luZ0J1ZmZlcjo6UHJlc2Vy
dmUgOiBEcmF3aW5nQnVmZmVyOjpEaXNjYXJkOworICAgICAgICBEcmF3aW5nQnVmZmVyOjpBbHBo
YVJlcXVpcmVtZW50IGFscGhhID0gbV9hdHRyaWJ1dGVzLmFscGhhID8gRHJhd2luZ0J1ZmZlcjo6
QWxwaGEgOiBEcmF3aW5nQnVmZmVyOjpPcGFxdWU7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9
IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShjb250ZXh0LmdldCgpLCBtX2RyYXdpbmdCdWZmZXItPnNp
emUoKSwgcHJlc2VydmUsIGFscGhhKTsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7
CisgICAgfQorCisgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbnRleHRMb3N0ID0g
ZmFsc2U7CisgICAgc2V0dXBGbGFncygpOworICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cisg
ICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkud2ViZ2xjb250ZXh0cmVzdG9yZWRFdmVudCwgZmFsc2UsIHRydWUsICIiKSk7Cit9
CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuc3VyZU5vdE51bGwoY29uc3QgU3Ry
aW5nJiB0ZXh0KSBjb25zdAoreworICAgIGlmICh0ZXh0LmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gV1RGOjplbXB0eVN0cmluZygpOworICAgIHJldHVybiB0ZXh0OworfQorCitXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUoaW50
IGNhcGFjaXR5KQorICAgIDogbV9idWZmZXJzKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPltdPihjYXBhY2l0eSkpCisgICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5
KQoreworfQorCitJbWFnZUJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1
ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGludCBp
OworICAgIGZvciAoaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyArK2kpIHsKKyAgICAgICAgSW1hZ2VC
dWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKCFidWYpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGJ1Zi0+bG9naWNhbFNpemUoKSAhPSBzaXplKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJ1YmJsZVRvRnJvbnQoaSk7CisgICAgICAg
IHJldHVybiBidWY7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0
ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAxKTsKKyAgICBpZiAoIXRlbXApCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGkgPSBzdGQ6Om1pbihtX2NhcGFjaXR5IC0gMSwgaSk7
CisgICAgbV9idWZmZXJzW2ldID0gV1RGOjptb3ZlKHRlbXApOworCisgICAgSW1hZ2VCdWZmZXIq
IGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKKyAgICBidWJibGVUb0Zyb250KGkpOworICAgIHJl
dHVybiBidWY7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZl
ckNhY2hlOjpidWJibGVUb0Zyb250KGludCBpZHgpCit7CisgICAgZm9yIChpbnQgaSA9IGlkeDsg
aSA+IDA7IC0taSkKKyAgICAgICAgbV9idWZmZXJzW2ldLnN3YXAobV9idWZmZXJzW2ktMV0pOwor
fQorCituYW1lc3BhY2UgeworCisgICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdDM0RlbnVtIGVy
cm9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU06CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURf
RU5VTSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU6Cisg
ICAgICAgICAgICByZXR1cm4gIklOVkFMSURfVkFMVUUiOworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJ
RF9PUEVSQVRJT04iOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVN
T1JZOgorICAgICAgICAgICAgcmV0dXJuICJPVVRfT0ZfTUVNT1JZIjsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046CisgICAgICAg
ICAgICByZXR1cm4gIklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMOgorICAgICAgICAgICAgcmV0
dXJuICJDT05URVhUX0xPU1RfV0VCR0wiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJXZWJHTCBFUlJPUiglMDR4KSIsIGVycm9yKTsKKyAgICAg
ICAgfQorICAgIH0KKworfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvciwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQ
cmVmZXJlbmNlIGRpc3BsYXkpCit7CisgICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNv
bGUgJiYgZGlzcGxheSA9PSBEaXNwbGF5SW5Db25zb2xlKSB7CisgICAgICBTdHJpbmcgc3RyID0g
U3RyaW5nKCJXZWJHTDogIikgKyBHZXRFcnJvclN0cmluZyhlcnJvcikgKyAgIjogIiArIFN0cmlu
ZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICBwcmlu
dEdMRXJyb3JUb0NvbnNvbGUoc3RyKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihlcnJvcik7Cit9CisKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50
R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciog
ZGVzY3JpcHRpb24pCit7CisgICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUpIHsK
KyAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsgU3RyaW5nKGZ1bmN0aW9u
TmFtZSkgKyAiOiAiICsgU3RyaW5nKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgcHJpbnRHTEVycm9y
VG9Db25zb2xlKHN0cik7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YXBwbHlTdGVuY2lsVGVzdCgpCit7CisgICAgYm9vbCBoYXZlU3RlbmNpbEJ1ZmZlciA9IGZhbHNl
OworCisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBoYXZlU3RlbmNpbEJ1
ZmZlciA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5oYXNTdGVuY2lsQnVmZmVyKCk7CisgICAgZWxz
ZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVzID0g
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBhdHRy
aWJ1dGVzLT5zdGVuY2lsKCk7CisgICAgfQorICAgIGVuYWJsZU9yRGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9URVNULAorICAgICAgICAgICAgICAgICAgICBtX3N0ZW5jaWxFbmFi
bGVkICYmIGhhdmVTdGVuY2lsQnVmZmVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5LCBib29sIGVuYWJsZSkKK3sK
KyAgICBpZiAoZW5hYmxlKQorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXBhYmlsaXR5KTsK
KyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXBhYmlsaXR5KTsKK30KKwor
SW50U2l6ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRDYW52YXNTaXplKCkKK3sKKyAg
ICByZXR1cm4gSW50U2l6ZShjbGFtcChjYW52YXMoKS0+d2lkdGgoKSwgMSwgbV9tYXhWaWV3cG9y
dERpbXNbMF0pLAorICAgICAgICAgICAgICAgICAgIGNsYW1wKGNhbnZhcygpLT5oZWlnaHQoKSwg
MSwgbV9tYXhWaWV3cG9ydERpbXNbMV0pKTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldE1heERyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZl
cnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heERyYXdCdWZmZXJzKQorICAg
ICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVS
U19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50
cykKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xP
Ul9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgIC8vIFdFQkdM
X2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMgPj0gTUFYX0RSQVdf
QlVGRkVSUy4KKyAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVmZmVycywgbV9tYXhDb2xv
ckF0dGFjaG1lbnRzKTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1h
eENvbG9yQXR0YWNobWVudHMoKQoreworICAgIGlmICghc3VwcG9ydHNEcmF3QnVmZmVycygpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykKKyAgICAg
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hN
RU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgIHJldHVybiBtX21heENvbG9y
QXR0YWNobWVudHM7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXRCYWNrRHJh
d0J1ZmZlcihHQzNEZW51bSBidWYpCit7CisgICAgbV9iYWNrRHJhd0J1ZmZlciA9IGJ1ZjsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIo
KQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCksIGVjKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50VGV4dHVyZTJE
KCkKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50
ZXh0dXJlMkRCaW5kaW5nLmdldCgpLCBlYyk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzdXBwb3J0c0RyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIW1fZHJhd0J1ZmZlcnNXZWJH
TFJlcXVpcmVtZW50c0NoZWNrZWQpIHsKKyAgICAgICAgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWly
ZW1lbnRzQ2hlY2tlZCA9IHRydWU7CisgICAgICAgIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQgPSBX
ZWJHTERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQodGhpcyk7CisgICAgfQorICAgIHJldHVybiBtX2Ry
YXdCdWZmZXJzU3VwcG9ydGVkOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJh
eXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwcmltY291bnQgPCAwKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0Fy
cmF5c0luc3RhbmNlZCIsICJwcmltY291bnQgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIXByaW1jb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisKKyAg
ICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xFUzJD
b21wbGlhbnQoKSkKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVy
dGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmlj
dCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0YW5j
ZWQiLCB0cnVlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJpbWNvdW50KTsKKyAgICBtX2NvbnRleHQt
PmRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOworICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAg
ICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYg
KCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3Mo
ImRyYXdBcnJheXNJbnN0YW5jZWQiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHNJbnN0YW5jZWQo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcg
b2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
ID0gMDsKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJbnN0YW5j
ZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cykpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChwcmltY291bnQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0VsZW1lbnRzSW5zdGFu
Y2VkIiwgInByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghcHJpbWNvdW50KSB7CisgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxpZGF0ZUluZGV4
QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQp
LCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0
ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlzR0xFUzJOUE9U
U3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRz
SW5zdGFuY2VkIiwgdHJ1ZSk7CisgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHNJbnN0YW5jZWQo
bW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIHByaW1j
b3VudCk7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVs
YXRlZCkKKyAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24o
KTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNv
bXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgZmFsc2UpOworICAgIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaW5k
ZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliRGl2aXNvciIsICJp
bmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYm91
bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNv
cik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5k
ZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDYyMzcgKzI2LDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wp
Ci0KLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKLQotI2luY2x1ZGUgIkFOR0xF
SW5zdGFuY2VkQXJyYXlzLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJE
T01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVYVFNoYWRlclRl
eHR1cmVMT0QuaCIKLSNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50
U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYWluRnJhbWUuaCIKLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVpbnQu
aCIKLSNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVkZSAiT0VTVGV4
dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgiCi0jaW5jbHVk
ZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXIuaCIKLSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgotI2luY2x1ZGUgIlBh
Z2UuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2lu
Y2x1ZGUgIldlYkdMQWN0aXZlSW5mby5oIgotI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5j
bHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RD
LmgiCi0jaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIldlYkdM
Q29udGV4dEV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNpbmNsdWRl
ICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMu
aCIKLSNpbmNsdWRlICJXZWJHTERlcHRoVGV4dHVyZS5oIgotI2luY2x1ZGUgIldlYkdMRHJhd0J1
ZmZlcnMuaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xM
b3NlQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldlYkdM
UmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKLSNpbmNsdWRlICJXZWJH
TFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIgotI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgotI2lu
Y2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0lu
bGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9VaW50MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgorI2luY2x1ZGUgIldlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1w
dHMgPSAxLjA7Ci1jb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2Owot
Ci1uYW1lc3BhY2UgewotCi0gICAgY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciB7Ci0g
ICAgcHVibGljOgotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKERyYXdpbmdCdWZm
ZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyQmluZGluZykK
LSAgICAgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCi0gICAgICAgICAg
ICAsIG1fZnJhbWVidWZmZXJCaW5kaW5nKGZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3Ig
bXVsdGlzYW1wbGluZykKLSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQK
LSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgICAgICB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7Ci0g
ICAgICAgIFdlYkdMRnJhbWVidWZmZXIqIG1fZnJhbWVidWZmZXJCaW5kaW5nOwotICAgIH07Ci0K
LSAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwotICAg
IH0KLQotICAgIHZvaWQgY2xpcDFEKEdDM0RpbnQgc3RhcnQsIEdDM0RzaXplaSByYW5nZSwgR0Mz
RHNpemVpIHNvdXJjZVJhbmdlLCBHQzNEaW50KiBjbGlwcGVkU3RhcnQsIEdDM0RzaXplaSogY2xp
cHBlZFJhbmdlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlwcGVk
UmFuZ2UpOwotICAgICAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgICAgICByYW5nZSArPSBz
dGFydDsKLSAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICAgICAgfQotICAgICAgICBHQzNEaW50
IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7Ci0gICAgICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkKLSAg
ICAgICAgICAgIHJhbmdlIC09IGVuZCAtIHNvdXJjZVJhbmdlOwotICAgICAgICAqY2xpcHBlZFN0
YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXR1cm5zIGZhbHNlIGlmIG5vIGNsaXBwaW5nIGlzIG5lY2Vzc2FyeSwgaS5lLiwgeCwg
eSwgd2lkdGgsIGhlaWdodCBzdGF5IHRoZSBzYW1lLgotICAgIGJvb2wgY2xpcDJEKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0LAot
ICAgICAgICAgICAgICAgIEdDM0RpbnQqIGNsaXBwZWRYLCBHQzNEaW50KiBjbGlwcGVkWSwgR0Mz
RHNpemVpKiBjbGlwcGVkV2lkdGgsIEdDM0RzaXplaSpjbGlwcGVkSGVpZ2h0KQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBwZWRZICYmIGNsaXBwZWRXaWR0aCAmJiBjbGlw
cGVkSGVpZ2h0KTsKLSAgICAgICAgY2xpcDFEKHgsIHdpZHRoLCBzb3VyY2VXaWR0aCwgY2xpcHBl
ZFgsIGNsaXBwZWRXaWR0aCk7Ci0gICAgICAgIGNsaXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhlaWdo
dCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICByZXR1cm4gKCpjbGlwcGVkWCAh
PSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlwcGVkV2lkdGggIT0gd2lkdGggfHwgKmNsaXBw
ZWRIZWlnaHQgIT0gaGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBHQzNEaW50IGNsYW1wKEdDM0RpbnQg
dmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZSA8IG1pbikKLSAgICAgICAgICAgIHZhbHVlID0gbWluOwotICAgICAgICBpZiAodmFsdWUgPiBt
YXgpCi0gICAgICAgICAgICB2YWx1ZSA9IG1heDsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLQotICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhlIEFT
Q0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCi0gICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9u
IDMuMS4KLSAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKLSAgICB7
Ci0gICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQgYCBA
IFwgJyBERUwuCi0gICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2Ci0gICAgICAgICAgICAm
JiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9ICdc
XCcgJiYgYyAhPSAnXCcnKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIC8vIEhv
cml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJyaWFn
ZSByZXR1cm4KLSAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCi0gICAgICAgIGlmIChjID49IDkg
JiYgYyA8PSAxMykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ByZWZpeFJlc2VydmVkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImdsXyIpIHx8IG5hbWUuc3Rh
cnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJfd2ViZ2xfIikpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFN0cmlwcyBjb21tZW50cyBmcm9tIHNoYWRlciB0ZXh0LiBUaGlzIGFsbG93cyBub24tQVNDSUkg
Y2hhcmFjdGVycwotICAgIC8vIHRvIGJlIHVzZWQgaW4gY29tbWVudHMgd2l0aG91dCBwb3RlbnRp
YWxseSBicmVha2luZyBPcGVuR0wKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVjdGlu
ZyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgotICAgIGNsYXNzIFN0cmlwQ29t
bWVudHMgewotICAgIHB1YmxpYzoKLSAgICAgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJpbmcm
IHN0cikKLSAgICAgICAgICAgIDogbV9wYXJzZVN0YXRlKEJlZ2lubmluZ09mTGluZSkKLSAgICAg
ICAgICAgICwgbV9zb3VyY2VTdHJpbmcoc3RyKQotICAgICAgICAgICAgLCBtX2xlbmd0aChzdHIu
bGVuZ3RoKCkpCi0gICAgICAgICAgICAsIG1fcG9zaXRpb24oMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcGFyc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyByZXN1bHQoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAg
IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHBhcnNlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgd2hpbGUgKGhhc01vcmVDaGFyYWN0ZXJzKCkpIHsKLSAgICAgICAgICAgICAgICBwcm9jZXNz
KGN1cnJlbnQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcHJvY2VzcygpIG1pZ2h0IGFkdmFuY2Ug
dGhlIHBvc2l0aW9uLgotICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlQ2hhcmFjdGVycygpKQot
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHByb2Nlc3MoVUNoYXIpOwotCi0gICAgICAgIGJvb2wgcGVlayhVQ2hh
ciYgY2hhcmFjdGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9wb3NpdGlv
biArIDEgPj0gbV9sZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBVQ2hhciBjdXJyZW50KCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04obV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NvdXJj
ZVN0cmluZ1ttX3Bvc2l0aW9uXTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYWR2YW5jZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxpemUgbmV3bGluZSByZWxhdGVk
IGNoYXJhY3RlcnMuCi0gICAgICAgICAgICByZXR1cm4gKGNoYXJhY3RlciA9PSAnXG4nIHx8IGNo
YXJhY3RlciA9PSAnXHInKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZW1pdChVQ2hhciBj
aGFyYWN0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoY2hhcmFj
dGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudW0gUGFyc2VTdGF0ZSB7Ci0gICAgICAgICAg
ICAvLyBIYXZlIG5vdCBzZWVuIGFuIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB5ZXQg
b24KLSAgICAgICAgICAgIC8vIHRoaXMgbGluZS4gUG9zc2libGUgdGhhdCB3ZSBtaWdodCBzZWUg
YSBwcmVwcm9jZXNzb3IKLSAgICAgICAgICAgIC8vIGRpcmVjdGl2ZS4KLSAgICAgICAgICAgIEJl
Z2lubmluZ09mTGluZSwKLQotICAgICAgICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9uZSBB
U0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIKLSAgICAgICAgICAgIC8vIG9uIHRoaXMgbGlu
ZS4KLSAgICAgICAgICAgIE1pZGRsZU9mTGluZSwKLQotICAgICAgICAgICAgLy8gSGFuZGxpbmcg
YSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBQYXNzZXMgdGhyb3VnaCBhbGwKLSAgICAgICAgICAg
IC8vIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRGlzYWJsZXMgY29tbWVu
dAotICAgICAgICAgICAgLy8gcHJvY2Vzc2luZy4KLSAgICAgICAgICAgIEluUHJlcHJvY2Vzc29y
RGlyZWN0aXZlLAotCi0gICAgICAgICAgICAvLyBIYW5kbGluZyBhIHNpbmdsZS1saW5lIGNvbW1l
bnQuIFRoZSBjb21tZW50IHRleHQgaXMKLSAgICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGggYSBz
aW5nbGUgc3BhY2UuCi0gICAgICAgICAgICBJblNpbmdsZUxpbmVDb21tZW50LAotCi0gICAgICAg
ICAgICAvLyBIYW5kbGluZyBhIG11bHRpLWxpbmUgY29tbWVudC4gTmV3bGluZXMgYXJlIHBhc3Nl
ZAotICAgICAgICAgICAgLy8gdGhyb3VnaCB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCi0gICAg
ICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKLSAgICAgICAgfTsKLQotICAgICAgICBQYXJzZVN0
YXRlIG1fcGFyc2VTdGF0ZTsKLSAgICAgICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOwotICAgICAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKLSAgICAg
ICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7Ci0gICAgfTsKLQotICAgIHZvaWQgU3RyaXBDb21t
ZW50czo6cHJvY2VzcyhVQ2hhciBjKQotICAgIHsKLSAgICAgICAgaWYgKGlzTmV3bGluZShjKSkg
ewotICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgc3RhdGUgd2UgYXJlIGluLCBwYXNzIHRo
cm91Z2ggbmV3bGluZXMKLSAgICAgICAgICAgIC8vIHNvIHdlIHByZXNlcnZlIGxpbmUgbnVtYmVy
cy4KLSAgICAgICAgICAgIGVtaXQoYyk7Ci0KLSAgICAgICAgICAgIGlmIChtX3BhcnNlU3RhdGUg
IT0gSW5NdWx0aUxpbmVDb21tZW50KQotICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEJl
Z2lubmluZ09mTGluZTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgVUNoYXIgdGVtcCA9IDA7Ci0gICAgICAgIHN3aXRjaCAobV9wYXJzZVN0YXRlKSB7Ci0gICAg
ICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgotICAgICAgICAgICAgaWYgKFdURjo6aXNBU0NJSVNw
YWNlKGMpKSB7Ci0gICAgICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGMgPT0gJyMnKSB7Ci0gICAgICAg
ICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7Ci0gICAgICAg
ICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhhbmRs
ZSBjaGFyYWN0ZXIuCi0gICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7Ci0g
ICAgICAgICAgICBwcm9jZXNzKGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBNaWRkbGVPZkxpbmU6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1wKSkg
ewotICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgewotICAgICAgICAgICAgICAgICAg
ICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OwotICAgICAgICAgICAgICAgICAg
ICBlbWl0KCcgJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHRlbXAgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluTXVs
dGlMaW5lQ29tbWVudDsKLSAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgY29tbWVudCBz
dGFydCBpbiBjYXNlIHRoZSB1c2VyIGhhcwotICAgICAgICAgICAgICAgICAgICAvLyBhbiB1bmNs
b3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCi0gICAgICAgICAgICAgICAgICAgIC8v
IHNpZ25hbCBhbiBlcnJvci4KLSAgICAgICAgICAgICAgICAgICAgZW1pdCgnLycpOwotICAgICAg
ICAgICAgICAgICAgICBlbWl0KCcqJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBlbWl0KGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKLSAgICAgICAgICAgIC8vIE5vIG1hdHRl
ciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBpdAotICAgICAgICAgICAgLy8gdGhy
b3VnaC4gRG8gbm90IHBhcnNlIGNvbW1lbnRzIGluIHRoaXMgc3RhdGUuIFRoaXMKLSAgICAgICAg
ICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gbG9uZyB0ZXJtLCBidXQg
aXQKLSAgICAgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNlcnJvciBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlLgotICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKLSAgICAgICAgICAgIC8vIFRoZSBuZXds
aW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUKLSAgICAgICAg
ICAgIC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBnZXQgb3V0IG9mIHRoZQotICAg
ICAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxvdyBhbGwgb3RoZXIgY2hhcmFj
dGVycy4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5NdWx0aUxpbmVDb21t
ZW50OgotICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9PSAn
LycpIHsKLSAgICAgICAgICAgICAgICBlbWl0KCcqJyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgn
LycpOwotICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKLSAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuIFVuY2xl
YXIgd2hldGhlciB3ZSBtYXkKLSAgICAgICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0IGVt
aXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQotICAgICAgICAgICAgLy8gdG8gcHJlc2Vy
dmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCi0KLWNsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0NvbnRl
eHQzRDo6Q29udGV4dExvc3RDYWxsYmFjayB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNr
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNiKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlIHsgbV9jb250ZXh0LT5mb3JjZUxvc3RD
b250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6UmVhbExvc3RDb250ZXh0KTsgfQotICAgIHZp
cnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaygpIHt9Ci1wcml2YXRlOgot
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwotfTsKLQotY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3Nh
Z2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
R0MzRGludCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPm1fc3ludGhl
c2l6ZWRFcnJvcnNUb0NvbnNvbGUpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnByaW50R0xFcnJv
clRvQ29uc29sZShtZXNzYWdlKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdD
b250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0KLXByaXZhdGU6Ci0gICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7Ci19OwotCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKiBhdHRycykKLXsKLSAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlvbiBv
ZiBhIG5ldyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCi0gICAg
Ly8gcGFydGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3JlIHRp
bWVzIHZpYSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgotICAgIGlmICghZnJhbWUt
PmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xFbmFi
bGVkKCkpKSB7Ci0gICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZh
bHNlLCB0cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdMIGNv
bnRleHQuIikpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBib29sIGlz
UGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxzZTsKLSAgICBEb2N1bWVudCYgdG9wRG9jdW1l
bnQgPSBkb2N1bWVudC50b3BEb2N1bWVudCgpOwotICAgIFBhZ2UqIHBhZ2UgPSB0b3BEb2N1bWVu
dC5wYWdlKCk7Ci0gICAgaWYgKHBhZ2UgJiYgIXRvcERvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxl
KCkpIHsKLSAgICAgICAgV2ViR0xMb2FkUG9saWN5IHBvbGljeSA9IHBhZ2UtPm1haW5GcmFtZSgp
LmxvYWRlcigpLmNsaWVudCgpLndlYkdMUG9saWN5Rm9yVVJMKHRvcERvY3VtZW50LnVybCgpKTsK
LQotICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikgewotICAgICAgICAg
ICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBpcyB0byBibG9jayBX
ZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwb2xpY3kgPT0g
V2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIldlYkdMIHBv
bGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRlci4iKTsKLSAgICAg
ICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGF0dHJz
ID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCk7
Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+
c2V0dGluZ3MoKS5vcGVuR0xNdWx0aXNhbXBsaW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgYXR0
cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBhdHRyaWJ1dGVzLm5vRXh0
ZW5zaW9ucyA9IHRydWU7Ci0gICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOwot
ICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB0cnVlOwotCi0gICAgaWYgKGZyYW1l
LT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVXZWJHTFJlbmRlcmluZygpKQotICAgICAgICBhdHRy
aWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5kZXJlciA9IHRydWU7Ci0KLSAgICBpZiAocGFnZSkKLSAg
ICAgICAgYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvID0gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKTsKLQotICAgIGlmIChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIExP
RyhXZWJHTCwgIkNyZWF0ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQgd2ls
bCByZXF1aXJlIGEgcG9saWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKLSAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOwotICAgICAgICByZW5kZXJp
bmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmluZ0Nv
bnRleHQ7Ci0gICAgfQotCi0gICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50LnZp
ZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCk7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRv
dykpOwotCi0gICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkgewotICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxzZSwg
dHJ1ZSwgIkNvdWxkIG5vdCBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xf
RVhUX2RlYnVnX21hcmtlciIpKQotICAgICAgICBleHRlbnNpb25zLT5wdXNoR3JvdXBNYXJrZXJF
WFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
UmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOwotICAgIHJlbmRlcmluZ0NvbnRleHQt
PnN1c3BlbmRJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Ci19Ci0K
LVdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNF
bGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKLSAgICAs
IEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFzLT5kb2N1bWVudCgpKQotICAgICwgbV9jb250
ZXh0KDApCi0gICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKLSAgICAsIG1fZGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNoQ29u
dGV4dExvc3RFdmVudCkKLSAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCi0gICAgLCBtX3Jl
c3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29u
dGV4dCkKLSAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQotICAgICwgbV9jb250ZXh0TG9z
dChmYWxzZSkKLSAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQot
ICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgLCBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlKHRydWUpCi0gICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZChtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCi0gICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24odHJ1ZSkKLSAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKLXsK
LX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENh
bnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQot
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCi0gICAgLCBBY3RpdmVE
T01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fY29udGV4dChjb250
ZXh0KQotICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCi0gICAgLCBtX2Rpc3BhdGNoQ29udGV4dExv
c3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRl
eHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQotICAgICwgbV9yZXN0
b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRl
eHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoNCkKLSAgICAsIG1fY29udGV4dExvc3Qo
ZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAg
ICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9zeW50aGVzaXplZEVycm9yc1Rv
Q29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4R0xF
cnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KGZhbHNlKQotICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQotewot
ICAgIEFTU0VSVChtX2NvbnRleHQpOwotICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250ZXh0
R3JvdXA6OmNyZWF0ZSgpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMpOwot
Ci0gICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0RGltc1sxXSA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JU
X0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotCi0gICAgc2V0dXBGbGFncygpOwotICAg
IGluaXRpYWxpemVOZXdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0KTsK
LSAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFs
c2U7Ci0gICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7Ci0gICAgbV9wYWNrQWxpZ25tZW50ID0g
NDsKLSAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbV91bnBhY2tGbGlwWSA9IGZhbHNl
OwotICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOwotICAgIG1fdW5wYWNrQ29s
b3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dF
QkdMOwotICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7Ci0gICAgbV9jdXJyZW50UHJvZ3JhbSA9
IDA7Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgIG1fcmVuZGVyYnVmZmVyQmlu
ZGluZyA9IDA7Ci0gICAgbV9kZXB0aE1hc2sgPSB0cnVlOwotICAgIG1fc3RlbmNpbEVuYWJsZWQg
PSBmYWxzZTsKLSAgICBtX3N0ZW5jaWxNYXNrID0gMHhGRkZGRkZGRjsKLSAgICBtX3N0ZW5jaWxN
YXNrQmFjayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsRnVuY1JlZiA9IDA7Ci0gICAgbV9z
dGVuY2lsRnVuY1JlZkJhY2sgPSAwOwotICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZGRkZG
RjsKLSAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAweEZGRkZGRkZGOwotICAgIG1fbGF5ZXJD
bGVhcmVkID0gZmFsc2U7Ci0gICAgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7Ci0gICAgCi0gICAgbV9jbGVhckNvbG9yWzBdID0gbV9j
bGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsKLSAg
ICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgbV9jbGVhckRlcHRoID0gMTsKLSAgICBt
X2NsZWFyU3RlbmNpbCA9IDA7Ci0gICAgbV9jb2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9
IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOwotCi0gICAgR0MzRGludCBu
dW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywg
Jm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIG1fdGV4dHVyZVVuaXRzLmNsZWFy
KCk7Ci0gICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpOwotCi0gICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZudW1W
ZXJ0ZXhBdHRyaWJzKTsKLSAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJz
OwotICAgIAotICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVT
aXplKTsKLSAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVs
Q291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZSk7Ci0gICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21w
dXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4dHVy
ZVNpemUpOwotICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAmbV9t
YXhSZW5kZXJidWZmZXJTaXplKTsKLQotICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRf
ZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4KLSAgICBtX21heERyYXdCdWZmZXJzID0g
MDsKLSAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOwotCi0gICAgbV9iYWNrRHJhd0J1ZmZl
ciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOwotICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVp
cmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKLSAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gZmFs
c2U7Ci0KLSAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9UeXBl
RGVmYXVsdCk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVj
dC5nZXQoKSk7Ci0gICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4
QXJyYXlPYmplY3Q7Ci0gICAgCi0gICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9tYXhW
ZXJ0ZXhBdHRyaWJzKTsKLQotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxp
YW50KCkpCi0gICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7Ci0KLSAgICBJbnRTaXplIGNhbnZh
c1NpemUgPSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoY2FudmFzU2l6ZSk7Ci0KLSAgICBtX2NvbnRl
eHQtPnJlc2hhcGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKLSAg
ICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6
ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250ZXh0LT5zY2lzc29yKDAsIDAsIGNhbnZhc1NpemUud2lk
dGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBtX2NvbnRleHQtPnNldENvbnRleHRM
b3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2Fs
bGJhY2s+KHRoaXMpKTsKLSAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKHN0
ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s+
KHRoaXMpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3MoKQot
ewotICAgIEFTU0VSVChtX2NvbnRleHQpOwotCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMo
KS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNv
bGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwotCi0g
ICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7Ci0g
ICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fc3RyaWN0X2F0dHJpYnMiKTsK
LSAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5h
YmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOwotICAgIGlmIChtX2lzR0xFUzJDb21w
bGlhbnQpIHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7Ci0gICAgICAgIG1f
aXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNF
bmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5p
c0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28iKTsKLSAgICAgICAgbV9p
c0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0Vu
YWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIH0KLSAgICBtX2lzUm9i
dXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJs
ZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3QKLXsKLSAgICBpZiAoUGFnZSogcGFn
ZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIHBhZ2UtPnNl
dHRpbmdzKCkucHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb21wcmVzc2VkVGV4
dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgaWYgKCFtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQotICAgICAgICBtX2NvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+V2Vi
R0xSZW5kZXJpbmdDb250ZXh0KCkKLXsKLSAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8g
V2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRoZSBsYXN0IHJlZmVyZW5jZQotICAgIC8vIHRo
ZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxhc3QgY29udGV4dCBpcyByZW1vdmVkIGZyb20g
dGhlIGNvbnRleHQgZ3JvdXAuCi0gICAgbV9ib3VuZEFycmF5QnVmZmVyID0gbnVsbHB0cjsKLSAg
ICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBudWxs
cHRyOwotICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxscHRyOwotICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nID0gbnVsbHB0cjsKLSAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkg
ewotICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsK
LSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKLSAgICBtX2JsYWNr
VGV4dHVyZUN1YmVNYXAgPSBudWxscHRyOwotCi0gICAgaWYgKCFtX2lzUGVuZGluZ1BvbGljeVJl
c29sdXRpb24pIHsKLSAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwotICAgICAg
ICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLSAgICAgICAgbV9jb250ZXh0R3JvdXAtPnJl
bW92ZUNvbnRleHQodGhpcyk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xp
Y3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgZHJhd2luZyBidWZm
ZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAot
ICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KLSAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKLQotICAg
IGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENhbGxi
YWNrKG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQotewotICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5t
YXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+bWFya0NvbnRlbnRzQ2hhbmdlZCgpOwotCi0gICAgbV9sYXllckNs
ZWFyZWQgPSBmYWxzZTsKLSAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5k
ZXJCb3goKTsKLSAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiByZW5kZXJC
b3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewotICAgICAgICBtX21hcmtlZENhbnZh
c0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAg
ICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAgICAgICAgIG1f
bWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwotICAgICAgICAgICAgY2FudmFzKCktPmRpZERyYXco
RmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZDb21w
b3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9jb250ZXh0LT5sYXll
ckNvbXBvc2l0ZWQoKSB8fCBtX2xheWVyQ2xlYXJlZAotICAgICAgICB8fCBtX2F0dHJpYnV0ZXMu
cHJlc2VydmVEcmF3aW5nQnVmZmVyIHx8IChtYXNrICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXM+IGNvbnRleHRBdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIC8v
IERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2Vy
IGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KLSAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBtYXNr
ICYmICFtX3NjaXNzb3JFbmFibGVkOwotCi0gICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNr
ICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQotICAgICAgICBtX2NvbnRl
eHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29sb3Jb
MV0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0gPyBt
X2NsZWFyQ29sb3JbMl0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
ck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKLSAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzLT5kZXB0aCgpKSB7Ci0gICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0aE1h
c2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQotICAg
ICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOwotICAgICAgICBjbGVhck1hc2sg
fD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgICAgIG1fY29udGV4
dC0+ZGVwdGhNYXNrKHRydWUpOwotICAgIH0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPnN0
ZW5jaWwoKSkgewotICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgICAgICAgICAgbV9jb250ZXh0LT5j
bGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAgIGNsZWFy
TWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotICAgICAgICBt
X2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCAw
eEZGRkZGRkZGKTsKLSAgICB9Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVmZmVycyhjbGVhck1hc2spOwotICAgIGVsc2Ugewot
ICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwotICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7Ci0gICAgfQotCi0gICAgcmVzdG9yZVN0
YXRlQWZ0ZXJDbGVhcigpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBtX2xheWVy
Q2xlYXJlZCA9IHRydWU7Ci0KLSAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQotewotICAgIC8v
IFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgotICAgIGlmIChtX3NjaXNz
b3JFbmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNvbG9yWzBd
LCBtX2NsZWFyQ29sb3JbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJDb2xv
clsyXSwgbV9jbGVhckNvbG9yWzNdKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhtX2NvbG9y
TWFza1swXSwgbV9jb2xvck1hc2tbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
ck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgobV9j
bGVhckRlcHRoKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCk7
Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVCwgbV9zdGVuY2lsTWFzayk7Ci0gICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0aE1h
c2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0xheWVyQ29tcG9zaXRl
ZCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQotICAgICAgICBjYW52YXMoKS0+Y2xl
YXJQcmVzZW50YXRpb25Db3B5KCk7Ci0KLSAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlzIHdyaXR0
ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAotICAgIC8vIGhhcHBlbmVk
IGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21wb3Np
dG9yLgotICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFtX2F0dHJpYnV0
ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+cGFpbnRDb21w
b3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7Ci0KLSAgICAgICAgY2Fu
dmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbnZh
cygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwot
Ci0gICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAgICBtX21h
cmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBtX2RyYXdpbmdCdWZmZXIu
Z2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2RyYXdp
bmdCdWZmZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IGxldmVsIHdlIGRvbid0Ci0gICAgLy8ga25vdyBpZiB0aGUgdW5kZXJseWlu
ZyBGQk8gdXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgotICAgIEdDM0RpbnQgbWF4U2l6
ZSA9IHN0ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7Ci0g
ICAgLy8gTGltaXQgZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkgZXho
YXVzdGlvbi4KLSAgICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OwotICAgIG1heFNp
emUgPSBzdGQ6Om1pbihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7Ci0gICAgR0MzRGludCBtYXhX
aWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKLSAgICBHQzNE
aW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFdKTsK
LSAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7Ci0gICAgaGVpZ2h0ID0gY2xh
bXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOwotCi0gICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsKLSAg
ICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7Ci0gICAg
ICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkpCi0gICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0NoYW5nZWQp
OwotICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV2UgZG9u
J3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXdseSBjcmVh
dGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCi0gICAgLy8gY2xlYXIgKGFuZCB0
aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgotICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpIHsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKLSAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwotICAgIH0gZWxzZQotICAg
ICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8o
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQo
KSkpOwotICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKSk7
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9m
cmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKLXsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKLQotICAg
IHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsK
LX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIG1fZHJhd2lu
Z0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotdW5zaWduZWQgaW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNob3J0
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1aW50KTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihHQzNEZmxvYXQpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJl
VW5pdHMuc2l6ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2FjdGl2ZVRleHR1cmVVbml0
ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMDsKLSAgICBtX2NvbnRleHQt
PmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEFjdGl2ZVRleHR1cmVVbml0KHRleHR1cmUpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNoU2hh
ZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25BdHRhY2hlZCgp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0cmli
TG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVM
b2NhdGlvbkxlbmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
YmluZEF0dHJpYkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9i
amVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQotewotICAgIGRlbGV0ZWQgPSBmYWxzZTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKG9iamVjdCkgewotICAgICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdy
b3VwKCksIHRoaXMpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBub3QgZnJv
bSB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+b2JqZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmpl
Y3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0aCBt
dWx0aXBsZSB0YXJnZXRzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQotICAgICAgICBtX2JvdW5kQXJy
YXlCdWZmZXIgPSBidWZmZXI7Ci0gICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRC
dWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKLSAg
ICBpZiAoYnVmZmVyKQotICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNoZWNrT2JqZWN0
VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgaWYgKHRh
cmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRGcmFtZWJ1
ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
ZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKG9iamVjdE9yWmVy
byhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIEluc3RlYWQgb2YgYmluZGlu
ZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5iaW5kKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwotICAgIGlmIChidWZmZXIpCi0gICAgICAg
IGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwotICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBp
ZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVmZmVy
LCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBy
ZW5kZXJCdWZmZXIgPSAwOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJlbmRl
ckJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmplY3RP
clplcm8ocmVuZGVyQnVmZmVyKSk7Ci0gICAgaWYgKHJlbmRlckJ1ZmZlcikKLSAgICAgICAgcmVu
ZGVyQnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4
dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBi
b29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFRleHR1cmUi
LCB0ZXh0dXJlLCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQot
ICAgICAgICB0ZXh0dXJlID0gMDsKLSAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJn
ZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZFRl
eHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAwOwotICAg
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKLSAgICAgICAg
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZyA9IHRl
eHR1cmU7Ci0gICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7Ci0KLSAgICAgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKLSAgICAgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4dHVy
ZSkpOwotCi0gICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVApIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKLSAgICAgICAgbWF4TGV2ZWwgPSBt
X21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJlIiwg
ImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7Ci0gICAgaWYgKHRl
eHR1cmUpCi0gICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVsKTsKLQot
ICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCB0aGUg
VEVYVFVSRV9XUkFQX1IKLSAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFNUF9UT19FREdFIGZvciBj
dWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKLSAgICAvLyBFUyAyLjAgZG9lc24ndCBl
eHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbikgYW5kCi0gICAgLy8g
b3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBvdmVyIHRoZSBzZWFtcyBp
biB0aGlzCi0gICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgc3VwcG9y
dGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAotICAgIC8vIHBsYXRmb3JtcyBpcyBmYWlybHkgaW52
b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJlIElECi0gICAgLy8gaW4g
YWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxhaW50cywgc28gdGhlIGxv
Z2ljIGhhcwotICAgIC8vIGJlZW4gcmVtb3ZlZC4KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxv
YXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymxl
bmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQorV2ViR0wxUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wx
UmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZShwYXNzZWRDYW52YXMsIGF0dHJpYnV0ZXMpCiB7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9u
IiwgbW9kZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb24o
bW9kZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRF
cXVhdGlvbiIsIG1vZGVSR0IpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRp
b24iLCBtb2RlQWxwaGEpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVx
dWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0
b3IpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVu
ZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBzZmFjdG9yLCBkZmFjdG9yKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3Jj
UkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBo
YSkKLXsKLSAgICAvLyBOb3RlOiBBbHBoYSBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0
aW9ucyBhcyBSR0IuCi0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBzcmNSR0IsIGRzdFJHQikpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdC
LCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2Fn
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZm
ZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0
YXJnZXQsIHVzYWdlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChzaXplIDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA8IDAiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPT0g
MCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9u
T3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVC
dWZmZXJEYXRhKHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4oc2l6ZSkpKSB7Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1
ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0Mz
RHNpemVpcHRyPihzaXplKSwgdXNhZ2UpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJEYXRhIGZ1bmN0
aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0
aGlua3MgaXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7
Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNE
ZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9
IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdl
KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghZGF0YSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAg
IGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZl
ckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgp
LCBkYXRhLT5kYXRhKCksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9T
eW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlv
biBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhp
bmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwot
ICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVu
dW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTEJ1ZmZlciogYnVmZmVy
ID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNh
Z2UpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFkYXRhKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiYnVmZmVyRGF0YSIsICJubyBkYXRhIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKLSAgICAg
ICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVm
ZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3Ro
KCksIGRhdGEtPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0
YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRh
dGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVy
RGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1
YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0
YSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZm
ZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEi
LCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7Ci0gICAgaWYgKCFidWZm
ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1
YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgh
ZGF0YSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZC
b3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJT
dWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEpKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBz
dGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEt
PmRhdGEoKSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEgZnVuY3Rpb24gZmFpbGVkLiBU
ZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2Vz
LgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFs
aWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChvZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQg
PCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkp
IHsKLSAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIs
ICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
OwotICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0Rp
bnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7
Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsK
LSAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBi
dWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAg
ICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0KLUdDM0RlbnVt
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0
YXJnZXQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICBpZiAo
dGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9iamVjdCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0NPTVBMRVRFOwotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNv
bXBsZXRlIjsKLSAgICBHQzNEZW51bSByZXN1bHQgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Y2hl
Y2tTdGF0dXMoJnJlYXNvbik7Ci0gICAgaWYgKHJlc3VsdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgcHJpbnRHTFdhcm5pbmdUb0NvbnNvbGUo
ImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCByZWFzb24pOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSAgICByZXN1bHQgPSBtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
dGFyZ2V0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtYXNrICYgfihHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZG
RVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJj
bGVhciIsICJpbnZhbGlkIG1hc2siKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25z
dCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhp
Y3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTiwgImNsZWFyIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoIWNsZWFySWZDb21wb3NpdGVkKG1hc2spKQotICAgICAgICBtX2NvbnRleHQtPmNsZWFyKG1h
c2spOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJDb2xvcihHQzNEZmxvYXQgciwgR0MzRGZsb2F0IGcsIEdDM0RmbG9hdCBi
LCBHQzNEZmxvYXQgYSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKHN0ZDo6aXNuYW4ocikpCi0gICAgICAgIHIgPSAwOwotICAg
IGlmIChzdGQ6OmlzbmFuKGcpKQotICAgICAgICBnID0gMDsKLSAgICBpZiAoc3RkOjppc25hbihi
KSkKLSAgICAgICAgYiA9IDA7Ci0gICAgaWYgKHN0ZDo6aXNuYW4oYSkpCi0gICAgICAgIGEgPSAx
OwotICAgIG1fY2xlYXJDb2xvclswXSA9IHI7Ci0gICAgbV9jbGVhckNvbG9yWzFdID0gZzsKLSAg
ICBtX2NsZWFyQ29sb3JbMl0gPSBiOwotICAgIG1fY2xlYXJDb2xvclszXSA9IGE7Ci0gICAgbV9j
b250ZXh0LT5jbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJEZXB0aChHQzNEZmxvYXQgZGVwdGgpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xlYXJEZXB0aCA9IGRl
cHRoOwotICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChkZXB0aCk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsZWFyU3RlbmNp
bCA9IHM7Ci0gICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwocyk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBn
cmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29sb3JNYXNr
WzBdID0gcmVkOwotICAgIG1fY29sb3JNYXNrWzFdID0gZ3JlZW47Ci0gICAgbV9jb2xvck1hc2tb
Ml0gPSBibHVlOwotICAgIG1fY29sb3JNYXNrWzNdID0gYWxwaGE7Ci0gICAgbV9jb250ZXh0LT5j
b2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImNvbXBpbGVTaGFkZXIiLCBzaGFk
ZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG9iamVj
dE9yWmVybyhzaGFkZXIpKTsKLSAgICBHQzNEaW50IHZhbHVlOwotICAgIG1fY29udGV4dC0+Z2V0
U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxF
X1NUQVRVUywgJnZhbHVlKTsKLSAgICBzaGFkZXItPnNldFZhbGlkKHZhbHVlKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdl
dCwgbGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3Nl
ZFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwg
ImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoYm9yZGVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAiYm9yZGVyIG5vdCAwIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhE
aW1lbnNpb25zKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGludGVybmFsZm9ybWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRh
dGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgd2lkdGgsIGhl
aWdodCwgaW50ZXJuYWxmb3JtYXQsIGRhdGEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvbXByZXNzZWRUZXhJbWFn
ZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkgewotICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xU
ZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleElt
YWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICBib3JkZXIsIGRh
dGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7Ci0gICAgaWYgKG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGNv
bXByZXNzZWRUZXhJbWFnZTJEIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJl
IGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KLSAgICAgICAgdGV4LT5t
YXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAgdGV4LT5zZXRD
b21wcmVzc2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhG
dW5jTGV2ZWwoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChmb3JtYXQp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIGZvcm1hdCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0Rh
dGEoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRh
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRl
eHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0g
ICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChmb3JtYXQgIT0gdGV4LT5n
ZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCIsICJmb3JtYXQgZG9lcyBub3QgbWF0Y2ggdGV4dHVyZSBmb3JtYXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4U3Vi
RGltZW5zaW9ucygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHRleCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGdyYXBoaWNzQ29udGV4dDNEKCktPmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhLT5ieXRl
TGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIHRleC0+c2V0Q29tcHJlc3NlZCgp
OworICAgIG1fdHlwZSA9ICJ3ZWJnbDEiOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIGZvcm1hdCkKK1dlYkdMMVJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMVJlbmRlcmluZ0Nv
bnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCwKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRyaWJ1dGVzKSA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBjb250
ZXh0LCBhdHRyaWJ1dGVzKQogewotICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJC
aXRzQnlGb3JtYXQoZm9ybWF0KSAmIChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJ
VCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiZm9ybWF0IGNhbiBub3QgYmUgc2V0LCBvbmx5IHJlbmRlcmVkIHRvIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgbV90eXBl
ID0gIndlYmdsMSI7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlcikKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJj
b3B5VGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlk
YXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQot
ICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVC
aW5kaW5nKCJjb3B5VGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNv
bWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZv
cm1hdCgpKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNv
bXBhdGlibGUgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFpc0dM
RVMyTlBPVFN0cmljdCgpICYmIGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBo
ZWlnaHQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiY29weVRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAy
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZy
YW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jl
c291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4SW1h
Z2UyRCIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2xlYXJJZkNvbXBv
c2l0ZWQoKTsKLSAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgewotICAgICAgICBTY29wZWREcmF3
aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLmdldCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlciht
X2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKLSAgICAg
ICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7Ci0gICAgICAgIEdDM0RzaXplaSBjbGlwcGVk
V2lkdGgsIGNsaXBwZWRIZWlnaHQ7Ci0gICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhl
aWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWln
aHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0
KSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBtX3VucGFja0FsaWdubWVudCk7Ci0gICAg
ICAgICAgICBpZiAoY2xpcHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgewotICAg
ICAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
Y2xpcHBlZFggLSB4LCBjbGlwcGVkWSAtIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjbGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBl
ZEhlaWdodCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9j
b250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IGlmIHRoZSBm
cmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3VsZCBiZSBl
eGVjdXRlZC4KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29weVRleFN1YkltYWdlMkQiLCB0YXJn
ZXQsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFs
aWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwot
ICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoImNv
cHlUZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkgfHwgIXZhbGlkYXRlU2l6ZSgiY29w
eVRleFN1YkltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8v
IEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93
IGhhcHBlbnMgZmlyc3QuCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNldCAr
IGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQgZGltZW5zaW9ucyIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXgt
PmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdldEhl
aWdodCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgInJlY3Rhbmds
ZSBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4U3ViSW1hZ2UyRCIsIGlu
dGVybmFsZm9ybWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNUZXhJbnRlcm5hbEZv
cm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRG
cmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwg
ImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24p
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgcmVhc29uKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlmIChp
c1Jlc291cmNlU2FmZSgpKSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmlu
ZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwot
ICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwotICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdp
ZHRoLCBjbGlwcGVkSGVpZ2h0OwotICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWln
aHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0
KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkp
IHsKLSAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQo
dGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICBHQzNEZW51bSB0eXBlID0gdGV4LT5nZXRUeXBl
KHRhcmdldCwgbGV2ZWwpOwotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVkIGNo
YXJbXT4gemVybzsKLSAgICAgICAgICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKLSAgICAgICAgICAgICAgICBHQzNEZW51bSBlcnJv
ciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0
aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwgJnNpemUsIDApOwotICAgICAgICAgICAgICAg
IGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJi
YWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHplcm8gPSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVk
IGNoYXJbXT4oc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF6ZXJvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbXNl
dCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29u
dGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHplcm8uZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGNs
aXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDApIHsKLSAgICAgICAgICAgICAgICBT
Y29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNv
cHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQgKyBjbGlwcGVkWCAtIHgsIHlv
ZmZzZXQgKyBjbGlwcGVkWSAtIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdo
dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTY29wZWRE
cmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLmdldCgpKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8V2ViR0xC
dWZmZXI+IG8gPSBXZWJHTEJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVj
dChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVm
ZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gbyA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0
aGlzKTsKLSAgICBhZGRDb250ZXh0T2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQot
Ci1QYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVU
ZXh0dXJlKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBvID0gV2ViR0xUZXh0dXJl
OjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVy
biBvOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBvID0gV2Vi
R0xQcm9ncmFtOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwot
ICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdl
YkdMUmVuZGVyYnVmZmVyPiBvID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAg
ICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQ
dHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdDM0Rl
bnVtIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIgJiYgdHlw
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjcmVhdGVTaGFk
ZXIiLCAiaW52YWxpZCBzaGFkZXIgdHlwZSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IG8gPSBXZWJHTFNoYWRlcjo6Y3JlYXRlKHRo
aXMsIHR5cGUpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+Y3VsbEZhY2UobW9kZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKLXsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFvYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImRlbGV0ZSIsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChvYmplY3QtPm9iamVjdCgpKQot
ICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gY29udGV4dCBoZXJlIGJlY2F1c2Ugd2Ugd2Fu
dAotICAgICAgICAvLyB0aGluZ3MgaW4gdGhpcyBjb250ZXh0IHVuYm91bmQuCi0gICAgICAgIG9i
amVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNzQ29udGV4dDNEKCkpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKFdlYkdMQnVm
ZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFkZWxldGVPYmplY3QoYnVmZmVyKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmIChtX2JvdW5kQXJyYXlCdWZmZXIgPT0gYnVmZmVyKQotICAgICAgICBt
X2JvdW5kQXJyYXlCdWZmZXIgPSAwOwotCi0gICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT51
bmJpbmRCdWZmZXIoYnVmZmVyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQotewotICAgIGlm
ICghZGVsZXRlT2JqZWN0KGZyYW1lYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChm
cmFtZWJ1ZmZlciA9PSBtX2ZyYW1lYnVmZmVyQmluZGluZykgewotICAgICAgICBtX2ZyYW1lYnVm
ZmVyQmluZGluZyA9IDA7Ci0gICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOwotICAgICAgICAg
ICAgLy8gSGF2ZSB0byBjYWxsIGJpbmRGcmFtZWJ1ZmZlciBoZXJlIHRvIGJpbmQgYmFjayB0byBp
bnRlcm5hbCBmYm8uCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQotewotICAg
IGRlbGV0ZU9iamVjdChwcm9ncmFtKTsKLSAgICAvLyBXZSBkb24ndCByZXNldCBtX2N1cnJlbnRQ
cm9ncmFtIHRvIDAgaGVyZSBiZWNhdXNlIHRoZSBkZWxldGlvbiBvZiB0aGUKLSAgICAvLyBjdXJy
ZW50IHByb2dyYW0gaXMgZGVsYXllZC4KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQotewot
ICAgIGlmICghZGVsZXRlT2JqZWN0KHJlbmRlcmJ1ZmZlcikpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAocmVuZGVyYnVmZmVyID09IG1fcmVuZGVyYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9y
ZW5kZXJidWZmZXJCaW5kaW5nID0gMDsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0g
ICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJh
bWVidWZmZXIocmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQotewotICAgIGRlbGV0ZU9iamVjdChz
aGFkZXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZShX
ZWJHTFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgaWYgKCFkZWxldGVPYmplY3QodGV4dHVyZSkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dHVyZVVu
aXRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICh0ZXh0dXJlID09IG1fdGV4dHVyZVVuaXRz
W2ldLnRleHR1cmUyREJpbmRpbmcpCi0gICAgICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0
dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJl
VW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKQotICAgICAgICAgICAgbV90ZXh0dXJlVW5p
dHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3Zl
QXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKHRleHR1cmUpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+
ZGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhN
YXNrKEdDM0Rib29sZWFuIGZsYWcpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZGVwdGhNYXNrID0gZmxhZzsKLSAgICBtX2NvbnRl
eHQtPmRlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
cHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQgekZhcikKLXsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHpOZWFyID4g
ekZhcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJkZXB0aFJhbmdlIiwgInpOZWFyID4gekZhciIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKCFwcm9ncmFtLT5kZXRhY2hTaGFkZXIoc2hhZGVyKSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRhY2hT
aGFkZXIiLCAic2hhZGVyIG5vdCBhdHRhY2hlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0
T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQz
RCgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRGVudW0g
Y2FwKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2Fw
YWJpbGl0eSgiZGlzYWJsZSIsIGNhcCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpIHsKLSAgICAgICAgbV9zdGVuY2lsRW5h
YmxlZCA9IGZhbHNlOwotICAgICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KSB7Ci0gICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fZHJh
d2luZ0J1ZmZlcikKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJs
ZWQobV9zY2lzc29yRW5hYmxlZCk7Ci0gICAgfQotICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXAp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3Rh
dGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0
ZShpbmRleCk7Ci0gICAgc3RhdGUuZW5hYmxlZCA9IGZhbHNlOwotCi0gICAgaWYgKGluZGV4ID4g
MCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdD
M0RpbnRwdHIgb2Zmc2V0KQotewotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5
QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIo
KTsKLSAgICAKLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKG9mZnNldCA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAg
Ly8gRm9yIGFuIHVuc2lnbmVkIGludCBhcnJheSwgb2Zmc2V0IG11c3QgYmUgZGl2aXNpYmxlIGJ5
IDQgZm9yIGFsaWdubWVudCByZWFzb25zLgotICAgICAgICBpZiAob2Zmc2V0ICUgNCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVu
dCBvZmZzZXQuCi0gICAgICAgIG9mZnNldCAvPSA0OwotCi0gICAgICAgIEdDM0RzaXplaXB0ciBu
ID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyA0OwotICAgICAgICBpZiAob2Zm
c2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VCkgewotICAgICAgICAvLyBGb3IgYW4gdW5zaWduZWQgc2hvcnQgYXJyYXksIG9mZnNldCBtdXN0
IGJlIGRpdmlzaWJsZSBieSAyIGZvciBhbGlnbm1lbnQgcmVhc29ucy4KLSAgICAgICAgaWYgKG9m
ZnNldCAlIDIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gTWFrZSB1
b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICBvZmZzZXQgLz0gMjsKLQotICAgICAg
ICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gMjsK
LSAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSkgewotICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJh
eUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwotICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+
IG4gLSBvZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFy
cmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVp
cmVkKQotewotICAgIC8vIFBlcmZvcm1zIGNvbnNlcnZhdGl2ZSB2YWxpZGF0aW9uIGJ5IGNhY2hp
bmcgYSBtYXhpbXVtIGluZGV4IG9mCi0gICAgLy8gdGhlIGdpdmVuIHR5cGUgcGVyIGVsZW1lbnQg
YXJyYXkgYnVmZmVyLiBJZiBhbGwgb2YgdGhlIGJvdW5kCi0gICAgLy8gYXJyYXkgYnVmZmVycyBo
YXZlIGVub3VnaCBlbGVtZW50cyB0byBzYXRpc2Z5IHRoYXQgbWF4aW11bQotICAgIC8vIGluZGV4
LCBza2lwcyB0aGUgZXhwZW5zaXZlIHBlci1kcmF3LWNhbGwgaXRlcmF0aW9uIGluCi0gICAgLy8g
dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZS4KLSAgICAKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+
IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVu
dEFycmF5QnVmZmVyKCk7Ci0KLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgR0MzRHNpemVpcHRyIG51bUVsZW1lbnRzID0gZWxlbWVudEFy
cmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAgLy8gVGhlIGNhc2UgY291bnQ9PTAgaXMgYWxy
ZWFkeSBkZWFsdCB3aXRoIGluIGRyYXdFbGVtZW50cyBiZWZvcmUgdmFsaWRhdGVJbmRleEFycmF5
Q29uc2VydmF0aXZlLgotICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBjb25zdCBBcnJheUJ1ZmZlciogYnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVyLT5l
bGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICBBU1NFUlQoYnVmZmVyKTsKLQotICAgIGludCBtYXhJ
bmRleCA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Z2V0Q2FjaGVkTWF4SW5kZXgodHlwZSk7Ci0gICAg
aWYgKG1heEluZGV4IDwgMCkgewotICAgICAgICAvLyBDb21wdXRlIHRoZSBtYXhpbXVtIGluZGV4
IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBpbmRleC4KLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEU6IHsKLSAgICAgICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0
PGNvbnN0IEdDM0R1Ynl0ZSo+KGJ1ZmZlci0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGZvciAoR0Mz
RHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAgICAgICAgICBt
YXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBbaV0pKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUOiB7Ci0gICAgICAgICAgICBudW1FbGVtZW50cyAvPSBzaXplb2Yo
R0MzRHVzaG9ydCk7Ci0gICAgICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGJ1ZmZlci0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGZvciAo
R0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAgICAgICAg
ICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBbaV0pKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0lOVDogewotICAgICAgICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRl
eFVpbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbnVtRWxl
bWVudHMgLz0gc2l6ZW9mKEdDM0R1aW50KTsKLSAgICAgICAgICAgIGNvbnN0IEdDM0R1aW50KiBw
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVpbnQqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAg
ICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAg
ICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50
PihwW2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsZW1lbnRB
cnJheUJ1ZmZlci0+c2V0Q2FjaGVkTWF4SW5kZXgodHlwZSwgbWF4SW5kZXgpOwotICAgIH0KLQot
ICAgIGlmIChtYXhJbmRleCA+PSAwKSB7Ci0gICAgICAgIC8vIFRoZSBudW1iZXIgb2YgcmVxdWly
ZWQgZWxlbWVudHMgaXMgb25lIG1vcmUgdGhhbiB0aGUgbWF4aW11bQotICAgICAgICAvLyBpbmRl
eCB0aGF0IHdpbGwgYmUgYWNjZXNzZWQuCi0gICAgICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBt
YXhJbmRleCArIDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJh
eVByZWNpc2UoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNl
dCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpCi17Ci0gICAgQVNTRVJUKGNvdW50ID49
IDAgJiYgb2Zmc2V0ID49IDApOwotICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IDA7Ci0gICAgCi0g
ICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotCi0gICAgaWYgKCFlbGVtZW50
QXJyYXlCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghY291bnQpIHsK
LSAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgbG9uZyB1b2Zmc2V0ID0g
b2Zmc2V0OwotICAgIHVuc2lnbmVkIGxvbmcgbiA9IGNvdW50OwotCi0gICAgaWYgKHR5cGUgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgewotICAgICAgICAvLyBNYWtlIHVvZmZz
ZXQgYW4gZWxlbWVudCBvZmZzZXQuCi0gICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdDM0R1aW50
KTsKLSAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWlu
dCo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1
b2Zmc2V0OwotICAgICAgICB3aGlsZSAobi0tID4gMCkgewotICAgICAgICAgICAgaWYgKCpwID4g
bGFzdEluZGV4KQotICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOwotICAgICAgICAgICAg
KytwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVCkgewotICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBv
ZmZzZXQuCi0gICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAgICBj
b25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGVsZW1l
bnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0Owot
ICAgICAgICB3aGlsZSAobi0tID4gMCkgewotICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4
KQotICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOwotICAgICAgICAgICAgKytwOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFKSB7Ci0gICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0
IEdDM0R1Ynl0ZSo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRh
dGEoKSkgKyB1b2Zmc2V0OwotICAgICAgICB3aGlsZSAobi0tID4gMCkgewotICAgICAgICAgICAg
aWYgKCpwID4gbGFzdEluZGV4KQotICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOwotICAg
ICAgICAgICAgKytwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlbiBzZXQgdGhlIGxh
c3QgaW5kZXggaW4gdGhlIGluZGV4IGFycmF5IGFuZCBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCi0g
ICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IGxhc3RJbmRleCArIDE7Ci0gICAgcmV0dXJuIG51bUVs
ZW1lbnRzUmVxdWlyZWQgPiAwOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwgdW5zaWduZWQgcHJp
bWl0aXZlQ291bnQpCi17Ci0gICAgaWYgKCFtX2N1cnJlbnRQcm9ncmFtKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBMb29rIGluIGVhY2ggZW5hYmxlZCB2ZXJ0ZXggYXR0cmliIGFu
ZCBjaGVjayBpZiB0aGV5J3ZlIGJlZW4gYm91bmQgdG8gYSBidWZmZXIuCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fbWF4VmVydGV4QXR0cmliczsgKytpKSB7Ci0gICAgICAgIGlmICgh
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpKS52YWxpZGF0
ZUJpbmRpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
ZWxlbWVudENvdW50IDw9IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0KLSAgICAvLyBMb29r
IGluIGVhY2ggY29uc3VtZWQgdmVydGV4IGF0dHJpYiAoYnkgdGhlIGN1cnJlbnQgcHJvZ3JhbSku
Ci0gICAgYm9vbCBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSBmYWxzZTsKLSAgICBib29sIHNhd0Vu
YWJsZWRBdHRyaWIgPSBmYWxzZTsKLSAgICBpbnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zID0g
bV9jdXJyZW50UHJvZ3JhbS0+bnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnM7ICsraSkgewotICAgICAgICBp
bnQgbG9jID0gbV9jdXJyZW50UHJvZ3JhbS0+Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24oaSk7Ci0g
ICAgICAgIGlmIChsb2MgPj0gMCAmJiBsb2MgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fbWF4VmVydGV4
QXR0cmlicykpIHsKLSAgICAgICAgICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6
OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0
VmVydGV4QXR0cmliU3RhdGUobG9jKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkKSB7
Ci0gICAgICAgICAgICAgICAgc2F3RW5hYmxlZEF0dHJpYiA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgLy8gQXZvaWQgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gbnVtRWxlbWVudHMgY29tcHV0YXRpb24u
Ci0gICAgICAgICAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGVsZW1lbnQsIHdlIHdpbGwgb25seSB0
b3VjaCB0aGUgZGF0YSBmb3IgdGhlCi0gICAgICAgICAgICAgICAgLy8gZWxlbWVudCBhbmQgbm90
aGluZyBiZXlvbmQgaXQuCi0gICAgICAgICAgICAgICAgaW50IGJ5dGVzUmVtYWluaW5nID0gc3Rh
dGljX2Nhc3Q8aW50PihzdGF0ZS5idWZmZXJCaW5kaW5nLT5ieXRlTGVuZ3RoKCkgLSBzdGF0ZS5v
ZmZzZXQpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RhdGUuc3RyaWRlID4gMCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGJ5dGVzUmVtYWluaW5nID49IHN0YXRlLmJ5dGVzUGVyRWxlbWVudCkKLSAgICAgICAgICAgICAg
ICAgICAgbnVtRWxlbWVudHMgPSAxICsgKGJ5dGVzUmVtYWluaW5nIC0gc3RhdGUuYnl0ZXNQZXJF
bGVtZW50KSAvIHN0YXRlLnN0cmlkZTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmRpdmlz
b3IpCi0gICAgICAgICAgICAgICAgICAgIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgaWYgKCghc3RhdGUuZGl2aXNvciAmJiBlbGVtZW50Q291bnQgPiBudW1F
bGVtZW50cykgfHwgKHN0YXRlLmRpdmlzb3IgJiYgcHJpbWl0aXZlQ291bnQgPiBudW1FbGVtZW50
cykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmICghc2F3Tm9uSW5zdGFuY2VkQXR0cmliICYmIHNhd0Vu
YWJsZWRBdHRyaWIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKCFv
YmplY3QgfHwgIW9iamVjdC0+b2JqZWN0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIG9iamVj
dCBvciBvYmplY3QgZGVsZXRlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50
LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5h
bWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZmlyc3QgPCAwIHx8IGNvdW50
IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZmlyc3Qgb3IgY291bnQgPCAwIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIG1hcmtD
b250ZXh0Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYg
KHByaW1jb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9u
T3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFs
aWQgcmVuZGVyaW5nIHN0YXRlCi0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZs
b3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2VkQ291bnQ7
Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQcmltQ291
bnQocHJpbWNvdW50KTsKLSAgICAgICAgaWYgKGNoZWNrZWRTdW0uaGFzT3ZlcmZsb3dlZCgpIHx8
IGNoZWNrZWRQcmltQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJp
YnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hlY2tlZFByaW1Db3VudC51bnNhZmVHZXQo
KSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9m
IGJvdW5kcyBhcnJheXMiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29u
c3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBo
aWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291
bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0KLSAgICBp
ZiAoIXZhbGlkYXRlRHJhd0FycmF5cygiZHJhd0FycmF5cyIsIG1vZGUsIGZpcnN0LCBjb3VudCwg
MCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAgICBi
b29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xFUzJDb21w
bGlhbnQoKSkKLSAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4
QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgp
KQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCB0cnVlKTsK
LSAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKLSAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICBy
ZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNH
TEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3
QXJyYXlzIiwgZmFsc2UpOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi1ib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUs
IGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50cykKLXsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwg
bW9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghdmFsaWRhdGVTdGVuY2ls
U2V0dGluZ3MoZnVuY3Rpb25OYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgICAgICBp
ZiAobV9vZXNFbGVtZW50SW5kZXhVaW50KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAoY291bnQgPCAwIHx8IG9mZnNldCA8IDApIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImNvdW50IG9yIG9mZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghY291bnQpIHsKLSAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJubyBFTEVNRU5UX0FSUkFZX0JVRkZFUiBib3VuZCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vz
c2VzKCkpIHsKLSAgICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3Rh
dGUKLSAgICAgICAgaWYgKCF2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoY291bnQsIHR5cGUsIHN0
YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgInJlcXVlc3Qgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVudCBFTEVNRU5UX0FSUkFZX0JVRkZF
UiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
Y291bnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghdmFsaWRhdGVJ
bmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRhdGVWZXJ0
ZXhBdHRyaWJ1dGVzKG51bUVsZW1lbnRzKSkgewotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50
cykpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91
dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0
ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0cmli
cyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5j
b21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVy
QmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCks
ICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0Mz
RHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAgdW5zaWduZWQgbnVtRWxl
bWVudHMgPSAwOwotICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50cyIs
IG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJvb2wgdmVydGV4QXR0cmliMFNp
bXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAg
IGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNl
KGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50
cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJp
YjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0g
ICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzIiwgdHJ1ZSk7Ci0g
ICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0
PEdDM0RpbnRwdHI+KG9mZnNldCkpOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZl
cnRleEF0dHJpYjBTaW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0
dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAg
ICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIGZhbHNlKTsKLSAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJlbmFibGUiLCBjYXApKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7Ci0gICAgICAg
IG1fc3RlbmNpbEVuYWJsZWQgPSB0cnVlOwotICAgICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKSB7Ci0gICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOwotICAgICAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRT
Y2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5l
bmFibGUoY2FwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhB
dHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0
dHJpYlN0YXRlKGluZGV4KTsKLSAgICBzdGF0ZS5lbmFibGVkID0gdHJ1ZTsKLQotICAgIG1fY29u
dGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZmluaXNoKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5maW5pc2goKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZsdXNoKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5mbHVzaCgpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZm
ZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciIsIHRhcmdldCwgYXR0YWNobWVudCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
cmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250
ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAi
bm8gYnVmZmVyIG9yIGJ1ZmZlciBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0
byBiZSBtdXRhdGVkOyBhbGwgY3VycmVudAotICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4g
RkJPIGludGVybmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKLSAgICAvLyBGQk8uCi0gICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVj
dCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVy
IGJvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBi
dWZmZXJPYmplY3QgPSBvYmplY3RPclplcm8oYnVmZmVyKTsKLSAgICBzd2l0Y2ggKGF0dGFjaG1l
bnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1F
TlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBi
dWZmZXJPYmplY3QpOwotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgcmVuZGVyYnVm
ZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNo
bWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOwotICAgIH0KLSAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNo
bWVudCwgYnVmZmVyKTsKLSAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0
dXJlLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJh
bWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCB0YXJnZXQsIGF0
dGFjaG1lbnQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGxldmVsKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZnJhbWVi
dWZmZXJUZXh0dXJlMkQiLCAibGV2ZWwgbm90IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAodGV4dHVyZSAmJiAhdGV4dHVyZS0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRo
aXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIHRleHR1cmUgb3IgdGV4
dHVyZSBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBh
bGwgY3VycmVudAotICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkg
aW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKLSAgICAvLyBGQk8uCi0gICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlT2JqZWN0ID0gb2Jq
ZWN0T3JaZXJvKHRleHR1cmUpOwotICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAg
ICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRB
Q0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwg
YXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAg
ICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQs
IHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwg
YXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Ci0gICAgfQotICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihh
dHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLSAgICBhcHBseVN0ZW5jaWxU
ZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmcm9udEZhY2UoR0MzRGVu
dW0gbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9jb250ZXh0LT5mcm9udEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdM
VGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAiLCB0
YXJnZXQsIGZhbHNlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
dGV4LT5jYW5HZW5lcmF0ZU1pcG1hcHMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJs
ZXZlbCAwIG5vdCBwb3dlciBvZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIzOTE2LiBDb21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBhbGxv
d2VkIGluIFdlYkdMIDI6Ci0gICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
Z2VuZXJhdGVNaXBtYXAiLCAidHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21wcmVz
c2VkIHRleHR1cmUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRl
U2V0dGFibGVUZXhGb3JtYXQoImdlbmVyYXRlTWlwbWFwIiwgdGV4LT5nZXRJbnRlcm5hbEZvcm1h
dCh0YXJnZXQsIDApKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gZ2VuZXJhdGVNaXBtYXAg
d29uJ3Qgd29yayBwcm9wZXJseSBpZiBtaW5GaWx0ZXIgaXMgbm90IE5FQVJFU1RfTUlQTUFQX0xJ
TkVBUgotICAgIC8vIG9uIE1hYy4gIFJlbW92ZSB0aGUgaGFjayBvbmNlIHRoaXMgZHJpdmVyIGJ1
ZyBpcyBmaXhlZC4KLSNpZiBPUyhEQVJXSU4pCi0gICAgYm9vbCBuZWVkVG9SZXNldE1pbkZpbHRl
ciA9IGZhbHNlOwotICAgIGlmICh0ZXgtPmdldE1pbkZpbHRlcigpICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpIHsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUik7Ci0gICAgICAgIG5lZWRUb1Jl
c2V0TWluRmlsdGVyID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBtX2NvbnRleHQtPmdlbmVy
YXRlTWlwbWFwKHRhcmdldCk7Ci0jaWYgT1MoREFSV0lOKQotICAgIGlmIChuZWVkVG9SZXNldE1p
bkZpbHRlcikKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGV4LT5nZXRNaW5GaWx0ZXIoKSk7Ci0j
ZW5kaWYKLSAgICB0ZXgtPmdlbmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJp
YihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZUF0dHJpYiIsIHByb2dyYW0p
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgaWYg
KCFtX2NvbnRleHQtPmdldEFjdGl2ZUF0dHJpYihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4
LCBpbmZvKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBMT0coV2ViR0wsICJSZXR1
cm5pbmcgYWN0aXZlIGF0dHJpYnV0ZSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5k
YXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwg
aW5mby50eXBlLCBpbmZvLnNpemUpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiZ2V0QWN0aXZlVW5pZm9ybSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVu
aWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICBpZiAoaW5m
by5zaXplID4gMSAmJiAhaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKLSAgICAgICAgICAgIGlu
Zm8ubmFtZS5hcHBlbmQoIlswXSIpOwotCi0gICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2
ZSB1bmlmb3JtICVkOiAlcyIsIGluZGV4LCBpbmZvLm5hbWUudXRmOCgpLmRhdGEoKSk7Ci0KLSAg
ICByZXR1cm4gV2ViR0xBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGlu
Zm8uc2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNo
YWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4m
IHNoYWRlck9iamVjdHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgc2hhZGVyT2JqZWN0cy5jbGVhcigpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0dGFjaGVkU2hhZGVycyIsIHBy
b2dyYW0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBHQzNEZW51bSBzaGFk
ZXJUeXBlW10gPSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSLAot
ICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSCi0gICAgfTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKHNoYWRlclR5cGUpIC8gc2l6ZW9mKEdDM0Rl
bnVtKTsgKytpKSB7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBwcm9ncmFtLT5nZXRB
dHRhY2hlZFNoYWRlcihzaGFkZXJUeXBlW2ldKTsKLSAgICAgICAgaWYgKHNoYWRlcikKLSAgICAg
ICAgICAgIHNoYWRlck9iamVjdHMuYXBwZW5kKHNoYWRlcik7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1HQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRp
b24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0
cmliTG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICghdmFs
aWRhdGVMb2NhdGlvbkxlbmd0aCgiZ2V0QXR0cmliTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAg
cmV0dXJuIC0xOwotICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldEF0dHJpYkxvY2F0aW9uIiwg
bmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1l
KSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImdldEF0dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOwot
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJp
YkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIgJiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZ
X0JVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0g
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBpZiAocG5hbWUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9TSVpFICYmIHBuYW1lICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpCVUZGRVJfVVNBR0UpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0K
LSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclBhcmFtZXRl
cml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpCVUZGRVJfU0laRSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7
Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVl
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRDb250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgLy8gV2UgYWx3YXlz
IG5lZWQgdG8gcmV0dXJuIGEgbmV3IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgb2JqZWN0IHRvCi0g
ICAgLy8gcHJldmVudCB0aGUgdXNlciBmcm9tIG11dGF0aW5nIGFueSBjYWNoZWQgdmVyc2lvbi4K
LQotICAgIC8vIEFsc28sIHdlIG5lZWQgdG8gZW5mb3JjZSByZXF1ZXN0ZWQgdmFsdWVzIG9mICJm
YWxzZSIgZm9yIGRlcHRoCi0gICAgLy8gYW5kIHN0ZW5jaWwsIHJlZ2FyZGxlc3Mgb2YgdGhlIHBy
b3BlcnRpZXMgb2YgdGhlIHVuZGVybHlpbmcKLSAgICAvLyBHcmFwaGljc0NvbnRleHQzRCBvciBE
cmF3aW5nQnVmZmVyLgotICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1
dGVzID0gV2ViR0xDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKG1fY29udGV4dC0+Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKSk7Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgIGF0
dHJpYnV0ZXMtPnNldERlcHRoKGZhbHNlKTsKLSAgICBpZiAoIW1fYXR0cmlidXRlcy5zdGVuY2ls
KQotICAgICAgICBhdHRyaWJ1dGVzLT5zZXRTdGVuY2lsKGZhbHNlKTsKLSAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIFRoZSBEcmF3aW5nQnVmZmVyIG9idGFpbnMgaXRzIHBh
cmFtZXRlcnMgZnJvbSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSwK
LSAgICAgICAgLy8gYnV0IGl0IG1ha2VzIGl0cyBvd24gZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVy
IG11bHRpc2FtcGxpbmcgaXMgc3VwcG9ydGVkLgotICAgICAgICBhdHRyaWJ1dGVzLT5zZXRBbnRp
YWxpYXMobV9kcmF3aW5nQnVmZmVyLT5tdWx0aXNhbXBsZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGF0dHJpYnV0ZXMucmVsZWFzZSgpOwotfQotCi1HQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQot
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotICAgIHJldHVybiBt
X2NvbnRleHQtPmdldEVycm9yKCk7Ci19Ci0KLVdlYkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKQotICAg
ICAgICAmJiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc2hh
ZGVyX3RleHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIikpKSB7Ci0gICAgICAgIGlmICghbV9leHRTaGFk
ZXJUZXh0dXJlTE9EKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOwotICAgICAgICAgICAg
bV9leHRTaGFkZXJUZXh0dXJlTE9EID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRTaGFkZXJUZXh0dXJl
TE9EPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9leHRTaGFkZXJUZXh0dXJl
TE9ELmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJ
VF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKQotICAgICAgICAmJiBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ry
b3BpYyIpKSB7Ci0gICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJH
TF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKLSAgICAgICAgICAgIG1fZXh0VGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2V4dFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYy5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsICJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKQotICAgICAgICAmJiBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKSB7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIik7Ci0gICAgICAgICAgICBtX29lc1N0YW5kYXJkRGVyaXZhdGl2
ZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+KHRoaXMpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMuZ2V0KCk7Ci0g
ICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfZmxvYXQi
KQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09F
U190ZXh0dXJlX2Zsb2F0IikpIHsKLSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdCkgewot
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdM
X09FU190ZXh0dXJlX2Zsb2F0Iik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdCA9IHN0
ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUZsb2F0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXQuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikKLSAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9h
dF9saW5lYXIiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0TGluZWFyKSB7Ci0g
ICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xf
T0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVGbG9h
dExpbmVhciA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUZsb2F0TGluZWFyPih0aGlzKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIuZ2V0KCk7
Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdCIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0
cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0
dXJlSGFsZkZsb2F0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOwotICAgICAgICAgICAg
bV9vZXNUZXh0dXJlSGFsZkZsb2F0ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNUZXh0dXJlSGFsZkZs
b2F0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlSGFsZkZs
b2F0LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190
ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKSB7
Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKSB7Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1
cmVfaGFsZl9mbG9hdF9saW5lYXIiKTsKLSAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9h
dExpbmVhciA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcj4odGhp
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVh
ci5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdmVy
dGV4X2FycmF5X29iamVjdCIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSkgewotICAgICAgICBpZiAo
IW1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpOwot
ICAgICAgICAgICAgbV9vZXNWZXJ0ZXhBcnJheU9iamVjdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VT
VmVydGV4QXJyYXlPYmplY3Q+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29l
c1ZlcnRleEFycmF5T2JqZWN0LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKQotICAgICAgICAmJiBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkg
ewotICAgICAgICBpZiAoIW1fb2VzRWxlbWVudEluZGV4VWludCkgewotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19lbGVtZW50X2lu
ZGV4X3VpbnQiKTsKLSAgICAgICAgICAgIG1fb2VzRWxlbWVudEluZGV4VWludCA9IHN0ZDo6bWFr
ZV91bmlxdWU8T0VTRWxlbWVudEluZGV4VWludD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG1fb2VzRWxlbWVudEluZGV4VWludC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9sb3NlX2NvbnRleHQiKSkgewotICAgICAgICBpZiAo
IW1fd2ViZ2xMb3NlQ29udGV4dCkKLSAgICAgICAgICAgIG1fd2ViZ2xMb3NlQ29udGV4dCA9IHN0
ZDo6bWFrZV91bmlxdWU8V2ViR0xMb3NlQ29udGV4dD4odGhpcyk7Ci0gICAgICAgIHJldHVybiBt
X3dlYmdsTG9zZUNvbnRleHQuZ2V0KCk7Ci0gICAgfQotICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIikpCi0gICAgICAg
ICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkgewotICAgICAg
ICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQykKLSAgICAgICAgICAgIG1fd2ViZ2xD
b21wcmVzc2VkVGV4dHVyZUFUQyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQz4odGhpcyk7Ci0gICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVB
VEMuZ2V0KCk7Ci0gICAgfQotICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJ
VF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSkKLSAgICAgICAgJiYgV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQykKLSAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZS
VEM+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMu
Z2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfY29t
cHJlc3NlZF90ZXh0dXJlX3MzdGMiKQotICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlUzNUQykKLSAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMgPSBz
dGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPih0aGlzKTsKLSAgICAg
ICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMuZ2V0KCk7Ci0gICAgfQotICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVwdGhfdGV4dHVyZSIpCi0gICAg
ICAgICYmIFdlYkdMRGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkp
IHsKLSAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fZGVwdGhf
dGV4dHVyZSIpOwotICAgICAgICAgICAgbV93ZWJnbERlcHRoVGV4dHVyZSA9IHN0ZDo6bWFrZV91
bmlxdWU8V2ViR0xEZXB0aFRleHR1cmU+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBtX3dlYmdsRGVwdGhUZXh0dXJlLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgIldFQkdMX2RyYXdfYnVmZmVycyIpICYmIHN1cHBvcnRzRHJhd0J1ZmZlcnMo
KSkgewotICAgICAgICBpZiAoIW1fd2ViZ2xEcmF3QnVmZmVycykgewotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kcmF3X2J1ZmZl
cnMiKTsKLSAgICAgICAgICAgIG1fd2ViZ2xEcmF3QnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8
V2ViR0xEcmF3QnVmZmVycz4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fd2Vi
Z2xEcmF3QnVmZmVycy5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikgJiYgQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1
cHBvcnRlZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fYW5nbGVJbnN0YW5jZWRBcnJheXMpIHsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJH
TF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7Ci0gICAgICAgICAgICBtX2FuZ2xlSW5zdGFuY2Vk
QXJyYXlzID0gc3RkOjptYWtlX3VuaXF1ZTxBTkdMRUluc3RhbmNlZEFycmF5cz4odGhpcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fYW5nbGVJbnN0YW5jZWRBcnJheXMuZ2V0KCk7Ci0g
ICAgfQotICAgIGlmIChhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkpIHsKLSAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIikpIHsK
LSAgICAgICAgICAgIGlmICghbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAg
ICAgIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbz4odGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gbV93ZWJnbERlYnVnUmVu
ZGVyZXJJbmZvLmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiV0VCR0xfZGVidWdfc2hhZGVycyIpCi0gICAgICAgICAgICAmJiBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3Nv
dXJjZSIpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1NoYWRlcnMpCi0gICAgICAg
ICAgICAgICAgbV93ZWJnbERlYnVnU2hhZGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1
Z1NoYWRlcnM+KHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMu
Z2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0g
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQ
YXJhbWV0ZXJzKCJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0YXJnZXQsIGF0
dGFjaG1lbnQpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAgICBpZiAoIW1f
ZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgIm5vIGZyYW1lYnVm
ZmVyIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAg
ICBXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEF0
dGFjaG1lbnRPYmplY3QoYXR0YWNobWVudCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAg
aWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9UWVBFKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRl
eHQzRDo6Tk9ORSk7Ci0gICAgICAgIC8vIE9wZW5HTCBFUyAyLjAgc3BlY2lmaWVzIElOVkFMSURf
RU5VTSBpbiB0aGlzIGNhc2UsIHdoaWxlIGRlc2t0b3AgR0wKLSAgICAgICAgLy8gc3BlY2lmaWVz
IElOVkFMSURfT1BFUkFUSU9OLgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwotICAgIH0KLQotICAgIEFTU0VSVChvYmplY3QtPmlzVGV4dHVyZSgpIHx8IG9iamVjdC0+
aXNSZW5kZXJidWZmZXIoKSk7Ci0gICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkpIHsKLSAgICAg
ICAgc3dpdGNoIChwbmFtZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRSk7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihyZWludGVy
cHJldF9jYXN0PFdlYkdMVGV4dHVyZSo+KG9iamVjdCkpKTsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVf
Q1VCRV9NQVBfRkFDRToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHQzNEaW50IHZh
bHVlID0gMDsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIpOwotICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgc3dpdGNoIChwbmFtZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgotICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKTsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFN
RToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRl
cmJ1ZmZlcj4ocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCkpKTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQi
KTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICBjb25zdCBpbnQgaW50WmVybyA9IDA7Ci0gICAgc3dpdGNoIChwbmFt
ZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9URVhUVVJFOgotICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToKLSAgICAgICAgcmV0dXJuIGdl
dFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xG
bG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpB
TFBIQV9CSVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihtX2JvdW5kQXJyYXlCdWZm
ZXIpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICAgICAgcmV0dXJu
IGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EX0NPTE9SOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfQUxQSEE6Ci0g
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX1JHQjoKLSAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RF9FUVVBVElPTl9BTFBIQToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9SR0I6
Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfU1JDX0FMUEhBOgotICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EX1NSQ19SR0I6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxVRV9CSVRTOgotICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9DTEVBUl9WQUxVRToKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVN
QVNLOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhVaW50MzJBcnJheTo6Y3JlYXRlKG1fY29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXRzLmRhdGEoKSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6ZSgp
KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFOgotICAgICAgICByZXR1
cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Q1VMTF9GQUNFX01PREU6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNOgot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPihtX2N1
cnJlbnRQcm9ncmFtKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQklUUzoK
LSAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmRlcHRo
KQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQ0xFQVJfVkFMVUU6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfRlVOQzoKLSAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9SQU5HRToKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoK
LSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xl
YW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoK
LSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPihtX2ZyYW1lYnVmZmVyQmluZGluZykpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0ZBQ0U6Ci0gICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFRU5fQklUUzoK
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TElORV9XSURUSDoKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JF
TkRFUkJVRkZFUl9TSVpFOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9S
UzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTOgotICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNU
T1JTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAgcmV0dXJuIGdldFdl
YkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok5VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6Ci0gICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2Ug
YWx3YXlzIHJldHVybiAwIGZvciB0aGlzPwotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRkFDVE9SOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZG
U0VUX0ZJTEw6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9VTklUUzoKLSAgICAgICAg
cmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRURfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4obV9yZW5k
ZXJidWZmZXJCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVI6
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oU3RyaW5nKCJXZWJLaXQgV2ViR0wiKSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0JVRkZFUlM6Ci0gICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRV9DT1ZFUkFHRV9JTlZFUlQ6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfVkFM
VUU6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0FNUExFUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Ci0gICAg
ICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xB
TkdVQUdFX1ZFUlNJT046Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldlYkdMIEdMU0wg
RVMgMS4wICgiICsgbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURJ
TkdfTEFOR1VBR0VfVkVSU0lPTikgKyAiKSIpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfQkFDS19GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GVU5D
OgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6Ci0gICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKLSAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUkVGOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfVkFMVUVf
TUFTSzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgotICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQklUUzoKLSAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKGludFplcm8pOwotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgotICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0ZBSUw6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GVU5DOgotICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9GQUlMOgotICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9QQVNTOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
UkVGOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1ZB
TFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0s6Ci0gICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1VCUElYRUxfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HXzJE
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiht
X3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nKSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3RleHR1
cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgotICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfRkxJUF9ZX1dFQkdMOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNr
RmxpcFkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9B
TFBIQV9XRUJHTDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNF
X0NPTlZFUlNJT05fV0VCR0w6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tD
b2xvcnNwYWNlQ29udmVyc2lvbik7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVORE9S
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IikpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlNJT046Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oIldlYkdMIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJTSU9OKSArICIpIik7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6
Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8v
IE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcwotICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2
YXRpdmVzKQotICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVu
c2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVMpOwotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2Fz
ZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKLSAgICAg
ICAgaWYgKG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8obV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVS
KSk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVi
dWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7Ci0gICAgY2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9WRU5ET1Jf
V0VCR0w6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCi0gICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4
dDNEOjpWRU5ET1IpKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
LCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VkVSVEVYX0FSUkFZX0JJ
TkRJTkdfT0VTOiAvLyBPRVNfdmVydGV4X2FycmF5X29iamVjdAotICAgICAgICBpZiAobV9vZXNW
ZXJ0ZXhBcnJheU9iamVjdCkgewotICAgICAgICAgICAgaWYgKCFtX2JvdW5kVmVydGV4QXJyYXlP
YmplY3QtPmlzRGVmYXVsdE9iamVjdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPihtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QpKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICAg
ICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU192ZXJ0
ZXhfYXJyYXlfb2JqZWN0IG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlf
RVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKLSAgICAgICAgaWYgKG1fZXh0
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKQotICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhU
KTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNf
RVhUOiAvLyBFWFRfZHJhd19idWZmZXJzIEJFR0lOCi0gICAgICAgIGlmIChtX3dlYmdsRHJhd0J1
ZmZlcnMpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGdldE1heENvbG9yQXR0YWNo
bWVudHMoKSk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VC
R0xfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQ6Ci0gICAg
ICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKGdldE1heERyYXdCdWZmZXJzKCkpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKG1fd2ViZ2xE
cmF3QnVmZmVycwotICAgICAgICAgICAgJiYgcG5hbWUgPj0gRXh0ZW5zaW9uczNEOjpEUkFXX0JV
RkZFUjBfRVhUCi0gICAgICAgICAgICAmJiBwbmFtZSA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihF
eHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQgKyBnZXRNYXhEcmF3QnVmZmVycygpKSkgewot
ICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOwotICAg
ICAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgICAgIHZhbHVl
ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldERyYXdCdWZmZXIocG5hbWUpOwotICAgICAgICAg
ICAgZWxzZSAvLyBlbXVsYXRlZCBiYWNrYnVmZmVyCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBt
X2JhY2tEcmF3QnVmZmVyOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgcHJvZ3JhbSkpCi0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKLQotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIHN3
aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVT
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHByb2dyYW0tPmlzRGVsZXRlZCgpKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWQUxJREFURV9TVEFUVVM6Ci0gICAgICAgIG1fY29u
dGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUzoKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFUVEFDSEVEX1NIQURFUlM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0UHJv
Z3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFD
VElWRV9BVFRSSUJVVEVTOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklG
T1JNUzoKLSAgICAgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQo
b2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1QYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgfQotfQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFt
SW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0
UHJvZ3JhbUluZm9Mb2ciLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVy
biBlbnN1cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2cob2JqZWN0T3JaZXJv
KHByb2dyYW0pKSk7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAg
ICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5n
IHx8ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlciIsICJubyByZW5kZXJidWZmZXIgYm91bmQiKTsKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLQotICAgIGlmIChtX3JlbmRlcmJ1ZmZlckJpbmRp
bmctPmdldEludGVybmFsRm9ybWF0KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5D
SUwKLSAgICAgICAgJiYgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+aXNWYWxpZCgpKSB7Ci0gICAg
ICAgIEFTU0VSVCghaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7Ci0gICAgICAgIGludCB2YWx1
ZSA9IDA7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX1dJRFRIOgotICAgICAgICAgICAgdmFsdWUgPSBtX3JlbmRl
cmJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKLSAgICAgICAgICAg
IHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVE
X1NJWkU6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9HUkVF
Tl9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxV
RV9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQ
SEFfU0laRToKLSAgICAgICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAg
ICAgICAgICAgIHZhbHVlID0gMjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToKLSAgICAgICAgICAg
IHZhbHVlID0gODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgotICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkp
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAg
fQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSEVJR0hUOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9SRURfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfQkxVRV9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9BTFBIQV9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9ERVBUSF9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9TVEVOQ0lMX1NJWkU6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byh2YWx1ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVS
TkFMX0ZPUk1BVDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJp
bmRpbmctPmdldEludGVybmFsRm9ybWF0KCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgR0MzRGVu
dW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgi
Z2V0U2hhZGVyUGFyYW1ldGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHNoYWRlci0+aXNEZWxldGVkKCkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTVBJTEVfU1RBVFVTOgotICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVj
dE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNIQURFUl9UWVBFOgotICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9y
WmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dFNoYWRlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJnZXRTaGFkZXJJbmZvTG9nIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIi
OwotICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhv
YmplY3RPclplcm8oc2hhZGVyKSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lz
aW9uRm9ybWF0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclByZWNpc2lvbkZvcm1h
dChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHN3aXRjaCAoc2hhZGVy
VHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSOgotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgc2hh
ZGVyIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHN3aXRjaCAo
cHJlY2lzaW9uVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19GTE9BVDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1fRkxPQVQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6SElHSF9GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpM
T1dfSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1FRElVTV9JTlQ6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9JTlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQiLCAiaW52YWxpZCBwcmVjaXNpb24gdHlw
ZSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBHQzNEaW50IHJhbmdl
WzJdID0gezAsIDB9OwotICAgIEdDM0RpbnQgcHJlY2lzaW9uID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5n
ZSwgJnByZWNpc2lvbik7Ci0gICAgcmV0dXJuIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0Ojpj
cmVhdGUocmFuZ2VbMF0sIHJhbmdlWzFdLCBwcmVjaXNpb24pOwotfQotCi1TdHJpbmcgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKCF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQotICAgICAgICBy
ZXR1cm4gIiI7Ci0gICAgcmV0dXJuIGVuc3VyZU5vdE51bGwoc2hhZGVyLT5nZXRTb3VyY2UoKSk7
Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVk
RXh0ZW5zaW9ucygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwotCi0gICAgaWYgKG1f
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAg
IGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJl
X2Zsb2F0IikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2Zsb2F0Iik7Ci0g
ICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1
cmVfZmxvYXRfbGluZWFyIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2Zs
b2F0X2xpbmVhciIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9y
dHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgi
T0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpCi0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7Ci0gICAg
aWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB8fCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX0FSQl9zaGFkZXJfdGV4dHVyZV9sb2QiKSkKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3Bp
YyIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0
cygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgi
T0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpCi0gICAgICAgIHJl
c3VsdC5hcHBlbmQoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKTsKLSAgICByZXN1bHQuYXBwZW5k
KCJXRUJHTF9sb3NlX2NvbnRleHQiKTsKLSAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qzo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJLSVRfV0VCR0xf
Y29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpOwotICAgIGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dF
QkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpOwotICAgIGlmIChXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUzNUQzo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJH
TF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpOwotICAgIGlmIChXZWJHTERlcHRoVGV4dHVyZTo6
c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJX
RUJHTF9kZXB0aF90ZXh0dXJlIik7Ci0gICAgaWYgKHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZHJhd19idWZmZXJzIik7Ci0gICAgaWYgKEFOR0xF
SW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQo
IkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKLQotICAgIGlmIChhbGxvd1ByaXZpbGVnZWRFeHRl
bnNpb25zKCkpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBw
b3J0cygiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIikpCi0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19zaGFkZXJzIik7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIldFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJh
bWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgV2ViR0xUZXh0dXJlKiB0
ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJnZXRUZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZh
bHNlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAg
IEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfV1JBUF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
OgotICAgICAgICBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2
YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50Pih2YWx1ZSkpOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpURVhUVVJFX01BWF9BTklTT1RS
T1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgICAgIGlmICht
X2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykgewotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRf
dGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0g
ICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3Jt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHVuaWZv
cm1Mb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRVbmlmb3JtIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
LSAgICBpZiAoIXVuaWZvcm1Mb2NhdGlvbiB8fCB1bmlmb3JtTG9jYXRpb24tPnByb2dyYW0oKSAh
PSBwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0aW9uIG9y
IG5vdCB2YWxpZCBmb3IgdGhpcyBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICB9Ci0gICAgR0MzRGludCBsb2NhdGlvbiA9IHVuaWZvcm1Mb2NhdGlvbi0+bG9j
YXRpb24oKTsKLQotICAgIEdDM0RlbnVtIGJhc2VUeXBlOwotICAgIHVuc2lnbmVkIGxlbmd0aDsK
LSAgICBzd2l0Y2ggKHVuaWZvcm1Mb2NhdGlvbi0+dHlwZSgpKSB7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Qk9PTDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Qk9PTF9WRUMyOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDM7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDNDoKLSAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgotICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMyOgotICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7Ci0gICAgICAgIGxlbmd0aCA9IDI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMzOgot
ICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7Ci0gICAgICAgIGxlbmd0
aCA9IDM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9W
RUM0OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7Ci0gICAgICAg
IGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAg
ICAgICAgbGVuZ3RoID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVRfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUM0OgotICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUMjoKLSAgICAgICAg
YmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDM6
Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBs
ZW5ndGggPSA5OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVF9NQVQ0OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsK
LSAgICAgICAgbGVuZ3RoID0gMTY7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNBTVBMRVJfMkQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExF
Ul9DVUJFOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7Ci0gICAg
ICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8v
IENhbid0IGhhbmRsZSB0aGlzIHR5cGUKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVuaGFuZGxlZCB0eXBl
Iik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0gICAgc3dpdGNoIChi
YXNlVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiB7Ci0gICAgICAg
IEdDM0RmbG9hdCB2YWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VY
VFN1cHBvcnRlZCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRu
VW5pZm9ybWZ2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDE2ICogc2l6ZW9m
KEdDM0RmbG9hdCksIHZhbHVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRVbmlmb3JtZnYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwot
ICAgICAgICBpZiAobGVuZ3RoID09IDEpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KHZhbHVlWzBdKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNy
ZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVDogewotICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OwotICAgICAgICBpZiAobV9p
c1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+Z2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9u
LCA0ICogc2l6ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24s
IHZhbHVlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyh2YWx1ZVswXSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJB
cnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6Qk9PTDogewotICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OwotICAgICAg
ICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSks
IGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwg
bG9jYXRpb24sIHZhbHVlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA+IDEpIHsKLSAgICAgICAgICAg
IGJvb2wgYm9vbFZhbHVlWzE2XSA9IHswfTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBsZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICBib29sVmFsdWVbal0gPSBzdGF0
aWNfY2FzdDxib29sPih2YWx1ZVtqXSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KGJvb2xWYWx1ZSwgbGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlWzBdKSk7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUs
IHNvbWV0aGluZyB3ZW50IHdyb25nIGluIG91ciB1bmZvcnR1bmF0ZWx5IGNvbXBsZXggbG9naWMg
YWJvdmUKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImdldFVuaWZvcm0iLCAidW5rbm93biBlcnJvciIpOwotICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0aCgiZ2V0VW5pZm9ybUxvY2F0
aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghdmFsaWRhdGVT
dHJpbmcoImdldFVuaWZvcm1Mb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgaWYgKCFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5p
Zm9ybUxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOwotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0gICAgR0MzRGludCB1bmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdl
dFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwotICAgIGlmICh1
bmlmb3JtTG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgR0Mz
RGludCBhY3RpdmVVbmlmb3JtcyA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0
aXZlU3ltYm9sQ291bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6
QUNUSVZFX1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9ybXMpOwotICAgIGZvciAoR0MzRGludCBpID0g
MDsgaSA8IGFjdGl2ZVVuaWZvcm1zOyBpKyspIHsKLSAgICAgICAgQWN0aXZlSW5mbyBpbmZvOwot
ICAgICAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJv
Z3JhbSksIGksIGluZm8pKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIC8v
IFN0cmlwICJbMF0iIGZyb20gdGhlIG5hbWUgaWYgaXQncyBhbiBhcnJheS4KLSAgICAgICAgaWYg
KGluZm8ubmFtZS5lbmRzV2l0aCgiWzBdIikpCi0gICAgICAgICAgICBpbmZvLm5hbWUgPSBpbmZv
Lm5hbWUubGVmdChpbmZvLm5hbWUubGVuZ3RoKCkgLSAzKTsKLSAgICAgICAgLy8gSWYgaXQncyBh
biBhcnJheSwgd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggZWFjaCBlbGVtZW50LCBhcHBlbmRp
bmcgIltpbmRleF0iIHRvIHRoZSBuYW1lLgotICAgICAgICBmb3IgKEdDM0RpbnQgaW5kZXggPSAw
OyBpbmRleCA8IGluZm8uc2l6ZTsgKytpbmRleCkgewotICAgICAgICAgICAgU3RyaW5nIHVuaWZv
cm1OYW1lID0gaW5mby5uYW1lICsgIlsiICsgU3RyaW5nOjpudW1iZXIoaW5kZXgpICsgIl0iOwot
Ci0gICAgICAgICAgICBpZiAobmFtZSA9PSB1bmlmb3JtTmFtZSB8fCBuYW1lID09IGluZm8ubmFt
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZShw
cm9ncmFtLCB1bmlmb3JtTG9jYXRpb24sIGluZm8udHlwZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0KLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAg
ICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VmVydGV4QXR0cmli
IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
Ci0gICAgfQotCi0gICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0
cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRy
aWJTdGF0ZShpbmRleCk7Ci0KLSAgICBpZiAobV9hbmdsZUluc3RhbmNlZEFycmF5cyAmJiBwbmFt
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xF
KQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLmRpdmlzb3IpOwotCi0gICAgc3dp
dGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJf
QVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIGlmICgoIWlzR0xFUzJDb21wbGlhbnQoKSAm
JiAhaW5kZXggJiYgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0
ZSgwKS5idWZmZXJCaW5kaW5nID09IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikKLSAgICAgICAgICAg
IHx8ICFzdGF0ZS5idWZmZXJCaW5kaW5nCi0gICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmlu
ZGluZy0+b2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4oc3RhdGUuYnVm
ZmVyQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJf
QVJSQVlfRU5BQkxFRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5lbmFibGVk
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1B
TElaRUQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUubm9ybWFsaXplZCk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLnNpemUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRlLm9yaWdpbmFsU3RyaWRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oc3RhdGUudHlwZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJU
RVhfQVRUUklCOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3Jl
YXRlKG1fdmVydGV4QXR0cmliVmFsdWVbaW5kZXhdLnZhbHVlLCA0KSk7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldFZlcnRleEF0dHJpYiIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci19Ci0KLWxvbmcgbG9uZyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVu
dW0gcG5hbWUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgR0MzRHNpemVpcHRyIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KGluZGV4LCBwbmFtZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcg
bG9uZz4ocmVzdWx0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhpbnQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKLSAg
ICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRF
X01JUE1BUF9ISU5UOgotICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VT
OiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmRE
ZXJpdmF0aXZlcykKLSAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgaWYgKCFpc1ZhbGlkKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJoaW50IiwgImludmFsaWQgdGFyZ2V0Iik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5oaW50KHRhcmdldCwgbW9k
ZSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNCdWZmZXIoV2Vi
R0xCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFidWZmZXItPmhhc0V2ZXJC
ZWVuQm91bmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5p
c0J1ZmZlcihidWZmZXItPm9iamVjdCgpKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmlzQ29udGV4dExvc3QoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRleHRMb3N0Owot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdE9yUGVuZGluZygp
Ci17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiAmJiAhbV9oYXNSZXF1ZXN0
ZWRQb2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkNvbnRleHQgaXMgYmVp
bmcgdXNlZC4gQXR0ZW1wdCB0byByZXNvbHZlIHRoZSBwb2xpY3kuIik7Ci0gICAgICAgIERvY3Vt
ZW50JiBkb2N1bWVudCA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnRvcERvY3VtZW50KCk7Ci0gICAg
ICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCk7Ci0gICAgICAgIGlmIChwYWdlICYmICFk
b2N1bWVudC51cmwoKS5pc0xvY2FsRmlsZSgpKQotICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkucmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKGRvY3VtZW50LnVy
bCgpKTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGN1cnJlbnRseSBkbyBhbnl0aGluZyB3
aXRoIHRoZSByZXN1bHQgZnJvbSByZXNvbHV0aW9uLiBBIG1vcmUKLSAgICAgICAgLy8gY29tcGxl
dGUgaW1wbGVtZW50YXRpb24gbWlnaHQgdHJ5IHRvIGNvbnN0cnVjdCBhIHJlYWwgY29udGV4dCwg
ZXRjIGFuZCBwcm9jZWVkCi0gICAgICAgIC8vIHdpdGggbm9ybWFsIG9wZXJhdGlvbi4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTEyMgotICAg
ICAgICBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24gPSB0cnVlOwotICAgIH0KLQotICAg
IHJldHVybiBtX2NvbnRleHRMb3N0IHx8IG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKLX0K
LQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0VuYWJsZWQoR0MzRGVudW0g
Y2FwKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2Fw
YWJpbGl0eSgiaXNFbmFibGVkIiwgY2FwKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKQotICAgICAgICByZXR1cm4gbV9z
dGVuY2lsRW5hYmxlZDsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQoY2FwKTsKLX0K
LQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0ZyYW1lYnVmZmVyKFdlYkdM
RnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQotewotICAgIGlmICghZnJhbWVidWZmZXIgfHwgaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghZnJh
bWVidWZmZXItPmhhc0V2ZXJCZWVuQm91bmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyLT5vYmplY3QoKSk7Ci19
Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNQcm9ncmFtKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSkKLXsKLSAgICBpZiAoIXByb2dyYW0gfHwgaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJv
Z3JhbShwcm9ncmFtLT5vYmplY3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikK
LXsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFyZW5kZXJidWZmZXItPmhhc0V2ZXJCZWVuQm91
bmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc1JlbmRl
cmJ1ZmZlcihyZW5kZXJidWZmZXItPm9iamVjdCgpKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppc1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQotewotICAgIGlm
ICghc2hhZGVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc1NoYWRlcihzaGFkZXItPm9iamVjdCgpKTsKLX0K
LQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleHR1cmUoV2ViR0xUZXh0
dXJlKiB0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSB8fCBpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCF0ZXh0dXJlLT5oYXNFdmVyQmVl
bkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNU
ZXh0dXJlKHRleHR1cmUtPm9iamVjdCgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+bGluZVdpZHRoKHdp
ZHRoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdM
T2JqZWN0KCJsaW5rUHJvZ3JhbSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgV2ViR0xTaGFkZXIqIHZlcnRleFNoYWRl
ciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
U0hBREVSKTsKLSAgICAgICAgV2ViR0xTaGFkZXIqIGZyYWdtZW50U2hhZGVyID0gcHJvZ3JhbS0+
Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7Ci0g
ICAgICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzVmFsaWQoKSB8fCAh
ZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIW1fY29udGV4
dC0+cHJlY2lzaW9uc01hdGNoKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclpl
cm8oZnJhZ21lbnRTaGFkZXIpKSB8fCAhbV9jb250ZXh0LT5jaGVja1ZhcnlpbmdzUGFja2luZyhv
YmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkp
IHsKLSAgICAgICAgICAgIHByb2dyYW0tPnNldExpbmtTdGF0dXMoZmFsc2UpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5saW5rUHJvZ3Jh
bShvYmplY3RPclplcm8ocHJvZ3JhbSkpOwotICAgIHByb2dyYW0tPmluY3JlYXNlTGlua0NvdW50
KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaShHQzNEZW51
bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOUEFDS19GTElQX1lfV0VCR0w6Ci0gICAgICAgIG1fdW5wYWNrRmxp
cFkgPSBwYXJhbTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOgotICAgICAgICBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEgPSBwYXJhbTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKLSAgICAgICAgaWYgKHBh
cmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wgfHwgcGFyYW0g
PT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpCi0gICAgICAgICAgICBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uID0gc3RhdGljX2Nhc3Q8R0MzRGVudW0+KHBhcmFtKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBVTlBBQ0tf
Q09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19B
TElHTk1FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoK
LSAgICAgICAgaWYgKHBhcmFtID09IDEgfHwgcGFyYW0gPT0gMiB8fCBwYXJhbSA9PSA0IHx8IHBh
cmFtID09IDgpIHsKLSAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UEFDS19BTElHTk1FTlQpCi0gICAgICAgICAgICAgICAgbV9wYWNrQWxpZ25tZW50ID0gcGFyYW07
Ci0gICAgICAgICAgICBlbHNlIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
OgotICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50ID0gcGFyYW07Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBhbGlnbm1lbnQi
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cG9s
eWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+cG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJh
eUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIER1ZSB0byBXZWJHTCdz
IHNhbWUtb3JpZ2luIHJlc3RyaWN0aW9ucywgaXQgaXMgbm90IHBvc3NpYmxlIHRvCi0gICAgLy8g
dGFpbnQgdGhlIG9yaWdpbiB1c2luZyB0aGUgV2ViR0wgQVBJLgotICAgIEFTU0VSVChjYW52YXMo
KS0+b3JpZ2luQ2xlYW4oKSk7Ci0gICAgLy8gVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycy4KLSAg
ICBpZiAoIXBpeGVscykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgInJlYWRQaXhlbHMiLCAibm8gZGVzdGluYXRpb24gQXJyYXlC
dWZmZXJWaWV3Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3dpdGNoIChmb3JtYXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBmb3JtYXQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJl
YWRQaXhlbHMiLCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiZm9ybWF0
IG5vdCBSR0JBIG9yIHR5cGUgbm90IFVOU0lHTkVEX0JZVEUiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAvLyBWYWxpZGF0ZSBhcnJheSB0eXBlIGFnYWluc3QgcGl4ZWwgdHlwZS4KLSAg
ICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVh
ZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21w
bGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZy
ZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCByZWFzb24pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIENhbGN1bGF0ZSBhcnJheSBzaXplLCB0YWtpbmcg
aW50byBjb25zaWRlcmF0aW9uIG9mIFBBQ0tfQUxJR05NRU5ULgotICAgIHVuc2lnbmVkIGludCB0
b3RhbEJ5dGVzUmVxdWlyZWQgPSAwOwotICAgIHVuc2lnbmVkIGludCBwYWRkaW5nID0gMDsKLSAg
ICBpZiAoIW1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKSB7Ci0gICAgICAgIEdDM0RlbnVtIGVy
cm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdp
ZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRp
bmcpOwotICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgInJlYWRQaXhlbHMiLCAiaW52
YWxpZCBkaW1lbnNpb25zIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgbGFyZ2UgZW5vdWdoIGZv
ciBkaW1lbnNpb25zIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VB
ZGRyZXNzKCk7Ci0KLSAgICB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmlu
ZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwot
ICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVhZG5QaXhlbHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMtPmJ5dGVMZW5ndGgoKSwgZGF0YSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotICAgIH0KLQotI2lmIE9TKERBUldJTikKLSAgICBpZiAo
bV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIC8vIHdlIGhhdmVuJ3QgY29tcHV0ZWQgcGFkZGlu
ZwotICAgICAgICBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlw
ZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAm
cGFkZGluZyk7Ci0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBkcml2
ZXIgYnVnIG9uIE1hYyBBTkQgdGhlIEdMRVMgZHJpdmVyIGJ1ZwotICAgIC8vIG9uIFFDIGlzIGZp
eGVkLCBpLmUuLCB3aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQKLSAgICAvLyBz
ZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KLSAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5k
aW5nICYmICFtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEpIHsKLSAgICAg
ICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oZGF0YSk7Ci0gICAgICAgIGZvciAoR0MzRHNpemVpIGl5ID0gMDsgaXkgPCBoZWlnaHQ7ICsr
aXkpIHsKLSAgICAgICAgICAgIGZvciAoR0MzRHNpemVpIGl4ID0gMDsgaXggPCB3aWR0aDsgKytp
eCkgewotICAgICAgICAgICAgICAgIHBpeGVsc1szXSA9IDI1NTsKLSAgICAgICAgICAgICAgICBw
aXhlbHMgKz0gNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBpeGVscyArPSBwYWRkaW5n
OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnJlbGVhc2VTaGFkZXJD
b21waWxlcigpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVy
U3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlk
IHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9yZW5kZXJidWZm
ZXJCaW5kaW5nIHx8ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
InJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAibm8gYm91bmQgcmVuZGVyYnVmZmVyIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoInJlbmRlcmJ1ZmZlclN0b3Jh
Z2UiLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQx
NjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I1X0ExOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKLSAgICAgICAgbV9j
b250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9y
bWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJ
c1ZhbGlkKHRydWUpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lk
dGgsIGhlaWdodCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUw6Ci0gICAgICAgIGlmIChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKSB7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBFeHRl
bnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDgsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0g
ICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKGlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKCkpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9y
bWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJl
bmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xl
YW4gaW52ZXJ0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2NvbnRleHQtPnNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRl
U2l6ZSgic2Npc3NvciIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9j
b250ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoInNoYWRlclNvdXJjZSIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHJpbmcg
c3RyaW5nV2l0aG91dENvbW1lbnRzID0gU3RyaXBDb21tZW50cyhzdHJpbmcpLnJlc3VsdCgpOwot
ICAgIGlmICghdmFsaWRhdGVTdHJpbmcoInNoYWRlclNvdXJjZSIsIHN0cmluZ1dpdGhvdXRDb21t
ZW50cykpCi0gICAgICAgIHJldHVybjsKLSAgICBzaGFkZXItPnNldFNvdXJjZShzdHJpbmcpOwot
ICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG9iamVjdE9yWmVybyhzaGFkZXIpLCBzdHJpbmdX
aXRob3V0Q29tbWVudHMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNp
bEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
dmFsaWRhdGVTdGVuY2lsRnVuYygic3RlbmNpbEZ1bmMiLCBmdW5jKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7Ci0gICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sg
PSByZWY7Ci0gICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOwotICAgIG1fc3RlbmNpbEZ1bmNN
YXNrQmFjayA9IG1hc2s7Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1h
c2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0
ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFz
aykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgZnVu
YykpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKGZhY2UpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgbV9zdGVuY2lsRnVuY1JlZiA9
IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7Ci0gICAgICAgIG1fc3Rl
bmNpbEZ1bmNNYXNrID0gbWFzazsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFz
azsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6Ci0g
ICAgICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNr
ID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFD
SzoKLSAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNp
bEZ1bmNNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJz
dGVuY2lsRnVuY1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYs
IG1hc2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2soR0Mz
RHVpbnQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7Ci0gICAgbV9zdGVuY2lsTWFza0Jh
Y2sgPSBtYXNrOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0R1aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAoZmFjZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZST05UX0FORF9CQUNLOgotICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKLSAg
ICAgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKLSAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s6Ci0gICAg
ICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgInN0ZW5jaWxNYXNrU2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1h
c2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE9wKEdDM0RlbnVt
IGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zdGVu
Y2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0Rl
bnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsT3BTZXBhcmF0
ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdl
IGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkLgotICAgIGVjID0gMDsKLSAgICBXZWJHTFRleHR1
cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOwotICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhJbWFnZTJEIiwg
Tm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSk7Ci0gICAgQVNTRVJUKHRleCk7Ci0gICAgQVNT
RVJUKCFsZXZlbCB8fCAhV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpOwotICAg
IGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIC8vIE5vdGU6IENocm9taXVtJ3MgT3BlbkdMIGltcGxl
bWVudGF0aW9uIGNsZWFycyB0ZXh0dXJlcyBhbmQgaXNSZXNvdXJjZVNhZmUoKSBpcyB0aGVyZWZv
cmUgdHJ1ZS4KLSAgICAgICAgLy8gRm9yIG90aGVyIGltcGxlbWVudGF0aW9ucywgaWYgdGhleSBh
cmUgdXNpbmcgQU5HTEVfZGVwdGhfdGV4dHVyZSwgQU5HTEUgZGVwdGggdGV4dHVyZXMKLSAgICAg
ICAgLy8gY2FuIG5vdCBiZSBjbGVhcmVkIHdpdGggdGV4SW1hZ2UyRCBhbmQgbXVzdCBiZSBjbGVh
cmVkIGJ5IGJpbmRpbmcgdG8gYW4gZmJvIGFuZCBjYWxsaW5nCi0gICAgICAgIC8vIGNsZWFyLgot
ICAgICAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+dGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGJvb2wgc3VjY2VlZCA9IG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgbV91bnBhY2tBbGlnbm1lbnQpOwotICAgICAgICAgICAgaWYgKCFzdWNjZWVkKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEFTU0VSVCh2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxm
b3JtYXQpKTsKLSAgICAgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPm1v
dmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgdGV4
SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vzbid0
IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCi0gICAgICAgICAgICB0ZXgtPm1hcmtJbnZh
bGlkKHRhcmdldCwgbGV2ZWwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCB0eXBlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdl
LCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBm
bGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBl
YyA9IDA7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRp
cGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PTkUpOwotICAgIGlmICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQg
PSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1hdCgpOwotICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKLSAg
ICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxE
YXRhKCk7Ci0KLSAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKLSAgICBpZiAodHlwZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9O
b3RoaW5nICYmICFmbGlwWSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBl
bHNlIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdl
UGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0
LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0
KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleEltYWdlMkQiLCAicGFja0ltYWdlIGVycm9yIik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0g
MSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsIGZvcm1hdCwg
dHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7
Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVu
Yyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBl
IGZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHNvdXJjZVR5cGUsIEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQp
Ci17Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgZnVu
Y3Rpb25UeXBlLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJH
TFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGZ1bmN0aW9uTmFtZSwg
dGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChmdW5jdGlvblR5cGUgPT0gTm90VGV4U3ViSW1hZ2UyRCkgewotICAgICAgICBp
ZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAvLyBGb3IgU291cmNlQXJyYXlCdWZm
ZXJWaWV3LCBmdW5jdGlvbiB2YWxpZGF0ZVRleEZ1bmNEYXRhKCkgd291bGQgaGFuZGxlIHdoZXRo
ZXIgdG8gdmFsaWRhdGUgdGhlIFNldHRhYmxlVGV4Rm9ybWF0Ci0gICAgICAgIC8vIGJ5IGNoZWNr
aW5nIGlmIHRoZSBBcnJheUJ1ZmZlclZpZXcgaXMgbnVsbCBvciBub3QuCi0gICAgICAgIGlmIChz
b3VyY2VUeXBlICE9IFNvdXJjZUFycmF5QnVmZmVyVmlldykgewotICAgICAgICAgICAgaWYgKCF2
YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXZhbGlkYXRlU2l6ZShmdW5jdGlv
bk5hbWUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAvLyBCZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBjaGVjayBpZiBv
dmVyZmxvdyBoYXBwZW5zIGZpcnN0LgotICAgICAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8
fCB5b2Zmc2V0ICsgaGVpZ2h0IDwgMCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJhZCBkaW1l
bnNpb25zIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8
IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0ZXh0dXJlLT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSAhPSBmb3JtYXQgfHwgdGV4dHVyZS0+Z2V0VHlw
ZSh0YXJnZXQsIGxldmVsKSAhPSB0eXBlKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5
cGUgYW5kIGZvcm1hdCBkbyBub3QgbWF0Y2ggdGV4dHVyZSIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVUZXhGdW5jRGF0YSgidGV4SW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscywgTnVsbEFsbG93ZWQpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1
bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcs
IHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLSAgICB2b2lkKiBkYXRhID0gcGl4
ZWxzID8gcGl4ZWxzLT5iYXNlQWRkcmVzcygpIDogMDsKLSAgICBWZWN0b3I8dWludDhfdD4gdGVt
cERhdGE7Ci0gICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKLSAgICBpZiAo
ZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7Ci0g
ICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fdW5wYWNrQWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKLSAgICAgICAgY2hhbmdlVW5wYWNr
QWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkK
LSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICBmb3Jt
YXQsIHR5cGUsIGRhdGEsIGVjKTsKLSAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhT
dWJJbWFnZTJELCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwg
MCkpCi0gICAgICAgIHJldHVybjsKLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBib29s
IG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKLSAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBp
cyBhbHdheXMgb2YgZm9ybWF0IFJHQkE4LgotICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVk
IGlmIGRlc3RpbmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBh
bmQgbm8gRmxpcCBvciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgaWYg
KCFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgJiYgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUpCi0gICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0
LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkK
LSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0
eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEo
KSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSogaW1hZ2UsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IGRldmljZVNjYWxlRmFjdG9yKQotewotICAgIEludFNpemUgc2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKLSAgICBzaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICBJbWFnZUJ1
ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOwotICAg
IGlmICghYnVmKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9p
bnQoKSwgaW1hZ2UtPnNpemUoKSk7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSk7Ci0gICAgYnVmLT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QpOwotICAgIHJldHVybiBidWYtPmNvcHlJbWFn
ZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhJbWFn
ZTJEIiwgaW1hZ2UsIGVjKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdlPiBp
bWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGlt
YWdlLT5yZW5kZXJlcigpKTsKLSAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkK
LSAgICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVu
ZGVyLmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKLQotICAgIGlm
ICghaW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRl
eFN1YkltYWdlMkQsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdo
dCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0ZXhJ
bWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBp
bWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFnZSwgbV91
bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNF
bGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50
KCJ0ZXhJbWFnZTJEIiwgY2FudmFzLCBlYykgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2Uy
RCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCAw
LCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJHTFRleHR1
cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0
LCB0cnVlKTsKLSAgICAvLyBJZiBwb3NzaWJsZSwgY29weSBmcm9tIHRoZSBjYW52YXMgZWxlbWVu
dCBkaXJlY3RseSB0byB0aGUgdGV4dHVyZQotICAgIC8vIHZpYSB0aGUgR1BVLCB3aXRob3V0IGEg
cmVhZC1iYWNrIHRvIHN5c3RlbSBtZW1vcnkuCi0gICAgLy8KLSAgICAvLyBGSVhNRTogcmVzdHJp
Y3Rpb24gb2YgKFJHQiB8fCBSR0JBKS9VTlNJR05FRF9CWVRFIHNob3VsZCBiZSBsaWZ0ZWQgd2hl
bgotICAgIC8vIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgaW1wbGVtZW50YXRp
b25zIGFyZSBmdWxseSBmdW5jdGlvbmFsLgotICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCA9PSB0YXJnZXQgJiYgdGV4dHVyZSAmJiB0eXBlID09IHRleHR1cmUtPmdldFR5cGUo
dGFyZ2V0LCBsZXZlbCkKLSAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkgJiYgdHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBJbWFnZUJ1ZmZlciogYnVm
ZmVyID0gY2FudmFzLT5idWZmZXIoKTsKLSAgICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNv
cHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwg
aW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkp
IHsKLSAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7Ci0gICAgaWYgKGltYWdlRGF0
YSkKLSAgICAgICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKLSAgICBlbHNlCi0gICAgICAgIHRleElt
YWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNh
bnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1f
dW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi0jaWYgRU5B
QkxFKFZJREVPKQotUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWRl
b0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgQmFja2luZ1N0b3JlQ29weSBi
YWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJbnRTaXplIHNpemUodmlk
ZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCkpOwotICAgIEltYWdlQnVmZmVy
KiBidWYgPSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7Ci0gICAgaWYg
KCFidWYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9V
VF9PRl9NRU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIEludFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICAvLyBGSVhNRTogVHVybiB0aGlzIGludG8gYSBHUFUt
R1BVIHRleHR1cmUgY29weSBpbnN0ZWFkIG9mIENQVSByZWFkYmFjay4KLSAgICB2aWRlby0+cGFp
bnRDdXJyZW50RnJhbWVJbkNvbnRleHQoYnVmLT5jb250ZXh0KCksIGRlc3RSZWN0KTsKLSAgICBy
ZXR1cm4gYnVmLT5jb3B5SW1hZ2UoYmFja2luZ1N0b3JlQ29weSk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhJ
bWFnZTJEIiwgdmlkZW8sIGVjKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFn
ZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hl
aWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBHbyB0aHJvdWdoIHRoZSBmYXN0IHBhdGggZG9pbmcgYSBHUFUtR1BVIHRleHR1cmVzIGNvcHkg
d2l0aG91dCBhIHJlYWRiYWNrIHRvIHN5c3RlbSBtZW1vcnkgaWYgcG9zc2libGUuCi0gICAgLy8g
T3RoZXJ3aXNlLCBpdCB3aWxsIGZhbGwgYmFjayB0byB0aGUgbm9ybWFsIFNXIHBhdGguCi0gICAg
Ly8gRklYTUU6IFRoZSBjdXJyZW50IHJlc3RyaWN0aW9ucyByZXF1aXJlIHRoYXQgZm9ybWF0IHNo
b3VkIGJlIFJHQiBvciBSR0JBLAotICAgIC8vIHR5cGUgc2hvdWxkIGJlIFVOU0lHTkVEX0JZVEUg
YW5kIGxldmVsIHNob3VsZCBiZSAwLiBJdCBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUuCi0g
ICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1h
Z2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJEID09IHRhcmdldCAmJiB0ZXh0dXJlCi0gICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpCi0gICAg
ICAgICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAg
JiYgKHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpCi0gICAg
ICAgICYmICFsZXZlbCkgewotICAgICAgICBpZiAodmlkZW8tPmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBsZXZlbCwg
dHlwZSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tG
bGlwWSkpIHsKLSAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0
KCksIHR5cGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9G
cmFtZVRvSW1hZ2UodmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBlYyk7
Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRleEltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBH
cmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rm
bG9hdCBwYXJhbWYsIEdDM0RpbnQgcGFyYW1pLCBib29sIGlzRmxvYXQpCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVy
ZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBm
YWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKHBuYW1l
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgIGlmICgoaXNGbG9h
dCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1m
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1mICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpSRVBFQVQpCi0gICAgICAgICAgICB8fCAoIWlzRmxvYXQgJiYgcGFyYW1p
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtaSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkVQRUFUKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIsIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChpc0Zsb2F0KSB7Ci0gICAgICAgIHRleC0+c2V0UGFyYW1ldGVyZihwbmFt
ZSwgcGFyYW1mKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5h
bWUsIHBhcmFtZik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJpKHBu
YW1lLCBwYXJhbWkpOwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgcGFyYW1pKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBw
YXJhbSkKLXsKLSAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgcGFyYW0sIDAsIHRydWUp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyaShHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIHRleFBhcmFt
ZXRlcih0YXJnZXQsIHBuYW1lLCAwLCBwYXJhbSwgZmFsc2UpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRklYTUU6IEZvciBu
b3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKLSAgICBlYyA9IDA7Ci0gICAgQVNTRVJU
KCFpc0NvbnRleHRMb3N0KCkpOwotICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJz
KCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUpKTsKLSAgICBBU1NFUlQodmFsaWRhdGVTaXpl
KCJ0ZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkpOwotICAgIEFTU0VSVCh2YWxpZGF0
ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0KSk7Ci0gICAgV2ViR0xU
ZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJEIiwgdGFy
Z2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQoKHhvZmZzZXQgKyB3aWR0aCkg
Pj0gMCk7Ci0gICAgQVNTRVJUKCh5b2Zmc2V0ICsgaGVpZ2h0KSA+PSAwKTsKLSAgICBBU1NFUlQo
dGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSA+PSAoeG9mZnNldCArIHdpZHRoKSk7Ci0gICAg
QVNTRVJUKHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpID49ICh5b2Zmc2V0ICsgaGVpZ2h0
KSk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgPT0g
Zm9ybWF0KTsKLSAgICBBU1NFUlQodGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IHR5cGUp
OwotICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFn
ZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0Nv
bG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsgIAotICAgIGlm
ICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2Uy
RCIsICJiYWQgaW1hZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1h
Z2VTb3VyY2VGb3JtYXQoKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9w
ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7Ci0gICAgY29uc3Qgdm9pZCogaW1hZ2VQ
aXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVsRGF0YSgpOwotCi0gICAgYm9vbCBu
ZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBh
bHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCi0g
ICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICgh
bV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0
eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1h
Z2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5p
bWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJE
IiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0g
ICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1h
Z2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgZm9ybWF0LCB0eXBlLCAgbmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7Ci0gICAgaWYgKG1fdW5wYWNr
QWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1YkltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxOb3RBbGxvd2VkKQotICAgICAgICB8fCAhdmFs
aWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlC
dWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1h
dCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLSAgICB2b2lkKiBk
YXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOwotICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0
YTsKLSAgICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOwotICAgIGlmIChkYXRh
ICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKLSAgICAg
ICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91
bnBhY2tBbGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcERhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOwotICAgICAgICBjaGFuZ2VVbnBhY2tBbGln
bm1lbnQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKLSAgICBp
ZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhcGl4
ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBT
b3VyY2VJbWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgIHBpeGVscy0+d2lkdGgoKSwg
cGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgYm9vbCBuZWVk
Q29udmVyc2lvbiA9IHRydWU7Ci0gICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3
YXlzIG9mIGZvcm1hdCBSR0JBOC4KLSAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBk
ZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5v
IEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmIChmb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSAmJiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAg
ICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlw
ZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0g
ICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQsIDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9ybWF0LCB0
eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEo
KSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdl
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJbWFnZTJE
IiwgaW1hZ2UsIGVjKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdlPiBpbWFn
ZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdl
LT5yZW5kZXJlcigpKTsKLSAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKLSAg
ICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVy
LmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKLQotICAgIGlmICgh
aW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1
YkltYWdlMkQsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwg
aW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9y
bWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGV4
U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0
eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFn
ZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgY2FudmFzLCBlYykKLSAgICAg
ICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNv
dXJjZUhUTUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGNhbnZhcy0+d2lk
dGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0g
Y2FudmFzLT5nZXRJbWFnZURhdGEoKTsKLSAgICBpZiAoaW1hZ2VEYXRhKQotICAgICAgICB0ZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2VEYXRhLmdldCgpLCBlYyk7Ci0gICAgZWxzZQotICAgICAgICB0ZXhTdWJJbWFnZTJESW1w
bCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+
Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNr
RmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi0jaWYgRU5BQkxFKFZJ
REVPKQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCB2aWRlbywgZWMpCi0g
ICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJE
LCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHZpZGVvLT52
aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZz
ZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9k
ZSgpLCBlYyk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRleFN1Yklt
YWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotI2VuZGlmCi0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMWYiLCAibG9jYXRpb24gbm90IGZvciBj
dXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4
dC0+dW5pZm9ybTFmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4KTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCAxKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwg
MSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50
IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTFpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoKGxvY2F0aW9uLT50eXBlKCkgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKSAmJiB4ID49IChpbnQpbV90ZXh0dXJlVW5pdHMuc2l6
ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidW5pZm9ybTFpIiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShsb2NhdGlvbi0+bG9j
YXRpb24oKSwgeCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3Jt
MWl2IiwgbG9jYXRpb24sIHYsIDEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRp
b24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+
dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSX0NVQkUpCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
di0+ZGF0YSgpW2ldID49IHN0YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSkg
ewotICAgICAgICAgICAgICAgIExPRyhXZWJHTCwgIlRleHR1cmUgdW5pdCBzaXplPSV6dSwgdlsl
ZF09JWQuIExvY2F0aW9uIHR5cGUgPSAlMDRYLiIsIG1fdGV4dHVyZVVuaXRzLnNpemUoKSwgaSwg
di0+ZGF0YSgpW2ldLCBsb2NhdGlvbi0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYi
LCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCksIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2
LCBzaXplLCAxKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT50eXBlKCkg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmICgoKEdDM0RpbnQqKXYpW2ldID49IHN0YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5pdHMu
c2l6ZSgpKSkgewotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5p
dCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplLCB2
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
bmlmb3JtMmYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB4LCB5KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5p
Zm9ybTJmdiIsIGxvY2F0aW9uLCB2LCAyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250
ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDIsIHYt
PmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKCJ1bmlmb3JtMmZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUg
LyAyLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
InVuaWZvcm0yaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmkobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHgsIHkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5p
Zm9ybTJpdiIsIGxvY2F0aW9uLCB2LCAyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250
ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDIsIHYt
PmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVp
IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cygidW5pZm9ybTJpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8g
Miwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHks
IEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9n
cmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgInVuaWZvcm0zZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJv
Z3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3Jt
M2YobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYsIDMpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwg
MykpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgc2l6ZSAvIDMsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFs
b2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkg
IT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2kiLCAibG9jYXRpb24gbm90
IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
Y29udGV4dC0+dW5pZm9ybTNpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlvbiwgdiwg
MykpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlv
biwgdiwgc2l6ZSwgMykpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9y
bTNpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDMsIHYpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0
IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTRmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00Zihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgNCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVu
Z3RoKCkgLyA0LCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gNCwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3Jh
bSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTRpIiwgImxvY2F0aW9u
IG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRp
b24sIHYsIDQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2Iiwg
bG9jYXRpb24sIHYsIHNpemUsIDQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQt
PnVuaWZvcm00aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB2KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJh
eSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24t
PmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRy
YW5zcG9zZSwgdiwgc2l6ZSwgNCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB0cmFuc3Bvc2Us
IHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNw
b3NlLCB2LCA5KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA5LCB0cmFuc3Bvc2UsIHYt
PmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgzZnYi
LCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA5KSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAv
IDksIHRyYW5zcG9zZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxv
Y2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDE2KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAx
NiwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1
bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgMTYpKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCBzaXplIC8gMTYsIHRyYW5zcG9zZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7Ci0g
ICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgidXNlUHJvZ3JhbSIsIHByb2dyYW0sIGRlbGV0
ZWQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIHByb2dyYW0g
PSAwOwotICAgIGlmIChwcm9ncmFtICYmICFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidXNlUHJvZ3JhbSIsICJwcm9ncmFtIG5vdCB2YWxpZCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtICE9IHByb2dyYW0pIHsKLSAgICAgICAg
aWYgKG1fY3VycmVudFByb2dyYW0pCi0gICAgICAgICAgICBtX2N1cnJlbnRQcm9ncmFtLT5vbkRl
dGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpOwotICAgICAgICBtX2N1cnJlbnRQcm9ncmFtID0g
cHJvZ3JhbTsKLSAgICAgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9n
cmFtKSk7Ci0gICAgICAgIGlmIChwcm9ncmFtKQotICAgICAgICAgICAgcHJvZ3JhbS0+b25BdHRh
Y2hlZCgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
UHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgidmFsaWRhdGVQcm9ncmFtIiwgcHJvZ3JhbSkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2NvbnRleHQtPnZhbGlkYXRlUHJvZ3JhbShvYmplY3RPclplcm8ocHJv
Z3JhbSkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgi
dmVydGV4QXR0cmliMWYiLCBpbmRleCwgMSwgdjAsIDAuMGYsIDAuMGYsIDEuMGYpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4
LCBGbG9hdDMyQXJyYXkqIHYpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRy
aWIxZnYiLCBpbmRleCwgdiwgMSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwg
diwgc2l6ZSwgMSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCi17Ci0gICAg
dmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjJmIiwgaW5kZXgsIDIsIHYwLCB2MSwgMC4w
ZiwgMS4wZik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIy
ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJm
dkltcGwoInZlcnRleEF0dHJpYjJmdiIsIGluZGV4LCB2LCAyKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0
KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0
dHJpYjJmdiIsIGluZGV4LCB2LCBzaXplLCAyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0Rm
bG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhB
dHRyaWIzZiIsIGluZGV4LCAzLCB2MCwgdjEsIHYyLCAxLjBmKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFy
cmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5k
ZXgsIHYsIDMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
M2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAg
IHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYsIHNpemUsIDMp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0Rm
bG9hdCB2MykKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliNGYiLCBpbmRl
eCwgNCwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCi17Ci0gICAg
dmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgdiwgNCk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJ
bXBsKCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgdiwgc2l6ZSwgNCk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBH
QzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0Rz
aXplaSBzdHJpZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkJZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VDoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIi
LCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGluZGV4
ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW5k
ZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHNpemUg
PCAxIHx8IHNpemUgPiA0IHx8IHN0cmlkZSA8IDAgfHwgc3RyaWRlID4gMjU1IHx8IG9mZnNldCA8
IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImJhZCBzaXplLCBzdHJpZGUgb3Igb2Zm
c2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZm
ZXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJubyBib3VuZCBBUlJBWV9CVUZG
RVIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIG51bWJl
ciBvZiBlbGVtZW50cyB0aGUgYm91bmQgYnVmZmVyIGNhbiBob2xkLCBnaXZlbiB0aGUgb2Zmc2V0
LCBzaXplLCB0eXBlIGFuZCBzdHJpZGUKLSAgICB1bnNpZ25lZCBpbnQgdHlwZVNpemUgPSBzaXpl
SW5CeXRlcyh0eXBlKTsKLSAgICBpZiAoIXR5cGVTaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2lu
dGVyIiwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgo
c3RyaWRlICUgdHlwZVNpemUpIHx8IChzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpICUg
dHlwZVNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAic3RyaWRlIG9yIG9m
ZnNldCBub3QgdmFsaWQgZm9yIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBH
QzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5cGVTaXplOwotCi0gICAgbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgYnl0ZXNQZXJF
bGVtZW50LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXRpY19jYXN0PEdDM0Rp
bnRwdHI+KG9mZnNldCksIG1fYm91bmRBcnJheUJ1ZmZlcik7Ci0gICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0
YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoInZpZXdwb3J0Iiwgd2lkdGgs
IGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KHgsIHks
IHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VM
b3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAibG9zZUNvbnRl
eHQiLCAiY29udGV4dCBhbHJlYWR5IGxvc3QiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fY29udGV4dEdyb3VwLT5sb3NlQ29udGV4dEdyb3VwKG1vZGUpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0TG9zdCA9IHRydWU7Ci0gICAgbV9jb250ZXh0
TG9zdE1vZGUgPSBtb2RlOwotCi0gICAgaWYgKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSB7Ci0g
ICAgICAgIC8vIEluZm9ybSB0aGUgZW1iZWRkZXIgdGhhdCBhIGxvc3QgY29udGV4dCB3YXMgcmVj
ZWl2ZWQuIEluIHJlc3BvbnNlLCB0aGUgZW1iZWRkZXIgbWlnaHQKLSAgICAgICAgLy8gZGVjaWRl
IHRvIHRha2UgYWN0aW9uIHN1Y2ggYXMgYXNraW5nIHRoZSB1c2VyIGZvciBwZXJtaXNzaW9uIHRv
IHVzZSBXZWJHTCBhZ2Fpbi4KLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5k
b2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCku
ZGlkTG9zZVdlYkdMQ29udGV4dChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhp
Y3NSZXNldFN0YXR1c0FSQigpKTsKLSAgICB9Ci0KLSAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmpl
Y3RzKCk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIE1ha2UgYWJz
b2x1dGVseSBzdXJlIHdlIGRvIG5vdCByZWZlciB0byBhbiBhbHJlYWR5LWRlbGV0ZWQgdGV4dHVy
ZSBvciBmcmFtZWJ1ZmZlci4KLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRUZXh0dXJlMkRC
aW5kaW5nKDApOwotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGlu
ZygwKTsKLSAgICB9Ci0KLSAgICAvLyBUaGVyZSBpcyBubyBkaXJlY3Qgd2F5IHRvIGNsZWFyIGVy
cm9ycyBmcm9tIGEgR0wgaW1wbGVtZW50YXRpb24gYW5kCi0gICAgLy8gbG9vcGluZyB1bnRpbCBn
ZXRFcnJvcigpIGJlY29tZXMgTk9fRVJST1IgbWlnaHQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBp
ZgotICAgIC8vIHRoZSBkcml2ZXIgb3IgY29udGV4dCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBidWcu
IFNvLCBsb29wIGEgcmVhc29uYWJseQotICAgIC8vIGxhcmdlIG51bWJlciBvZiB0aW1lcyB0byBj
bGVhciBhbnkgZXhpc3RpbmcgZXJyb3JzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyAr
K2kpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9fRVJST1IpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQ29uc29sZURp
c3BsYXlQcmVmZXJlbmNlIGRpc3BsYXkgPSAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpID8gRGlz
cGxheUluQ29uc29sZTogRG9udERpc3BsYXlJbkNvbnNvbGU7Ci0gICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTCwgImxvc2VDb250ZXh0Iiwg
ImNvbnRleHQgbG9zdCIsIGRpc3BsYXkpOwotCi0gICAgLy8gRG9uJ3QgYWxsb3cgcmVzdG9yYXRp
b24gdW5sZXNzIHRoZSBjb250ZXh0IGxvc3QgZXZlbnQgaGFzIGJvdGggYmVlbgotICAgIC8vIGRp
c3BhdGNoZWQgYW5kIGl0cyBkZWZhdWx0IGJlaGF2aW9yIHByZXZlbnRlZC4KLSAgICBtX3Jlc3Rv
cmVBbGxvd2VkID0gZmFsc2U7Ci0KLSAgICAvLyBBbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9m
IHRoZSBjb250ZXh0IGxvc3QgZXZlbnQsIHRvIGltcGxlbWVudAotICAgIC8vIHRoZSBzcGVjIGJl
aGF2aW9yIG9mIHF1ZXVlaW5nIGEgdGFzay4KLSAgICBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVu
dFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZvcmNlUmVzdG9yZUNvbnRleHQoKQotewotICAgIGlmICghaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQgbm90IGxvc3QiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXN0b3JlQWxsb3dlZCkgewotICAg
ICAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gU3ludGhldGljTG9zdENvbnRleHQpCi0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IHJlc3RvcmF0aW9uIG5vdCBhbGxvd2Vk
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzdG9yZVRpbWVyLmlz
QWN0aXZlKCkpCi0gICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
UGxhdGZvcm1MYXllciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gKCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbikgPyBtX2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKSA6IDA7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmpl
Y3QqIG9iamVjdCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2JqZWN0KG9iamVjdCk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRTaGFyZWRPYmplY3QoV2ViR0xT
aGFyZWRPYmplY3QqIG9iamVjdCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7Ci0g
ICAgbV9jb250ZXh0R3JvdXAtPmFkZE9iamVjdChvYmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9i
amVjdCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2NvbnRleHRPYmplY3RzLnJlbW92ZShvYmplY3QpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmpl
Y3QqIG9iamVjdCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7Ci0gICAgbV9jb250
ZXh0T2JqZWN0cy5hZGQob2JqZWN0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxlIChtX2NvbnRleHRPYmpl
Y3RzLnNpemUoKSA+IDApIHsKLSAgICAgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPjo6
aXRlcmF0b3IgaXQgPSBtX2NvbnRleHRPYmplY3RzLmJlZ2luKCk7Ci0gICAgICAgICgqaXQpLT5k
ZXRhY2hDb250ZXh0KCk7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdG9wKCkKLXsKLSAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIGZvcmNlTG9z
dENvbnRleHQoU3ludGhldGljTG9zdENvbnRleHQpOwotICAgICAgICBkZXN0cm95R3JhcGhpY3ND
b250ZXh0M0QoKTsKLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEJvb2xlYW5QYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGJvb2xl
YW4gdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsICZ2YWx1ZSk7
Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOwotfQot
Ci1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFuQXJyYXlQYXJh
bWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9XUklURU1BU0spIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygwLCAwKTsKLSAgICB9Ci0gICAgR0MzRGJvb2xlYW4gdmFs
dWVbNF0gPSB7MH07Ci0gICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOwot
ICAgIGJvb2wgYm9vbFZhbHVlWzRdOwotICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCA0OyArK2lp
KQotICAgICAgICBib29sVmFsdWVbaWldID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbaWldKTsK
LSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGJvb2xWYWx1ZSwgNCk7Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZsb2F0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1l
KQotewotICAgIEdDM0RmbG9hdCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRGbG9hdHYo
cG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci19Ci0KLVdl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEludFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKLXsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwot
fQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdl
dEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotfQotCi1XZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGZsb2F0IHZhbHVlWzRdID0gezB9OwotICAgIG1fY29u
dGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsK
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNF
RF9QT0lOVF9TSVpFX1JBTkdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURf
TElORV9XSURUSF9SQU5HRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5H
RToKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfQ09MT1I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotICAgIHJldHVybiBX
ZWJHTEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotfQotCi1X
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJHTEludEFycmF5UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07Ci0gICAg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9WSUVXUE9SVF9ESU1TOgotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpWSUVXUE9SVDoKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgYm9vbCBwcmVwYXJlVG9EcmF3KQotewotICAgIGJv
b2wgcmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7Ci0gICAgV2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0
ZW5zaW9uRmxhZyBleHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8V2ViR0xUZXh0dXJlOjpUZXh0dXJl
RXh0ZW5zaW9uRmxhZz4oKG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyID8gV2ViR0xUZXh0dXJlOjpU
ZXh0dXJlRXh0ZW5zaW9uRmxvYXRMaW5lYXJFbmFibGVkIDogMCkgfCAobV9vZXNUZXh0dXJlSGFs
ZkZsb2F0TGluZWFyID8gV2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uSGFsZkZsb2F0TGlu
ZWFyRW5hYmxlZCA6IDApKTsKLQotICAgIGZvciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IG1fdGV4
dHVyZVVuaXRzLnNpemUoKTsgKytpaSkgewotICAgICAgICBpZiAoKG1fdGV4dHVyZVVuaXRzW2lp
XS50ZXh0dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5n
LT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICB8fCAobV90
ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tp
aV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9u
cykpKSB7Ci0gICAgICAgICAgICBpZiAoaWkgIT0gbV9hY3RpdmVUZXh0dXJlVW5pdCkgewotICAg
ICAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShpaSk7Ci0gICAgICAgICAgICAg
ICAgcmVzZXRBY3RpdmVVbml0ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzZXRB
Y3RpdmVVbml0KSB7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlp
KTsKLSAgICAgICAgICAgICAgICByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4MkQ7Ci0gICAgICAgICAgICBXZWJHTFRl
eHR1cmUqIHRleEN1YmVNYXA7Ci0gICAgICAgICAgICBpZiAocHJlcGFyZVRvRHJhdykgewotICAg
ICAgICAgICAgICAgIFN0cmluZyBtc2coU3RyaW5nKCJ0ZXh0dXJlIGJvdW5kIHRvIHRleHR1cmUg
dW5pdCAiKSArIFN0cmluZzo6bnVtYmVyKGlpKQotICAgICAgICAgICAgICAgICAgICArICIgaXMg
bm90IHJlbmRlcmFibGUuIEl0IG1heWJlIG5vbi1wb3dlci1vZi0yIGFuZCBoYXZlIGluY29tcGF0
aWJsZSB0ZXh0dXJlIGZpbHRlcmluZyBvciBpcyBub3QgJ3RleHR1cmUgY29tcGxldGUnLCIKLSAg
ICAgICAgICAgICAgICAgICAgKyAiIG9yIGl0IGlzIGEgZmxvYXQvaGFsZi1mbG9hdCB0eXBlIHdp
dGggbGluZWFyIGZpbHRlcmluZyBhbmQgd2l0aG91dCB0aGUgcmVsZXZhbnQgZmxvYXQvaGFsZi1m
bG9hdCBsaW5lYXIgZXh0ZW5zaW9uIGVuYWJsZWQuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRH
TFdhcm5pbmdUb0NvbnNvbGUoZnVuY3Rpb25OYW1lLCBtc2cudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICAgICAgdGV4MkQgPSBtX2JsYWNrVGV4dHVyZTJELmdldCgpOwotICAgICAgICAgICAg
ICAgIHRleEN1YmVNYXAgPSBtX2JsYWNrVGV4dHVyZUN1YmVNYXAuZ2V0KCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRleDJEID0gbV90ZXh0dXJlVW5pdHNbaWldLnRl
eHR1cmUyREJpbmRpbmcuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgdGV4Q3ViZU1hcCA9IG1fdGV4
dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmcgJiYg
bV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVy
ZShleHRlbnNpb25zKSkKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8odGV4MkQpKTsKLSAgICAg
ICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1f
dGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4
dHVyZShleHRlbnNpb25zKSkKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBvYmplY3RPclplcm8odGV4Q3Vi
ZU1hcCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXNldEFjdGl2ZVVuaXQpCi0gICAg
ICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmVVbml0KTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4
MSgpCi17Ci0gICAgdW5zaWduZWQgY2hhciBibGFja1tdID0gezAsIDAsIDAsIDI1NX07Ci0gICAg
bV9ibGFja1RleHR1cmUyRCA9IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2JsYWNrVGV4dHVyZTJELT5v
YmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7Ci0gICAgbV9ibGFja1RleHR1cmVDdWJl
TWFwID0gY3JlYXRlVGV4dHVyZSgpOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC0+b2Jq
ZWN0KCkpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwg
MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwot
ICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1osIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIDAp
OwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXhJbnRlcm5hbEZvcm1hdENv
bG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChHQzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0KQotewotICAgIHVuc2ln
bmVkIG5lZWQgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdCh0ZXhJ
bnRlcm5hbEZvcm1hdCk7Ci0gICAgdW5zaWduZWQgaGF2ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRDaGFubmVsQml0c0J5Rm9ybWF0KGNvbG9yQnVmZmVyRm9ybWF0KTsKLSAgICByZXR1cm4gKG5l
ZWQgJiBoYXZlKSA9PSBuZWVkOwotfQotCi1HQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpCi17Ci0gICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0
dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlckZvcm1hdCgpOwotICAgIGlm
IChtX2F0dHJpYnV0ZXMuYWxwaGEpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQTsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKLX0KLQotaW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCkKLXsKLSAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQot
ICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyV2lkdGgo
KTsKLSAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCku
d2lkdGgoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgp
OwotfQotCi1pbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVp
Z2h0KCkKLXsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9iamVjdCgpKQotICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdl
dENvbG9yQnVmZmVySGVpZ2h0KCk7Ci0gICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJh
d2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1l
YnVmZmVyU2l6ZSgpLmhlaWdodCgpOwotfQotCi1XZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApCi17Ci0gICAgV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlID0gbnVsbHB0cjsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIHRleHR1cmUgPSBt
X3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgaWYgKCF1c2VTaXhFbnVtc0ZvckN1YmVN
YXApIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIHRleHR1cmUgPSBt
X3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcu
Z2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVA6Ci0gICAgICAgIGlmICh1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0
c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVy
ZSB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGlmICghdGV4
dHVyZSkKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyB0ZXh0dXJlIik7Ci0gICAgcmV0dXJuIHRl
eHR1cmU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUxvY2F0aW9u
TGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17
Ci0gICAgY29uc3QgdW5zaWduZWQgbWF4V2ViR0xMb2NhdGlvbkxlbmd0aCA9IDI1NjsKLSAgICBp
ZiAoc3RyaW5nLmxlbmd0aCgpID4gbWF4V2ViR0xMb2NhdGlvbkxlbmd0aCkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAibG9jYXRpb24gbGVuZ3RoID4gMjU2Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSkKLXsKLSAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInNp
emUgPCAwIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0cmluZyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZUNoYXJhY3RlcihzdHJpbmdbaV0pKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic3RyaW5n
IG5vdCBBU0NJSSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBzd2l0Y2gg
KGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQ09NUE9ORU5UOgotICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJkZXB0aCB0ZXh0dXJlIGZvcm1h
dHMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
U0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzVfNV8xOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVDoKLSAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUZsb2F0KQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKLSAg
ICAgICAgaWYgKG1fb2VzVGV4dHVyZUhhbGZGbG9hdCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVy
ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUg
dHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5
cGUgaXMgc3VwcG9ydGVkLgotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNF
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAg
aWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAg
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUCi0gICAgICAgICAgICAmJiB0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjoKLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX1NIT1JUXzVfNl81Ci0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9G
TE9BVF9PRVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBS
R0IgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAgaWYg
KHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgICYm
IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQKLSAgICAg
ICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81
XzEKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUCi0gICAg
ICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIFJHQkEgZm9ybWF0Iik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgotICAgICAgICBpZiAo
IW1fd2ViZ2xEZXB0aFRleHR1cmUpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9y
bWF0LiBERVBUSF9DT01QT05FTlQgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0lOVCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUg
Zm9yIERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAobGV2ZWwgPiAwKSB7Ci0gICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJsZXZlbCBtdXN0IGJlIDAgZm9yIERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKLSAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICAgICAgaWYgKCFtX3dlYmdsRGVw
dGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhf
U1RFTkNJTCBub3QgZW5hYmxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRf
MjRfOCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIERFUFRI
X1NURU5DSUwgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGxldmVsID4gMCkgewotICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2ZWwg
bXVzdCBiZSAwIGZvciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOwotICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKQotewotICAgIGlm
IChsZXZlbCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIDwgMCIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgaWYgKGxldmVsID49IG1fbWF4VGV4
dHVyZUxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgIGlmIChsZXZlbCA+PSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWwpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gVGhp
cyBmdW5jdGlvbiBvbmx5IGNoZWNrcyBpZiBsZXZlbCBpcyBsZWdhbCwgc28gd2UgcmV0dXJuIHRy
dWUgYW5kIGRvbid0Ci0gICAgLy8gZ2VuZXJhdGUgSU5WQUxJRF9FTlVNIGlmIHRhcmdldCBpcyBp
bGxlZ2FsLgotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhG
dW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUp
Ci17Ci0gICAgLy8gV2UgYWJzb2x1dGVseSBoYXZlIHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQgYW5k
IHR5cGUgY29tYmluYXRpb24uCi0gICAgLy8gVGhlIHRleEltYWdlMkQgZW50cnkgcG9pbnRzIHRh
a2luZyBIVE1MSW1hZ2UsIGV0Yy4gd2lsbCBwcm9kdWNlCi0gICAgLy8gdGVtcG9yYXJ5IGRhdGEg
YmFzZWQgb24gdGhpcyBjb21iaW5hdGlvbiwgc28gaXQgbXVzdCBiZSBsZWdhbC4KLSAgICBpZiAo
IXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUs
IGxldmVsKSB8fCAhdmFsaWRhdGVUZXhGdW5jTGV2ZWwoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxl
dmVsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWln
aHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHQzNEaW50IG1heFRleHR1cmVTaXplRm9y
TGV2ZWwgPSBwb3coMi4wLCBtX21heFRleHR1cmVMZXZlbCAtIDEgLSBsZXZlbCk7Ci0gICAgc3dp
dGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgot
ICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsIHx8IGhlaWdodCA+IG1h
eFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo
ZWlnaHQgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gVGV4
U3ViSW1hZ2UyRCAmJiB3aWR0aCAhPSBoZWlnaHQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3
aWR0aCAhPSBoZWlnaHQgZm9yIGN1YmUgbWFwIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBoZWlnaHQgaGVyZS4gRm9y
IHRleEltYWdlIHdpZHRoID09IGhlaWdodC4KLSAgICAgICAgLy8gRm9yIHRleFN1YkltYWdlIHRo
YXQgd2lsbCBiZSBjaGVja2VkIHdoZW4gY2hlY2tpbmcgeW9mZnNldCArIGhlaWdodCBpcyBpbiBy
YW5nZS4KLSAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UgZm9yIGN1YmUg
bWFwIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gaW50ZXJuYWxm
b3JtYXQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChib3JkZXIpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImJvcmRlciAhPSAwIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IGxl
dmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZm
ZXJWaWV3KiBwaXhlbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOdWxsRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pCi17Ci0gICAgaWYgKCFwaXhlbHMp
IHsKLSAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IE51bGxBbGxvd2VkKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlw
ZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9y
bWF0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAgICAgaWYgKHBpeGVs
cy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgInR5cGUgVU5TSUdORURfQllURSBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBpZiAo
cGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDE2KSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgInR5cGUgVU5TSUdORURfU0hPUlQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWlu
dDE2QXJyYXkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1
cmVfZmxvYXQKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZUZsb2F0
MzIpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBGTE9BVCBidXQgQXJyYXlCdWZm
ZXJWaWV3IG5vdCBGbG9hdDMyQXJyYXkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxG
X0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAotICAgICAgICAvLyBBcyBwZXIg
dGhlIHNwZWNpZmljYXRpb24sIEFycmF5QnVmZmVyVmlldyBzaG91bGQgYmUgbnVsbCB3aGVuCi0g
ICAgICAgIC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgaXMgZW5hYmxlZC4KLSAgICAgICAgaWYg
KHBpeGVscykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEhBTEZfRkxPQVRfT0VT
IGJ1dCBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IE5VTEwiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgdG90YWxCeXRl
c1JlcXVpcmVkOwotICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VT
aXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50
LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKLSAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZGltZW5zaW9ucyIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNS
ZXF1aXJlZCkgewotICAgICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkgewotICAgICAg
ICAgIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5
cGUsIHdpZHRoLCBoZWlnaHQsIDEsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsIDApOwotICAgICAgICAg
IGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA9PSB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciBy
ZXF1ZXN0IHdpdGggVU5QQUNLX0FMSUdOTUVOVCA+IDEiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJh
eUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3QiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQpCi17
Ci0gICAgcmV0dXJuIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCk7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhG
dW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMp
Ci17Ci0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0
IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGJ5dGVzUmVxdWlyZWQg
PSAwOwotCi0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfQVRDX1JHQl9BTUQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tT
aXplID0gODsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7Ci0gICAgICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgICAgIGludCBudW1CbG9j
a3NBY3Jvc3MgPSAod2lkdGggKyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lkdGg7Ci0gICAg
ICAgICAgICBpbnQgbnVtQmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAv
IGtCbG9ja0hlaWdodDsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jv
c3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhB
X0FNRDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBP
TEFURURfQUxQSEFfQU1EOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2Nr
U2l6ZSA9IDE2OwotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKLSAgICAg
ICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OwotICAgICAgICAgICAgaW50IG51bUJs
b2Nrc0Fjcm9zcyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKLSAg
ICAgICAgICAgIGludCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEp
IC8ga0Jsb2NrSGVpZ2h0OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fj
cm9zcyAqIG51bUJsb2Nrc0Rvd24gKiBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFf
SU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYx
X0lNRzoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4Owot
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gODsKLSAgICAgICAgICAgIGNvbnN0
IGludCBrQmxvY2tIZWlnaHQgPSA4OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6
Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQp
ICogNCArIDcpIC8ga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKLSAgICAgICAgICAg
IGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDE2OwotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9j
a0hlaWdodCA9IDg7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRo
LCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiAyICsgNykg
LyBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgIT0gYnl0ZXNSZXF1aXJlZCkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibGVuZ3RoIG9mIEFycmF5QnVmZmVyVmlldyBpcyBub3QgY29y
cmVjdCBmb3IgZGltZW5zaW9ucyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7Ci0gICAgICAgIGNvbnN0IEdD
M0RzaXplaSBrQmxvY2tXaWR0aCA9IDQ7Ci0gICAgICAgIGNvbnN0IEdDM0RzaXplaSBrQmxvY2tI
ZWlnaHQgPSA0OwotICAgICAgICBjb25zdCBHQzNEaW50IG1heFRleHR1cmVTaXplID0gdGFyZ2V0
ID8gbV9tYXhUZXh0dXJlU2l6ZSA6IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOwotICAgICAgICBj
b25zdCBHQzNEc2l6ZWkgbWF4Q29tcHJlc3NlZERpbWVuc2lvbiA9IG1heFRleHR1cmVTaXplID4+
IGxldmVsOwotICAgICAgICBib29sIHdpZHRoVmFsaWQgPSAobGV2ZWwgJiYgd2lkdGggPT0gMSkg
fHwgKGxldmVsICYmIHdpZHRoID09IDIpIHx8ICghKHdpZHRoICUga0Jsb2NrV2lkdGgpICYmIHdp
ZHRoIDw9IG1heENvbXByZXNzZWREaW1lbnNpb24pOwotICAgICAgICBib29sIGhlaWdodFZhbGlk
ID0gKGxldmVsICYmIGhlaWdodCA9PSAxKSB8fCAobGV2ZWwgJiYgaGVpZ2h0ID09IDIpIHx8ICgh
KGhlaWdodCAlIGtCbG9ja0hlaWdodCkgJiYgaGVpZ2h0IDw9IG1heENvbXByZXNzZWREaW1lbnNp
b24pOwotICAgICAgICBpZiAoIXdpZHRoVmFsaWQgfHwgIWhlaWdodFZhbGlkKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQ
UFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQ
UFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRC
UFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18y
QlBQVjFfSU1HOgotICAgICAgICAvLyBIZWlnaHQgYW5kIHdpZHRoIG11c3QgYmUgcG93ZXJzIG9m
IDIuCi0gICAgICAgIGlmICgod2lkdGggJiAod2lkdGggLSAxKSkgfHwgKGhlaWdodCAmIChoZWln
aHQgLSAxKSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGlu
dmFsaWQgZm9yIGxldmVsIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJl
c3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQs
IFdlYkdMVGV4dHVyZSogdGV4KQotewotICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwg
MCkgewotICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCA8IDAiKTsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7Ci0gICAgICAgIGNvbnN0IGludCBr
QmxvY2tXaWR0aCA9IDQ7Ci0gICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OwotICAg
ICAgICBpZiAoKHhvZmZzZXQgJSBrQmxvY2tXaWR0aCkgfHwgKHlvZmZzZXQgJSBrQmxvY2tIZWln
aHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCBub3Qg
bXVsdGlwbGUgb2YgNCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICh3aWR0aCAtIHhvZmZzZXQgPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwp
Ci0gICAgICAgICAgICB8fCBoZWlnaHQgLSB5b2Zmc2V0ID4gdGV4LT5nZXRIZWlnaHQodGFyZ2V0
LCBsZXZlbCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdl
dCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7Ci0gICAgfQotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6IHsKLSAgICAgICAgaWYg
KHhvZmZzZXQgfHwgeW9mZnNldCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0
IGFuZCB5b2Zmc2V0IG11c3QgYmUgemVybyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICh3aWR0aCAhPSB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2
ZWwpCi0gICAgICAgICAgICB8fCBoZWlnaHQgIT0gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZl
bCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBtdXN0IG1hdGNoIGV4
aXN0aW5nIGxldmVsIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rpb25OYW1l
LCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOwotICAgIH0KLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVEcmF3TW9kZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIG1vZGUpCi17Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UE9JTlRTOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfU1RSSVA6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVTOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xF
X1NUUklQOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTjoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVM6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZHJhdyBtb2RlIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0g
ICAgaWYgKG1fc3RlbmNpbE1hc2sgIT0gbV9zdGVuY2lsTWFza0JhY2sgfHwgbV9zdGVuY2lsRnVu
Y1JlZiAhPSBtX3N0ZW5jaWxGdW5jUmVmQmFjayB8fCBtX3N0ZW5jaWxGdW5jTWFzayAhPSBtX3N0
ZW5jaWxGdW5jTWFza0JhY2spIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmcm9udCBhbmQgYmFj
ayBzdGVuY2lscyBzZXR0aW5ncyBkbyBub3QgbWF0Y2giKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlU3RlbmNpbEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBmdW5jKQotewotICAgIHN3aXRjaCAoZnVuYykgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok5FVkVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFU1M6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TEVRVUFMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdS
RUFURVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VRVUFMOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkVRVUFMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PVEVR
VUFMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMV0FZUzoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmdW5jdGlvbiIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cHJpbnRHTEVycm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsK
LSAgICBpZiAoIW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAtLW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkOwotICAgIHByaW50V2Fybmlu
Z1RvQ29uc29sZShtZXNzYWdlKTsKLQotICAgIGlmICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFs
bG93ZWQpCi0gICAgICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiV2ViR0w6IHRvbyBtYW55IGVy
cm9ycywgbm8gbW9yZSBlcnJvcnMgd2lsbCBiZSByZXBvcnRlZCB0byB0aGUgY29uc29sZSBmb3Ig
dGhpcyBjb250ZXh0LiIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cHJpbnRX
YXJuaW5nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoIWNhbnZh
cygpKQotICAgICAgICByZXR1cm47Ci0gICAgY2FudmFzKCktPmRvY3VtZW50KCkuYWRkQ29uc29s
ZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcs
IG1lc3NhZ2UpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFt
ZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50KQotewotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFy
Z2V0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc3dpdGNoIChhdHRhY2ht
ZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDA6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzCi0gICAgICAgICAgICAmJiBh
dHRhY2htZW50ID4gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwCi0gICAgICAg
ICAgICAmJiBhdHRhY2htZW50IDwgc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCArIGdldE1heENvbG9yQXR0YWNobWVudHMoKSkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50Iik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfQUREOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZVTkNfU1VCVFJBQ1Q6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19S
RVZFUlNFX1NVQlRSQUNUOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRGdW5jRmFj
dG9ycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0
KQotewotICAgIGlmICgoKHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1Ig
fHwgc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCi0g
ICAgICAgICAmJiAoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBk
c3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpCi0gICAg
ICAgIHx8ICgoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xPUiB8fCBkc3Qg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKLSAgICAgICAg
ICAgICYmIChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9
PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIGNhcCkKLXsKLSAgICBzd2l0Y2ggKGNhcCkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRJVEhFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09O
X09GRlNFVF9GSUxMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9BTFBIQV9U
T19DT1ZFUkFHRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0U6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBjYXBhYmlsaXR5Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXpl
aSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBhcnJheSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNl
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50
MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAgICBpZiAoIXYpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25O
YW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWlu
U2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVp
cmVkTWluU2l6ZSkKLXsKLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVy
cyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdiwgc2l6ZSwgcmVxdWlyZWRNaW5TaXpl
KTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJp
eFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2
LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAgIGlmICghdikgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqIHYsIEdDM0RzaXpl
aSBzaXplLCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAgIGlmICghbG9jYXRpb24p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24gaXMgbm90
IGZyb20gY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh0cmFuc3Bvc2UpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
InRyYW5zcG9zZSBub3QgRkFMU0UiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBpZiAoc2l6ZSA8IHJlcXVpcmVkTWluU2l6ZSB8fCAoc2l6ZSAlIHJlcXVpcmVkTWluU2l6ZSkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1XZWJHTEJ1ZmZlciogV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBXZWJH
TEJ1ZmZlciogYnVmZmVyID0gMDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICBidWZmZXIgPSBt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLmdldCgpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6
Ci0gICAgICAgIGJ1ZmZlciA9IG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAibm8gYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICBzd2l0Y2ggKHVzYWdlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RS
RUFNX0RSQVc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVc6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXOgotICAgICAgICByZXR1cm4gYnVm
ZmVyOwotICAgIH0KLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHVzYWdlIik7Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFn
ZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFn
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhY2hl
ZEltYWdlKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGltYWdlIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgY29uc3QgVVJMJiB1cmwgPSBpbWFnZS0+Y2FjaGVkSW1hZ2Uo
KS0+cmVzcG9uc2UoKS51cmwoKTsKLSAgICBpZiAodXJsLmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5
KCkgfHwgIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgaW1hZ2Ui
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdp
bihpbWFnZSkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+YnVmZmVyKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5v
IGNhbnZhcyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh3b3VsZFRh
aW50T3JpZ2luKGNhbnZhcykpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBFTkFCTEUo
VklERU8pCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MVmlkZW9FbGVt
ZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRo
KCkgfHwgIXZpZGVvLT52aWRlb0hlaWdodCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyB2aWRl
byIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh3b3VsZFRhaW50T3Jp
Z2luKHZpZGVvKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaW5kZXgg
Pj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJbiBHTCwgd2Ugc2tpcCBz
ZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29t
cGxpYW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKLSAgICAgICAgY2Fz
ZSAxOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAzOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmRl
eCwgdjAsIHYxLCB2Mik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAg
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmli
VmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0
cmliVmFsdWUudmFsdWVbMF0gPSB2MDsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsxXSA9IHYxOwot
ICAgIGF0dHJpYlZhbHVlLnZhbHVlWzJdID0gdjI7Ci0gICAgYXR0cmliVmFsdWUudmFsdWVbM10g
PSB2MzsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1w
bChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkq
IHYsIEdDM0RzaXplaSBleHBlY3RlZFNpemUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdikgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB2ZXJ0ZXhBdHRyaWJm
dkltcGwoZnVuY3Rpb25OYW1lLCBpbmRleCwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgZXhwZWN0
ZWRTaXplKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2
SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQq
IHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXYpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKHNpemUgPCBleHBlY3RlZFNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
c2l6ZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpbmRleCA+PSBtX21heFZl
cnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVy
dGV4QXR0cmliMCB2YWx1ZXMuCi0gICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkg
ewotICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkgewotICAgICAgICBjYXNlIDE6Ci0gICAg
ICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgdik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhB
dHRyaWIyZnYoaW5kZXgsIHYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoK
LSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB2KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjRmdihpbmRleCwgdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJp
YlZhbHVlW2luZGV4XTsKLSAgICBhdHRyaWJWYWx1ZS5pbml0VmFsdWUoKTsKLSAgICBmb3IgKGlu
dCBpaSA9IDA7IGlpIDwgZXhwZWN0ZWRTaXplOyArK2lpKQotICAgICAgICBhdHRyaWJWYWx1ZS52
YWx1ZVtpaV0gPSB2W2lpXTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRW
ZXJ0ZXhBdHRyaWIwKCkKLXsKLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhB
dHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0
dHJpYlN0YXRlKDApOwotICAgIAotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlciA9IGNyZWF0ZUJ1
ZmZlcigpOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKLSAgICBtX2NvbnRl
eHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVyk7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOwotICAg
IHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7Ci0gICAgbV9jb250
ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOwotICAg
IG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7Ci0gICAgbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0gPSAw
LjBmOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gMC4wZjsKLSAgICBtX3Zl
cnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IDAuMGY7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyVmFsdWVbM10gPSAxLjBmOwotICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFs
c2U7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IGZhbHNlOwotfQotCi1ib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1W
ZXJ0ZXgpCi17Ci0gICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0
cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRy
aWJTdGF0ZSgwKTsKLSAgICBjb25zdCBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBt
X3ZlcnRleEF0dHJpYlZhbHVlWzBdOwotICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGJvb2wgdXNpbmdWZXJ0ZXhBdHRyaWIwID0gbV9jdXJyZW50
UHJvZ3JhbS0+aXNVc2luZ1ZlcnRleEF0dHJpYjAoKTsKLSAgICBpZiAodXNpbmdWZXJ0ZXhBdHRy
aWIwKQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBpZiAo
c3RhdGUuZW5hYmxlZCAmJiB1c2luZ1ZlcnRleEF0dHJpYjApCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIXVzaW5nVmVydGV4QXR0cmliMCAmJiAhbV92ZXJ0ZXhBdHRyaWIwVXNlZEJl
Zm9yZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmUgPSB0cnVlOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKLSAgICBHQzNE
c2l6ZWlwdHIgYnVmZmVyRGF0YVNpemUgPSAobnVtVmVydGV4ICsgMSkgKiA0ICogc2l6ZW9mKEdD
M0RmbG9hdCk7Ci0gICAgaWYgKGJ1ZmZlckRhdGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
U2l6ZSkgewotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgYnVmZmVyRGF0YVNpemUsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5B
TUlDX0RSQVcpOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gYnVmZmVyRGF0
YVNpemU7Ci0gICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gdHJ1ZTsKLSAgICB9
Ci0gICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMAotICAgICAgICAmJiAobV9mb3JjZUF0dHJpYjBC
dWZmZXJSZWZpbGwKLSAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzBdICE9IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1
ZVsxXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXQotICAgICAgICAgICAgfHwgYXR0
cmliVmFsdWUudmFsdWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KLSAgICAg
ICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzNdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzNdKSkgewotICAgICAgICBhdXRvIGJ1ZmZlckRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPEdD
M0RmbG9hdFtdPigobnVtVmVydGV4ICsgMSkgKiA0KTsKLSAgICAgICAgZm9yIChHQzNEc2l6ZWkg
aWkgPSAwOyBpaSA8IG51bVZlcnRleCArIDE7ICsraWkpIHsKLSAgICAgICAgICAgIGJ1ZmZlckRh
dGFbaWkgKiA0XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOwotICAgICAgICAgICAgYnVmZmVyRGF0
YVtpaSAqIDQgKyAxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOwotICAgICAgICAgICAgYnVmZmVy
RGF0YVtpaSAqIDQgKyAyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwotICAgICAgICAgICAgYnVm
ZmVyRGF0YVtpaSAqIDQgKyAzXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwotICAgICAgICB9Ci0g
ICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gYXR0cmliVmFsdWUudmFsdWVb
MF07Ci0gICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gYXR0cmliVmFsdWUu
dmFsdWVbMV07Ci0gICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gYXR0cmli
VmFsdWUudmFsdWVbMl07Ci0gICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0g
YXR0cmliVmFsdWUudmFsdWVbM107Ci0gICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxs
ID0gZmFsc2U7Ci0gICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YShHcmFwaGljc0NvbnRl
eHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBidWZmZXJEYXRhU2l6ZSwgYnVmZmVyRGF0YS5nZXQoKSk7
Ci0gICAgfQotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQsIDAsIDAsIDApOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNp
bXVsYXRpb24oKQotewotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRl
eEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4
QXR0cmliU3RhdGUoMCk7Ci0gICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8oc3RhdGUuYnVmZmVyQmluZGluZy5n
ZXQoKSkpOwotICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3RhdGUu
c2l6ZSwgc3RhdGUudHlwZSwgc3RhdGUubm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJpZGUs
IHN0YXRlLm9mZnNldCk7Ci0gICAgfQotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8obV9ib3VuZEFycmF5QnVmZmVy
LmdldCgpKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRl
eHRMb3N0RXZlbnQoKQotewotICAgIFJlZlB0cjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBX
ZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZl
bnQsIGZhbHNlLCB0cnVlLCAiIik7Ci0gICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoZXZlbnQp
OwotICAgIG1fcmVzdG9yZUFsbG93ZWQgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwotICAg
IGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQgJiYgbV9yZXN0b3JlQWxs
b3dlZCkKLSAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCgpCi17Ci0gICAgQVNT
RVJUKG1fY29udGV4dExvc3QpOwotICAgIGlmICghbV9jb250ZXh0TG9zdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCB1bmxl
c3MgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlCi0gICAgLy8gd2ViZ2xjb250ZXh0bG9zdCBl
dmVudCB3YXMgcHJldmVudGVkIGVhcmxpZXIuCi0gICAgLy8KLSAgICAvLyBCZWNhdXNlIG9mIHRo
ZSB3YXkgbV9yZXN0b3JlVGltZXIgaXMgc2V0IHVwIGZvciByZWFsIHZzLiBzeW50aGV0aWMgbG9z
dAotICAgIC8vIGNvbnRleHQgZXZlbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRo
aXMgdGVzdCBzaG9ydC1jaXJjdWl0aW5nCi0gICAgLy8gdGhlIHJldHJ5IGxvb3AgZm9yIHJlYWwg
Y29udGV4dCBsb3N0IGV2ZW50cy4KLSAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGludCBjb250ZXh0TG9zdFJlYXNvbiA9IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7Ci0KLSAgICBzd2l0Y2ggKGNv
bnRleHRMb3N0UmVhc29uKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I6
Ci0gICAgICAgIC8vIFRoZSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiBtaWdodCBu
b3QgZnVsbHkKLSAgICAgICAgLy8gc3VwcG9ydCBHTF9BUkJfcm9idXN0bmVzcyBzZW1hbnRpY3Mg
eWV0LiBBbHRlcm5hdGl2ZWx5LCB0aGUKLSAgICAgICAgLy8gV0VCR0xfbG9zZV9jb250ZXh0IGV4
dGVuc2lvbiBtaWdodCBoYXZlIGJlZW4gdXNlZCB0byBmb3JjZQotICAgICAgICAvLyBhIGxvc3Qg
Y29udGV4dC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkdVSUxUWV9D
T05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5v
dCByZXN0b3JlZCBpZiB0aGlzIGNvbnRleHQgd2FzCi0gICAgICAgIC8vIGd1aWx0eSBvZiBjYXVz
aW5nIHRoZSBncmFwaGljcyByZXNldC4KLSAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJX
QVJOSU5HOiBXZWJHTCBjb250ZW50IG9uIHRoZSBwYWdlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2Fy
ZCB0byByZXNldDsgbm90IHJlc3RvcmluZyB0aGUgY29udGV4dCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OklOTk9DRU5UX0NPTlRFWFRfUkVTRVRfQVJCOgotICAg
ICAgICAvLyBBbHdheXMgYWxsb3cgdGhlIGNvbnRleHQgdG8gYmUgcmVzdG9yZWQuCi0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJC
OgotICAgICAgICAvLyBXYXJuLiBJZGVhbGx5LCBwcm9tcHQgdGhlIHVzZXIgdGVsbGluZyB0aGVt
IHRoYXQgV2ViR0wKLSAgICAgICAgLy8gY29udGVudCBvbiB0aGUgcGFnZSBtaWdodCBoYXZlIGNh
dXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0bwotICAgICAgICAvLyByZXNldCBhbmQgYXNrIHRoZW0g
d2hldGhlciB0aGV5IHdhbnQgdG8gY29udGludWUgcnVubmluZwotICAgICAgICAvLyB0aGUgY29u
dGVudC4gT25seSBpZiB0aGV5IHNheSAieWVzIiBzaG91bGQgd2Ugc3RhcnQKLSAgICAgICAgLy8g
YXR0ZW1wdGluZyB0byByZXN0b3JlIHRoZSBjb250ZXh0LgotICAgICAgICBwcmludFdhcm5pbmdU
b0NvbnNvbGUoIldBUk5JTkc6IFdlYkdMIGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBj
YXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgRnJhbWUqIGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWZyYW1lLT5sb2FkZXIo
KS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsK
LSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICBTY3JvbGxWaWV3KiByb290ID0g
dmlldy0+cm9vdCgpOwotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAgIEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3cgPSByb290LT5ob3N0V2luZG93KCk7Ci0gICAgaWYgKCFob3N0V2lu
ZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShtX2F0dHJpYnV0ZXMsIGhvc3RXaW5kb3cp
KTsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09
IFJlYWxMb3N0Q29udGV4dCkKLSAgICAgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hv
dChzZWNvbmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIC8vIFRoaXMgbGlrZWx5IHNob3VsZG4ndCBoYXBwZW4gYnV0IGlzIHRoZSBiZXN0IHdheSB0
byByZXBvcnQgaXQgdG8gdGhlIFdlYkdMIGFwcC4KLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgIiIsICJlcnJvciByZXN0
b3JpbmcgY29udGV4dCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ29uc3Ry
dWN0IGEgbmV3IGRyYXdpbmcgYnVmZmVyIHdpdGggdGhlIG5ldyBHcmFwaGljc0NvbnRleHQzRC4K
LSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+ZGlz
Y2FyZFJlc291cmNlcygpOwotICAgICAgICBEcmF3aW5nQnVmZmVyOjpQcmVzZXJ2ZURyYXdpbmdC
dWZmZXIgcHJlc2VydmUgPSBtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID8gRHJh
d2luZ0J1ZmZlcjo6UHJlc2VydmUgOiBEcmF3aW5nQnVmZmVyOjpEaXNjYXJkOwotICAgICAgICBE
cmF3aW5nQnVmZmVyOjpBbHBoYVJlcXVpcmVtZW50IGFscGhhID0gbV9hdHRyaWJ1dGVzLmFscGhh
ID8gRHJhd2luZ0J1ZmZlcjo6QWxwaGEgOiBEcmF3aW5nQnVmZmVyOjpPcGFxdWU7Ci0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShjb250ZXh0LmdldCgpLCBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKSwgcHJlc2VydmUsIGFscGhhKTsKLSAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotCi0gICAgbV9jb250ZXh0ID0gY29udGV4dDsKLSAg
ICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7Ci0gICAgc2V0dXBGbGFncygpOwotICAgIGluaXRpYWxp
emVOZXdDb250ZXh0KCk7Ci0gICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0cmVzdG9yZWRFdmVudCwgZmFs
c2UsIHRydWUsICIiKSk7Ci19Ci0KLVN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuc3Vy
ZU5vdE51bGwoY29uc3QgU3RyaW5nJiB0ZXh0KSBjb25zdAotewotICAgIGlmICh0ZXh0LmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gV1RGOjplbXB0eVN0cmluZygpOwotICAgIHJldHVybiB0ZXh0
OwotfQotCi1XZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUlt
YWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5KQotICAgIDogbV9idWZmZXJzKHN0ZDo6bWFrZV91
bmlxdWU8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPihjYXBhY2l0eSkpCi0gICAgLCBt
X2NhcGFjaXR5KGNhcGFjaXR5KQotewotfQotCi1JbWFnZUJ1ZmZlciogV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBz
aXplKQotewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyArK2kp
IHsKLSAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKLSAgICAg
ICAgaWYgKCFidWYpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGJ1Zi0+bG9naWNh
bFNpemUoKSAhPSBzaXplKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGJ1YmJsZVRv
RnJvbnQoaSk7Ci0gICAgICAgIHJldHVybiBidWY7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAxKTsKLSAg
ICBpZiAoIXRlbXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGkgPSBzdGQ6Om1pbiht
X2NhcGFjaXR5IC0gMSwgaSk7Ci0gICAgbV9idWZmZXJzW2ldID0gV1RGOjptb3ZlKHRlbXApOwot
Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKLSAgICBidWJibGVU
b0Zyb250KGkpOwotICAgIHJldHVybiBidWY7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpidWJibGVUb0Zyb250KGludCBpZHgpCi17Ci0gICAg
Zm9yIChpbnQgaSA9IGlkeDsgaSA+IDA7IC0taSkKLSAgICAgICAgbV9idWZmZXJzW2ldLnN3YXAo
bV9idWZmZXJzW2ktMV0pOwotfQotCi1uYW1lc3BhY2UgewotCi0gICAgU3RyaW5nIEdldEVycm9y
U3RyaW5nKEdDM0RlbnVtIGVycm9yKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChlcnJvcikgewot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU06Ci0gICAgICAgICAg
ICByZXR1cm4gIklOVkFMSURfRU5VTSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUU6Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfVkFMVUUiOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTjoKLSAgICAgICAg
ICAgIHJldHVybiAiSU5WQUxJRF9PUEVSQVRJT04iOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpPVVRfT0ZfTUVNT1JZOgotICAgICAgICAgICAgcmV0dXJuICJPVVRfT0ZfTUVNT1JZ
IjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT046Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdM
OgotICAgICAgICAgICAgcmV0dXJuICJDT05URVhUX0xPU1RfV0VCR0wiOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJXZWJHTCBFUlJPUiglMDR4
KSIsIGVycm9yKTsKLSAgICAgICAgfQotICAgIH0KLQotfSAvLyBuYW1lc3BhY2UgYW5vbnltb3Vz
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51
bSBlcnJvciwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlv
biwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlIGRpc3BsYXkpCi17Ci0gICAgaWYgKG1fc3ludGhl
c2l6ZWRFcnJvcnNUb0NvbnNvbGUgJiYgZGlzcGxheSA9PSBEaXNwbGF5SW5Db25zb2xlKSB7Ci0g
ICAgICBTdHJpbmcgc3RyID0gU3RyaW5nKCJXZWJHTDogIikgKyBHZXRFcnJvclN0cmluZyhlcnJv
cikgKyAgIjogIiArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlw
dGlvbik7Ci0gICAgICBwcmludEdMRXJyb3JUb0NvbnNvbGUoc3RyKTsKLSAgICB9Ci0gICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7Ci19Ci0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKG1fc3ludGhlc2l6ZWRF
cnJvcnNUb0NvbnNvbGUpIHsKLSAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIp
ICsgU3RyaW5nKGZ1bmN0aW9uTmFtZSkgKyAiOiAiICsgU3RyaW5nKGRlc2NyaXB0aW9uKTsKLSAg
ICAgICAgcHJpbnRHTEVycm9yVG9Db25zb2xlKHN0cik7Ci0gICAgfQotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YXBwbHlTdGVuY2lsVGVzdCgpCi17Ci0gICAgYm9vbCBoYXZlU3Rl
bmNpbEJ1ZmZlciA9IGZhbHNlOwotCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAg
ICAgICBoYXZlU3RlbmNpbEJ1ZmZlciA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5oYXNTdGVuY2ls
QnVmZmVyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1
dGVzPiBhdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgaGF2ZVN0
ZW5jaWxCdWZmZXIgPSBhdHRyaWJ1dGVzLT5zdGVuY2lsKCk7Ci0gICAgfQotICAgIGVuYWJsZU9y
RGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNULAotICAgICAgICAgICAgICAg
ICAgICBtX3N0ZW5jaWxFbmFibGVkICYmIGhhdmVTdGVuY2lsQnVmZmVyKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5
LCBib29sIGVuYWJsZSkKLXsKLSAgICBpZiAoZW5hYmxlKQotICAgICAgICBtX2NvbnRleHQtPmVu
YWJsZShjYXBhYmlsaXR5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShj
YXBhYmlsaXR5KTsKLX0KLQotSW50U2l6ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRD
YW52YXNTaXplKCkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShjbGFtcChjYW52YXMoKS0+d2lkdGgo
KSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pLAotICAgICAgICAgICAgICAgICAgIGNsYW1wKGNh
bnZhcygpLT5oZWlnaHQoKSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMV0pKTsKLX0KLQotR0MzRGlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1heERyYXdCdWZmZXJzKCkKLXsKLSAgICBpZiAo
IXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX21h
eERyYXdCdWZmZXJzKQotICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMz
RDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKLSAgICBpZiAoIW1f
bWF4Q29sb3JBdHRhY2htZW50cykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRl
bnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVu
dHMpOwotICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNI
TUVOVFMgPj0gTUFYX0RSQVdfQlVGRkVSUy4KLSAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3
QnVmZmVycywgbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKLX0KLQotR0MzRGludCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldE1heENvbG9yQXR0YWNobWVudHMoKQotewotICAgIGlmICghc3VwcG9y
dHNEcmF3QnVmZmVycygpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIW1fbWF4Q29sb3JB
dHRhY2htZW50cykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6
Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOwotICAg
IHJldHVybiBtX21heENvbG9yQXR0YWNobWVudHM7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSBidWYpCi17Ci0gICAgbV9iYWNrRHJh
d0J1ZmZlciA9IGJ1ZjsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVD
dXJyZW50RnJhbWVidWZmZXIoKQotewotICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgYmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcuZ2V0KCksIGVjKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3Rv
cmVDdXJyZW50VGV4dHVyZTJEKCkKLXsKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVVbml0c1ttX2Fj
dGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLWJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdXBwb3J0c0RyYXdCdWZmZXJzKCkKLXsKLSAgICBpZiAo
IW1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQpIHsKLSAgICAgICAgbV9kcmF3
QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCA9IHRydWU7Ci0gICAgICAgIG1fZHJhd0J1
ZmZlcnNTdXBwb3J0ZWQgPSBXZWJHTERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQodGhpcyk7Ci0gICAg
fQotICAgIHJldHVybiBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50
IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCi17Ci0gICAgaWYg
KCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwg
Y291bnQsIHByaW1jb3VudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcmltY291bnQg
PCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAiZHJhd0FycmF5c0luc3RhbmNlZCIsICJwcmltY291bnQgPCAwIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXByaW1jb3VudCkgewotICAgICAgICBtYXJr
Q29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNsZWFySWZD
b21wb3NpdGVkKCk7Ci0KLSAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsK
LSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgdmVydGV4QXR0cmliMFNpbXVs
YXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7Ci0gICAgaWYg
KCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3Mo
ImRyYXdBcnJheXNJbnN0YW5jZWQiLCB0cnVlKTsKLSAgICBVTlVTRURfUEFSQU0ocHJpbWNvdW50
KTsKLSAgICBtX2NvbnRleHQtPmRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50
LCBwcmltY291bnQpOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11
bGF0aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1Rl
eHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBmYWxzZSk7Ci0gICAgbWFy
a0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIHVu
c2lnbmVkIG51bUVsZW1lbnRzID0gMDsKLSAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJk
cmF3RWxlbWVudHNJbnN0YW5jZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVt
ZW50cykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcmltY291bnQgPCAwKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
ZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgInByaW1jb3VudCA8IDAiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghcHJpbWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0Q2hh
bmdlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQo
KTsKLQotICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAg
ICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAg
ICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRl
bmVzcygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgdHJ1ZSk7Ci0gICAgbV9jb250ZXh0LT5kcmF3
RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRw
dHI+KG9mZnNldCksIHByaW1jb3VudCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYg
dmVydGV4QXR0cmliMFNpbXVsYXRlZCkKLSAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4
QXR0cmliMFNpbXVsYXRpb24oKTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAg
ICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgZmFs
c2UpOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2
aXNvcikKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4
QXR0cmliRGl2aXNvciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliRGl2
aXNvcihpbmRleCwgZGl2aXNvcik7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJEaXZpc29y
KGluZGV4LCBkaXZpc29yKTsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TDFSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAxNzY5OTQpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOjE3Njk5NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdlYkdMUmVuZGVyaW5nQ29udGV4
dF9oCisjZGVmaW5lIFdlYkdMUmVuZGVyaW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiRHJhd2luZ0J1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldlYkdM
R2V0SW5mby5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJB
cnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSW50MzJBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFOR0xFSW5z
dGFuY2VkQXJyYXlzOworY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOworY2xhc3Mg
RVhUU2hhZGVyVGV4dHVyZUxPRDsKK2NsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7CitjbGFzcyBIVE1M
VmlkZW9FbGVtZW50OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbWFnZURhdGE7CitjbGFz
cyBJbnRTaXplOworY2xhc3MgT0VTU3RhbmRhcmREZXJpdmF0aXZlczsKK2NsYXNzIE9FU1RleHR1
cmVGbG9hdDsKK2NsYXNzIE9FU1RleHR1cmVGbG9hdExpbmVhcjsKK2NsYXNzIE9FU1RleHR1cmVI
YWxmRmxvYXQ7CitjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyOworY2xhc3MgT0VTVmVy
dGV4QXJyYXlPYmplY3Q7CitjbGFzcyBPRVNFbGVtZW50SW5kZXhVaW50OworY2xhc3MgV2ViR0xB
Y3RpdmVJbmZvOworY2xhc3MgV2ViR0xCdWZmZXI7CitjbGFzcyBXZWJHTENvbnRleHRHcm91cDsK
K2NsYXNzIFdlYkdMQ29udGV4dE9iamVjdDsKK2NsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEM7CitjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM7CitjbGFzcyBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQzsKK2NsYXNzIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM7CitjbGFzcyBX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvOworY2xhc3MgV2ViR0xEZWJ1Z1NoYWRlcnM7CitjbGFzcyBX
ZWJHTERlcHRoVGV4dHVyZTsKK2NsYXNzIFdlYkdMRHJhd0J1ZmZlcnM7CitjbGFzcyBXZWJHTEV4
dGVuc2lvbjsKK2NsYXNzIFdlYkdMRnJhbWVidWZmZXI7CitjbGFzcyBXZWJHTExvc2VDb250ZXh0
OworY2xhc3MgV2ViR0xPYmplY3Q7CitjbGFzcyBXZWJHTFByb2dyYW07CitjbGFzcyBXZWJHTFJl
bmRlcmJ1ZmZlcjsKK2NsYXNzIFdlYkdMU2hhZGVyOworY2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7
CitjbGFzcyBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDsKK2NsYXNzIFdlYkdMVGV4dHVyZTsK
K2NsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uOworY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUzsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IGZpbmFsIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQsIHB1YmxpYyBB
Y3RpdmVET01PYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzKik7CisgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
KyNpZiBQTEFURk9STShXSU4pCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBhY2NlbGVyYXRlZCAz
ZCBjYW52YXMgb24gV2luZG93cy4KKyAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisjZWxzZQorICAgIHZpcnR1YWwgYm9vbCBp
c0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorI2VuZGlmCisK
KyAgICBpbnQgZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3Q7CisgICAgaW50IGRyYXdpbmdCdWZm
ZXJIZWlnaHQoKSBjb25zdDsKKworICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0
dXJlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFt
KiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBiaW5kQXR0cmliTG9j
YXRpb24oV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdl
YkdMQnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdD
M0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlcios
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwg
V2ViR0xUZXh0dXJlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmxlbmRDb2xvcihHQzNE
ZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxw
aGEpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKKyAgICB2b2lkIGJs
ZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEp
OworICAgIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3Ip
OworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBk
c3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7CisKKyAgICB2b2lk
IGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNh
Z2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEs
IEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJTdWJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBs
b25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsK
KworICAgIEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsK
KyAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKKyAgICB2b2lkIGNsZWFyQ29sb3Io
R0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0
IGFscGhhKTsKKyAgICB2b2lkIGNsZWFyRGVwdGgoR0MzRGZsb2F0KTsKKyAgICB2b2lkIGNsZWFy
U3RlbmNpbChHQzNEaW50KTsKKyAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdD
M0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7Cisg
ICAgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworCisg
ICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJy
YXlCdWZmZXJWaWV3KiBkYXRhKTsKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRh
KTsKKworICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOworICAgIHZvaWQg
Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisKKyAgICBQYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PiBjcmVhdGVCdWZmZXIoKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0
ZUZyYW1lYnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVByb2dy
YW0oKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5kZXJidWZm
ZXIoKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGVTaGFkZXIoR0MzRGVudW0g
dHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVh
dGVUZXh0dXJlKCk7CisKKyAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOworCisgICAg
dm9pZCBkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqKTsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVm
ZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKKyAgICB2b2lkIGRlbGV0ZVByb2dyYW0oV2ViR0xQcm9n
cmFtKik7CisgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsK
KyAgICB2b2lkIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciopOworICAgIHZvaWQgZGVsZXRlVGV4
dHVyZShXZWJHTFRleHR1cmUqKTsKKworICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsKKyAg
ICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbik7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdDM0Rm
bG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpOworICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdM
UHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGlzYWJs
ZShHQzNEZW51bSBjYXApOworICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1
aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVt
IG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9p
ZCBlbmFibGUoR0MzRGVudW0gY2FwKTsKKyAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBmaW5pc2goKTsKKyAg
ICB2b2lkIGZsdXNoKCk7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgV2ViR0xSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBmcmFtZWJ1
ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0Rl
bnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOworICAgIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKKworICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJ
bmZvPiBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5p
Zm9ybShXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAg
IGJvb2wgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSosIFZlY3RvcjxSZWZQdHI8V2Vi
R0xTaGFkZXI+PiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgV2ViR0xHZXRJbmZv
IGdldEJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBnZXRD
b250ZXh0QXR0cmlidXRlcygpOworICAgIEdDM0RlbnVtIGdldEVycm9yKCk7CisgICAgV2ViR0xF
eHRlbnNpb24qIGdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIFdlYkdMR2V0
SW5mbyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFdlYkdMR2V0SW5mbyBnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBXZWJHTEdldEluZm8gZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qLCBH
QzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyBnZXRQcm9ncmFtSW5m
b0xvZyhXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFNoYWRlclBhcmFtZXRlcihXZWJH
TFNoYWRlciosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIGdl
dFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1Jl
ZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0
KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFZlY3RvcjxTdHJpbmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAg
ICBXZWJHTEdldEluZm8gZ2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9ybShXZWJH
TFByb2dyYW0qLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBnZXRVbmlmb3JtTG9jYXRpb24o
V2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdM
R2V0SW5mbyBnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7CisgICAgbG9uZyBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNE
dWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpOworCisgICAgdm9pZCBoaW50KEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gbW9kZSk7CisgICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZm
ZXIqKTsKKyAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKKyAgICBHQzNEYm9vbGVhbiBp
c0VuYWJsZWQoR0MzRGVudW0gY2FwKTsKKyAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdl
YkdMRnJhbWVidWZmZXIqKTsKKyAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9ncmFt
Kik7CisgICAgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsK
KyAgICBHQzNEYm9vbGVhbiBpc1NoYWRlcihXZWJHTFNoYWRlciopOworICAgIEdDM0Rib29sZWFu
IGlzVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKKworICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9h
dCk7CisgICAgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Cisg
ICAgdm9pZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7
CisgICAgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJy
YXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbGVhc2VT
aGFkZXJDb21waWxlcigpOworICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpOworICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNE
Ym9vbGVhbiBpbnZlcnQpOworICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIHNoYWRlclNvdXJj
ZShXZWJHTFNoYWRlciosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsK
KyAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVu
YywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOworICAgIHZvaWQgc3RlbmNpbE1hc2soR0Mz
RHVpbnQpOworICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNE
dWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6
ZmFpbCwgR0MzRGVudW0genBhc3MpOworICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVu
dW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsK
KworICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlv
bkNvZGUmKTsKKyNlbmRpZgorCisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7CisgICAgdm9pZCB0ZXhQYXJhbWV0
ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOworCisg
ICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVs
ZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRp
b25Db2RlJik7CisjZW5kaWYKKworICAgIHZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBz
aXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgdW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9y
bTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0yaShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3Jt
M2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHksIEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3Jt
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0z
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTRmKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZv
cm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZv
cm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBz
aXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2
YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZvaWQgdXNlUHJv
Z3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB2YWxpZGF0ZVBy
b2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOworICAgIHZvaWQgdmVydGV4QXR0
cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6
ZWkgc2l6ZSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBp
bmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOworICAgIHZv
aWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQg
eSwgR0MzRGZsb2F0IHopOworICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4
LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpOworICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1
aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUs
IEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RzaXplaSBzdHJpZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmKTsKKworICAgIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisKKyAgICAvLyBXRUJLSVRfbG9zZV9jb250
ZXh0IHN1cHBvcnQKKyAgICBlbnVtIExvc3RDb250ZXh0TW9kZSB7CisgICAgICAgIC8vIExvc3Qg
Y29udGV4dCBvY2N1cnJlZCBhdCB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGxldmVsLgorICAgICAgICBS
ZWFsTG9zdENvbnRleHQsCisKKyAgICAgICAgLy8gTG9zdCBjb250ZXh0IHByb3Zva2VkIGJ5IFdF
QktJVF9sb3NlX2NvbnRleHQuCisgICAgICAgIFN5bnRoZXRpY0xvc3RDb250ZXh0CisgICAgfTsK
KyAgICB2b2lkIGZvcmNlTG9zdENvbnRleHQoTG9zdENvbnRleHRNb2RlKTsKKyAgICB2b2lkIGZv
cmNlUmVzdG9yZUNvbnRleHQoKTsKKyAgICB2b2lkIGxvc2VDb250ZXh0SW1wbChMb3N0Q29udGV4
dE1vZGUpOworCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgV2ViR0xDb250ZXh0R3JvdXAqIGNv
bnRleHRHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9CisgICAg
dmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIHZvaWQgbWFy
a0xheWVyQ29tcG9zaXRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpIG92ZXJyaWRlOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworCisgICAgdm9pZCByZW1vdmVTaGFyZWRPYmpl
Y3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3QoV2Vi
R0xDb250ZXh0T2JqZWN0Kik7CisgICAgCisgICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmli
cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VmVydGV4QXR0cmliczsgfQorCisgICAgLy8gQU5HTEVf
aW5zdGFuY2VkX2FycmF5cyBleHRlbnNpb24gZnVuY3Rpb25zLgorICAgIHZvaWQgZHJhd0FycmF5
c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RzaXplaSBwcmltY291bnQpOworICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdD
M0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9m
ZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29y
KEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKTsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xGcmFtZWJ1
ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xPYmplY3Q7CisgICAgZnJpZW5kIGNsYXNzIE9F
U1ZlcnRleEFycmF5T2JqZWN0OworICAgIGZyaWVuZCBjbGFzcyBXZWJHTERlYnVnU2hhZGVyczsK
KyAgICBmcmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKKyAgICBmcmllbmQg
Y2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOworICAgIGZyaWVuZCBjbGFzcyBXZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQzsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xSZW5kZXJpbmdD
b250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM7CisKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0Vs
ZW1lbnQqLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CisgICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4sIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKTsKKyAgICB2b2lkIGluaXRpYWxpemVO
ZXdDb250ZXh0KCk7CisgICAgdm9pZCBzZXR1cEZsYWdzKCk7CisKKyAgICAvLyBBY3RpdmVET01P
YmplY3QKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYWRkU2hh
cmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0
KFdlYkdMQ29udGV4dE9iamVjdCopOworICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0
cygpOworCisgICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB2b2lkIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOworCisgICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBv
biB0b3Agb2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9uLgorICAgIGJvb2wgaXNHTEVT
MkNvbXBsaWFudCgpIHsgcmV0dXJuIG1faXNHTEVTMkNvbXBsaWFudDsgfQorICAgIC8vIFF1ZXJ5
IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KKyAgICBib29sIGlzR0xF
UzJOUE9UU3RyaWN0KCkgeyByZXR1cm4gbV9pc0dMRVMyTlBPVFN0cmljdDsgfQorICAgIC8vIFF1
ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1vZi1i
b3VuZHMgYnVmZmVyIGFjY2Vzc2VzLgorICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZC
b3VuZHNBY2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNB
Y2Nlc3NlczsgfQorICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0aWFs
aXplcyB0ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCisgICAgYm9vbCBpc1Jlc291cmNlU2Fm
ZSgpIHsgcmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7IH0KKyAgICAvLyBRdWVyeSBpZiBkZXB0aF9z
dGVuY2lsIGJ1ZmZlciBpcyBzdXBwb3J0ZWQuCisgICAgYm9vbCBpc0RlcHRoU3RlbmNpbFN1cHBv
cnRlZCgpIHsgcmV0dXJuIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7IH0KKworICAgIC8vIEhl
bHBlciB0byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKKyAg
ICAvLyBsaWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KKyAgICB1bnNpZ25lZCBpbnQgc2l6ZUlu
Qnl0ZXMoR0MzRGVudW0gdHlwZSk7CisKKyAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIGNvdW50
IGFuZCBvZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVudCBhcnJheSBi
dWZmZXIKKyAgICBib29sIHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKKworICAgIC8vIENvbnNlcnZhdGl2
ZSBidXQgcXVpY2sgaW5kZXggdmFsaWRhdGlvbgorICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5
Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVk
KTsKKworICAgIC8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlvbiAtLSBvbmx5IGRv
bmUgaWYgY29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCisgICAgYm9vbCB2YWxpZGF0ZUluZGV4QXJy
YXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZz
ZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKKyAgICBib29sIHZhbGlkYXRlVmVy
dGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNv
dW50ID0gMCk7CisKKyAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciosIFdl
YkdMT2JqZWN0Kik7CisKKyAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRHNpemVpIHByaW1jb3VudCk7CisgICAgYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzKTsK
KworICAgIC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0LgorICAgIHZvaWQgYWRk
Q29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOworCisgICAgUGFzc1JlZlB0cjxJbWFn
ZT4gZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSosIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50
IGRldmljZVNjYWxlRmFjdG9yKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICBQYXNzUmVmUHRy
PEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgQmFja2luZ1N0b3Jl
Q29weSwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4
dEdyb3VwOworCisgICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBE
cmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5CisgICAgLy8gdG8gdGhlIGJhY2stYnVm
ZmVyIG9mIG1fY29udGV4dC4KKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVm
ZmVyOworCisgICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0IGlz
IGRldGVybWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgorICAgIC8vIFRoaXMgaXMgdXNlZCBib3Ro
IGZvciBzeW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMsIGl0
J3MKKyAgICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0YWNr
LCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKKyAgICAvLyBvbiBob3cgZXhhY3RseSB0aGUg
cGxhdGZvcm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBiZXR0ZXIK
KyAgICAvLyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBl
dmVudC4KKyAgICBUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOworICAgIGJv
b2wgbV9yZXN0b3JlQWxsb3dlZDsKKyAgICBUaW1lciBtX3Jlc3RvcmVUaW1lcjsKKworICAgIGJv
b2wgbV9uZWVkc1VwZGF0ZTsKKyAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7CisgICAgSGFz
aFNldDxXZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3RzOworCisgICAgLy8gTGlz
dCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFib3V0IHNpemVzIGZvciBB
UlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRfQVJSQVlfQlVGRkVSCisg
ICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7CisgICAgCisgICAgUmVm
UHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0
OworICAgIFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3Q7CisgICAgdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2JqZWN0KFBhc3NSZWZQdHI8
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCisgICAgeworICAgICAgICBp
ZiAoYXJyYXlPYmplY3QpCisgICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBh
cnJheU9iamVjdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CisgICAgfQorICAgIAorICAgIGNs
YXNzIFZlcnRleEF0dHJpYlZhbHVlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZlcnRleEF0dHJp
YlZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5pdFZhbHVlKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHZvaWQgaW5pdFZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdmFsdWVbMF0gPSAwLjBmOworICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOworICAgICAg
ICAgICAgdmFsdWVbMl0gPSAwLjBmOworICAgICAgICAgICAgdmFsdWVbM10gPSAxLjBmOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBHQzNEZmxvYXQgdmFsdWVbNF07CisgICAgfTsKKyAg
ICBWZWN0b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0cmliVmFsdWU7CisgICAgdW5z
aWduZWQgbV9tYXhWZXJ0ZXhBdHRyaWJzOworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyOworICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZTsKKyAg
ICBHQzNEZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07CisgICAgYm9vbCBtX2Zv
cmNlQXR0cmliMEJ1ZmZlclJlZmlsbDsKKyAgICBib29sIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmU7CisKKyAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOworICAgIFJl
ZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKKyAgICBSZWZQdHI8
V2ViR0xSZW5kZXJidWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKKyAgICBzdHJ1Y3QgVGV4
dHVyZVVuaXRTdGF0ZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmUyREJp
bmRpbmc7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmVDdWJlTWFwQmluZGlu
ZzsKKyAgICB9OworICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0czsK
KyAgICB1bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7CisKKyAgICBSZWZQdHI8V2Vi
R0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZTJEOworICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG1f
YmxhY2tUZXh0dXJlQ3ViZU1hcDsKKworICAgIFZlY3RvcjxHQzNEZW51bT4gbV9jb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdHM7CisKKyAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJldXNhYmxlIGlt
YWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCisgICAgY2xhc3MgTFJVSW1h
Z2VCdWZmZXJDYWNoZSB7CisgICAgcHVibGljOgorICAgICAgICBMUlVJbWFnZUJ1ZmZlckNhY2hl
KGludCBjYXBhY2l0eSk7CisgICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93bmVk
IGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgorICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBidWJi
bGVUb0Zyb250KGludCBpZHgpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7CisgICAgICAgIGludCBtX2NhcGFjaXR5Owor
ICAgIH07CisgICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZEltYWdlQ2FjaGU7CisK
KyAgICBHQzNEaW50IG1fbWF4VGV4dHVyZVNpemU7CisgICAgR0MzRGludCBtX21heEN1YmVNYXBU
ZXh0dXJlU2l6ZTsKKyAgICBHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKKyAgICBHQzNE
aW50IG1fbWF4Vmlld3BvcnREaW1zWzJdOworICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlTGV2ZWw7
CisgICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisKKyAgICBHQzNEaW50IG1f
bWF4RHJhd0J1ZmZlcnM7CisgICAgR0MzRGludCBtX21heENvbG9yQXR0YWNobWVudHM7CisgICAg
R0MzRGVudW0gbV9iYWNrRHJhd0J1ZmZlcjsKKyAgICBib29sIG1fZHJhd0J1ZmZlcnNXZWJHTFJl
cXVpcmVtZW50c0NoZWNrZWQ7CisgICAgYm9vbCBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOworCisg
ICAgR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7CisgICAgR0MzRGludCBtX3VucGFja0FsaWdubWVu
dDsKKyAgICBib29sIG1fdW5wYWNrRmxpcFk7CisgICAgYm9vbCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGE7CisgICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKKyAgICBi
b29sIG1fY29udGV4dExvc3Q7CisgICAgTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RNb2Rl
OworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKworICAg
IGJvb2wgbV9sYXllckNsZWFyZWQ7CisgICAgR0MzRGZsb2F0IG1fY2xlYXJDb2xvcls0XTsKKyAg
ICBib29sIG1fc2Npc3NvckVuYWJsZWQ7CisgICAgR0MzRGZsb2F0IG1fY2xlYXJEZXB0aDsKKyAg
ICBHQzNEaW50IG1fY2xlYXJTdGVuY2lsOworICAgIEdDM0Rib29sZWFuIG1fY29sb3JNYXNrWzRd
OworICAgIEdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOworCisgICAgYm9vbCBtX3N0ZW5jaWxFbmFi
bGVkOworICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNpbE1hc2tCYWNrOworICAg
IEdDM0RpbnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1JlZkJhY2s7IC8vIE5vdGUg
dGhhdCB0aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywgbm90IHRoZSBpbnRlcm5h
bCBjbGFtcGVkIHZhbHVlLgorICAgIEdDM0R1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBtX3N0ZW5j
aWxGdW5jTWFza0JhY2s7CisKKyAgICBib29sIG1faXNHTEVTMkNvbXBsaWFudDsKKyAgICBib29s
IG1faXNHTEVTMk5QT1RTdHJpY3Q7CisgICAgYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9m
Qm91bmRzQWNjZXNzZXM7CisgICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZlOworICAgIGJvb2wgbV9p
c0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKKyAgICBib29sIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9y
dGVkOworCisgICAgYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlOworICAgIGludCBt
X251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKKworICAgIC8vIEEgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IGNhbiBiZSBjcmVhdGVkIGluIGEgc3RhdGUgd2hlcmUgaXQgYXBwZWFycyBhcworICAg
IC8vIGEgdmFsaWQgYW5kIGFjdGl2ZSBjb250ZXh0LCBidXQgd2lsbCBub3QgZXhlY3V0ZSBhbnkg
aW1wb3J0YW50IG9wZXJhdGlvbnMKKyAgICAvLyB1bnRpbCBpdHMgbG9hZCBwb2xpY3kgaXMgY29t
cGxldGVseSByZXNvbHZlZC4KKyAgICBib29sIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsK
KyAgICBib29sIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbjsKKyAgICBib29sIGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKTsKKworICAgIC8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVjdHMu
CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRU
ZXh0dXJlRmlsdGVyQW5pc290cm9waWM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRl
eHR1cmVMT0Q+IG1fZXh0U2hhZGVyVGV4dHVyZUxPRDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VT
VGV4dHVyZUZsb2F0PiBtX29lc1RleHR1cmVGbG9hdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VT
VGV4dHVyZUZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVGbG9hdExpbmVhcjsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVI
YWxmRmxvYXRMaW5lYXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZhdGl2
ZXM+IG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVmVy
dGV4QXJyYXlPYmplY3Q+IG1fb2VzVmVydGV4QXJyYXlPYmplY3Q7CisgICAgc3RkOjp1bmlxdWVf
cHRyPE9FU0VsZW1lbnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViR0xMb3NlQ29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJl
ckluZm87CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVi
dWdTaGFkZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
PiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmdsQ29t
cHJlc3NlZFRleHR1cmVTM1RDOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVy
ZT4gbV93ZWJnbERlcHRoVGV4dHVyZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVm
ZmVycz4gbV93ZWJnbERyYXdCdWZmZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3Rh
bmNlZEFycmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKKworICAgIC8vIEhlbHBlcnMgZm9y
IGdldFBhcmFtZXRlciBhbmQgb3RoZXJzCisgICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJh
bWV0ZXIoR0MzRGVudW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0
ZXIoR0MzRGVudW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51
bSk7CisgICAgV2ViR0xHZXRJbmZvIGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7CisgICAgV2Vi
R0xHZXRJbmZvIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTEdl
dEluZm8gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTEdl
dEluZm8gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CisKKyAgICAvLyBDbGVh
ciB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVy
YXRpb24uCisgICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55IGNs
ZWFyIHRoYXQgd291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKKyAgICAvLyBhbmQgdGhl
IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4K
KyAgICBib29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAwKTsK
KworICAgIC8vIEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1l
YnVmZmVyIG1heSBkZXN0cm95LgorICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwor
CisgICAgdm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4SW1hZ2UyREltcGwo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNE
OjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4
U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJ
bWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFks
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBjaGVj
a1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOworCisgICAgdm9pZCBjcmVh
dGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBm
b3IgY29weVRleHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0Cisg
ICAgLy8gYW5kIHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZy
YW1lYnVmZmVyIGNvbWJpbmF0aW9uCisgICAgLy8gaXMgdmFsaWQuCisgICAgYm9vbCBpc1RleElu
dGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVy
bmFsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7CisKKyAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBmb3Jt
YXQuCisgICAgR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRo
LgorICAgIGludCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKKworICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgorICAgIGludCBn
ZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
dmVyaWZ5IGxpbWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2Nh
dGlvbnMuCisgICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hl
Y2sgaWYgc2l6ZSBpcyBub24tbmVnYXRpdmUuCisgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5k
IHJldHVybiBmYWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVl
LgorICAgIGJvb2wgdmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGlu
dCB4LCBHQzNEaW50IHkpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFs
bCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQorICAgIC8vIEFTQ0lJIHN1
YnNldCBhcyBkZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCisgICAgYm9v
bCB2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYp
OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQgdGV4dHVyZSBi
b3VuZCB0byB0aGUgdGFyZ2V0LgorICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0dXJu
IDAgaWYgdGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcworICAgIC8vIG51bGwu
ICBPdGhlcndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgorICAg
IFdlYkdMVGV4dHVyZSogdmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApOworCisg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBmdW5j
dGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5k
IHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICBib29sIHZhbGlk
YXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOworCisgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1
Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYg
bGV2ZWwgaXMgaW52YWxpZC4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKKworICAg
IGVudW0gVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgeworICAgICAgICBOb3RUZXhTdWJJ
bWFnZTJELAorICAgICAgICBUZXhTdWJJbWFnZTJELAorICAgIH07CisKKyAgICBlbnVtIFRleEZ1
bmNWYWxpZGF0aW9uU291cmNlVHlwZSB7CisgICAgICAgIFNvdXJjZUFycmF5QnVmZmVyVmlldywK
KyAgICAgICAgU291cmNlSW1hZ2VEYXRhLAorICAgICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50
LAorICAgICAgICBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwKKyAgICAgICAgU291cmNlSFRNTFZp
ZGVvRWxlbWVudCwKKyAgICB9OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3Vi
fUltYWdlMkQgdG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3RhcmdldC93
aWR0aC9oZWlnaHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCisgICAgLy8gT3Ro
ZXJ3aXNlLCBpdCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdvcmsu
CisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhG
dW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsCisgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVy
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJh
bWV0ZXJzIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0
ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4K
KyAgICBib29sIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlv
bkZ1bmN0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlKTsKKworICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKKyAgICAgICAgTnVs
bEFsbG93ZWQsCisgICAgICAgIE51bGxOb3RBbGxvd2VkCisgICAgfTsKKworICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKKyAg
ICAvLyBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3Ig
dGhlIHRleEltYWdlIGNhbGwuCisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5z
IGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1
bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24pOworCisgICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQgaXMg
c2V0dGFibGUgYXMgaW4KKyAgICAvLyB5b3UgY2FuIHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQs
IG9yIGNhbGwgdGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5kCisgICAgLy8gY29weVRleFN1
YkltYWdlMkQuCisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlm
IHRoZSBmb3JtYXQgaXMgbm90IHNldHRhYmxlLgorICAgIGJvb2wgdmFsaWRhdGVTZXR0YWJsZVRl
eEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEg
aXMgY29ycmVjdCBzaXplCisgICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVuc2lv
bnMuCisgICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsK
KworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1
cmUgZm9ybWF0cy4KKyAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51
bSBmb3JtYXQpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNz
ZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKKyAgICAvLyB0aGUgZ2l2ZW4gZm9y
bWF0LgorICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOworCisgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFy
ZSB2YWxpZCBmb3IKKyAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorICAgIGJvb2wgdmFsaWRhdGVD
b21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUq
KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0Fy
cmF5cy9FbGVtZW50c30uCisgICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0pOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlk
YXRlIGlmIGZyb250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdzIGFy
ZSB0aGUgc2FtZS4KKyAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc3Rl
bmNpbCBmdW5jLgorICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFy
YW1ldGVyZiBhbmQgdGV4UGFyYW1ldGVyaS4KKyAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFt
ZiwgYm9vbCBpc0Zsb2F0KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCBHTCBl
cnJvcnMgdG8gY29uc29sZS4KKyAgICB2b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uLCBjb25zdCBjaGFyKiByZWFzb24pOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHByaW50IHdhcm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQorICAgIC8vIHVzZWQgb25seSB0
byB3YXJuIGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCisgICAgdm9pZCBwcmludFdh
cm5pbmdUb0NvbnNvbGUoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25zLgor
ICAgIC8vIEdlbmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCisgICAg
Ym9vbCB2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOworCisgICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCisgICAgYm9v
bCB2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0
b3JzLgorICAgIGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOworCisgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KKyAgICBib29sIHZhbGlkYXRlQ2Fw
YWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKworICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1
bmN0aW9ucy4KKyAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSos
IEdDM0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJB
cnJheSosIEdDM0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwg
dm9pZCosIEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdD
M0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKKwor
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJE
YXRhLgorICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBv
ciAwIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRl
QnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHVzYWdlKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4
e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFp
bnQgT3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAg
IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBjYW52
YXMgaXMgcmVhZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KKyAgICBib29sIHZhbGlkYXRl
SFRNTENhbnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxl
bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVh
ZHkgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9FbGVt
ZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlv
bkNvZGUmKTsKKyNlbmRpZgorCisgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0
cmliTmZ7dn0uCisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQs
IEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOworICAgIHZvaWQgdmVydGV4QXR0cmli
ZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJB
cnJheSosIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliZnZJ
bXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCos
IEdDM0RzaXplaSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7CisKKyAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBmdW5j
dGlvbnMuCisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhv
dXQgZnVydGhlciBwcm9jZXNzaW5nLgorICAgIGJvb2wgZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0
Kik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBiaW5k
VGV4dHVyZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KKyAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBh
bHJlYWR5IGJlZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8gdHJ1ZSB1cG9uIHJldHVybi4KKyAg
ICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVy
IHByb2Nlc3NpbmcuCisgICAgYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7CisKKyAgICAvLyBIZWxw
ZXJzIGZvciBzaW11bGF0aW5nIHZlcnRleEF0dHJpYjAKKyAgICB2b2lkIGluaXRWZXJ0ZXhBdHRy
aWIwKCk7CisgICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRl
eCk7CisgICAgdm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigp
OworCisgICAgdm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKTsKKyAgICAvLyBIZWxwZXIg
Zm9yIHJlc3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KKyAgICB2b2lkIG1heWJlUmVzdG9y
ZUNvbnRleHQoKTsKKworICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxl
Z2VkIGNvZGUgaW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAorICAgIC8vIGEgU2FmYXJpIG9y
IENocm9tZSBleHRlbnNpb24uCisgICAgYm9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkg
Y29uc3Q7CisKKyAgICBlbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7CisgICAgICAgIERp
c3BsYXlJbkNvbnNvbGUsCisgICAgICAgIERvbnREaXNwbGF5SW5Db25zb2xlCisgICAgfTsKKwor
ICAgIC8vIFdyYXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0
aGF0IHNlbmRzIGEgbWVzc2FnZQorICAgIC8vIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCisg
ICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0g
RGlzcGxheUluQ29uc29sZSk7CisKKyAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJp
bmcmKSBjb25zdDsKKworICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBiYXNl
ZCBvbiB1c2VyIHNldHRpbmcgYW5kCisgICAgLy8gd2hldGhlciB0aGUgY3VycmVudCBGQk8gaGFz
IGEgc3RlbmNpbCBidWZmZXIuCisgICAgdm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7CisKKyAgICAv
LyBIZWxwZXIgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCisgICAgdm9p
ZCBlbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOworCisg
ICAgLy8gQ2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMu
CisgICAgSW50U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworCisgICAgLy8gRmlyc3QgdGltZSBj
YWxsZWQsIGlmIEVYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFsdWU7
IG90aGVyd2lzZSByZXR1cm4gMC4KKyAgICAvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFs
dWUuCisgICAgR0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOworICAgIEdDM0RpbnQgZ2V0TWF4
Q29sb3JBdHRhY2htZW50cygpOworCisgICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51
bSk7CisKKyAgICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKKyAgICB2b2lkIHJl
c3RvcmVDdXJyZW50VGV4dHVyZTJEKCk7CisKKyAgICAvLyBDaGVjayBpZiBFWFRfZHJhd19idWZm
ZXJzIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wg
cmVxdWlyZW1lbnRzLgorICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjYsNzg0ICsyNiwxNiBAQAogI2lmbmRlZiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRfaAogI2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCi0jaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgot
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJX
ZWJHTEdldEluZm8uaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8cnVudGltZS9GbG9h
dDMyQXJyYXkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQU5HTEVJbnN0YW5jZWRBcnJheXM7
Ci1jbGFzcyBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7Ci1jbGFzcyBFWFRTaGFkZXJUZXh0
dXJlTE9EOwotY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7
Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFNpemU7Ci1j
bGFzcyBPRVNTdGFuZGFyZERlcml2YXRpdmVzOwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0OwotY2xh
c3MgT0VTVGV4dHVyZUZsb2F0TGluZWFyOwotY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdDsKLWNs
YXNzIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI7Ci1jbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVj
dDsKLWNsYXNzIE9FU0VsZW1lbnRJbmRleFVpbnQ7Ci1jbGFzcyBXZWJHTEFjdGl2ZUluZm87Ci1j
bGFzcyBXZWJHTEJ1ZmZlcjsKLWNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xD
b250ZXh0T2JqZWN0OwotY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLWNsYXNzIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDOwotY2xhc3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKLWNsYXNzIFdlYkdMRGVidWdSZW5k
ZXJlckluZm87Ci1jbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLWNsYXNzIFdlYkdMRGVwdGhUZXh0
dXJlOwotY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsKLWNsYXNzIFdlYkdMRXh0ZW5zaW9uOwotY2xh
c3MgV2ViR0xGcmFtZWJ1ZmZlcjsKLWNsYXNzIFdlYkdMTG9zZUNvbnRleHQ7Ci1jbGFzcyBXZWJH
TE9iamVjdDsKLWNsYXNzIFdlYkdMUHJvZ3JhbTsKLWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwot
Y2xhc3MgV2ViR0xTaGFkZXI7Ci1jbGFzcyBXZWJHTFNoYXJlZE9iamVjdDsKLWNsYXNzIFdlYkdM
U2hhZGVyUHJlY2lzaW9uRm9ybWF0OwotY2xhc3MgV2ViR0xUZXh0dXJlOwotY2xhc3MgV2ViR0xV
bmlmb3JtTG9jYXRpb247Ci1jbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwotCi10eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgZmlu
YWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCB7CitjbGFzcyBXZWJHTDFSZW5kZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzKik7Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBhY2NlbGVyYXRl
ZCAzZCBjYW52YXMgb24gV2luZG93cy4KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZWxzZQotICAgIHZpcnR1YWwgYm9v
bCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlm
Ci0KLSAgICBpbnQgZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3Q7Ci0gICAgaW50IGRyYXdpbmdC
dWZmZXJIZWlnaHQoKSBjb25zdDsKLQotICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0
ZXh0dXJlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9n
cmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBiaW5kQXR0cmli
TG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IFdlYkdMQnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEZyYW1lYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZl
ciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdl
dCwgV2ViR0xUZXh0dXJlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmxlbmRDb2xvcihH
QzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQg
YWxwaGEpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lk
IGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxw
aGEpOwotICAgIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0
b3IpOwotICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51
bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7Ci0KLSAgICB2
b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0g
dXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRh
dGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBidWZmZXJTdWJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0
KTsKLSAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKLSAgICB2b2lkIGNsZWFyQ29s
b3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZs
b2F0IGFscGhhKTsKLSAgICB2b2lkIGNsZWFyRGVwdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGNs
ZWFyU3RlbmNpbChHQzNEaW50KTsKLSAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQs
IEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7
Ci0gICAgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwot
Ci0gICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
QXJyYXlCdWZmZXJWaWV3KiBkYXRhKTsKLSAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBk
YXRhKTsKLQotICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOwotICAgIHZv
aWQgY29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAgICBQYXNzUmVmUHRyPFdlYkdMQnVm
ZmVyPiBjcmVhdGVCdWZmZXIoKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNy
ZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVBy
b2dyYW0oKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5kZXJi
dWZmZXIoKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGVTaGFkZXIoR0MzRGVu
dW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBj
cmVhdGVUZXh0dXJlKCk7Ci0KLSAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOwotCi0g
ICAgdm9pZCBkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1l
YnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dyYW0oV2ViR0xQ
cm9ncmFtKik7Ci0gICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIq
KTsKLSAgICB2b2lkIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciopOwotICAgIHZvaWQgZGVsZXRl
VGV4dHVyZShXZWJHTFRleHR1cmUqKTsKLQotICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsK
LSAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbik7Ci0gICAgdm9pZCBkZXB0aFJhbmdlKEdD
M0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpOwotICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdl
YkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZGlz
YWJsZShHQzNEZW51bSBjYXApOwotICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdD
M0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdDM0Rl
bnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAg
dm9pZCBlbmFibGUoR0MzRGVudW0gY2FwKTsKLSAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmaW5pc2goKTsK
LSAgICB2b2lkIGZsdXNoKCk7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgV2ViR0xSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKLQotICAgIFBhc3NSZWZQdHI8V2ViR0xBY3Rp
dmVJbmZvPiBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZl
VW5pZm9ybShXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIGJvb2wgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSosIFZlY3RvcjxSZWZQdHI8
V2ViR0xTaGFkZXI+PiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBHQzNEaW50IGdldEF0dHJpYkxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgV2ViR0xHZXRJ
bmZvIGdldEJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBn
ZXRDb250ZXh0QXR0cmlidXRlcygpOwotICAgIEdDM0RlbnVtIGdldEVycm9yKCk7Ci0gICAgV2Vi
R0xFeHRlbnNpb24qIGdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIFdlYkdM
R2V0SW5mbyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIFdlYkdMR2V0SW5mbyBnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0q
LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRQcm9ncmFt
SW5mb0xvZyhXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZv
IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFNoYWRlclBhcmFtZXRlcihX
ZWJHTFNoYWRlciosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5n
IGdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFz
c1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9y
bWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIFZlY3RvcjxTdHJpbmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsK
LSAgICBXZWJHTEdldEluZm8gZ2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9ybShX
ZWJHTFByb2dyYW0qLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBnZXRVbmlmb3JtTG9jYXRp
b24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdl
YkdMR2V0SW5mbyBnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgbG9uZyBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldChH
QzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpOwotCi0gICAgdm9pZCBoaW50KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gbW9kZSk7Ci0gICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xC
dWZmZXIqKTsKLSAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKLSAgICBHQzNEYm9vbGVh
biBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKTsKLSAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVy
KFdlYkdMRnJhbWVidWZmZXIqKTsKLSAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9n
cmFtKik7Ci0gICAgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIq
KTsKLSAgICBHQzNEYm9vbGVhbiBpc1NoYWRlcihXZWJHTFNoYWRlciopOwotICAgIEdDM0Rib29s
ZWFuIGlzVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKLQotICAgIHZvaWQgbGluZVdpZHRoKEdDM0Rm
bG9hdCk7Ci0gICAgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCBwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7
Ci0gICAgdm9pZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0
cyk7Ci0gICAgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
QXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbGVh
c2VTaGFkZXJDb21waWxlcigpOwotICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQpOwotICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBH
QzNEYm9vbGVhbiBpbnZlcnQpOwotICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHNoYWRlclNv
dXJjZShXZWJHTFNoYWRlciosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNr
KTsKLSAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0g
ZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE1hc2so
R0MzRHVpbnQpOwotICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBH
QzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51
bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpOwotICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0Mz
RGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNz
KTsKLQotICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNp
ZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSNlbmRpZgotCi0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhQYXJh
bWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwot
Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFn
ZUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jaWYgRU5BQkxFKFZJREVP
KQotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNl
cHRpb25Db2RlJik7Ci0jZW5kaWYKLQotICAgIHZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBG
bG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJ
bnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5p
Zm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yaShj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlm
b3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlm
b3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5
KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZv
cm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTRmKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50
IHcsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
Ym9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXpl
aSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBG
bG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0
cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0
KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgdXNl
UHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB2YWxpZGF0
ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB2ZXJ0
ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdmVydGV4
QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNE
c2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwotICAg
IHZvaWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxv
YXQgeSwgR0MzRGZsb2F0IHopOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGlu
ZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdD
M0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRy
aWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7
Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNp
emUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzdHJpZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmKTsKLQotICAgIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAgICAvLyBXRUJLSVRfbG9zZV9j
b250ZXh0IHN1cHBvcnQKLSAgICBlbnVtIExvc3RDb250ZXh0TW9kZSB7Ci0gICAgICAgIC8vIExv
c3QgY29udGV4dCBvY2N1cnJlZCBhdCB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGxldmVsLgotICAgICAg
ICBSZWFsTG9zdENvbnRleHQsCi0KLSAgICAgICAgLy8gTG9zdCBjb250ZXh0IHByb3Zva2VkIGJ5
IFdFQktJVF9sb3NlX2NvbnRleHQuCi0gICAgICAgIFN5bnRoZXRpY0xvc3RDb250ZXh0Ci0gICAg
fTsKLSAgICB2b2lkIGZvcmNlTG9zdENvbnRleHQoTG9zdENvbnRleHRNb2RlKTsKLSAgICB2b2lk
IGZvcmNlUmVzdG9yZUNvbnRleHQoKTsKLSAgICB2b2lkIGxvc2VDb250ZXh0SW1wbChMb3N0Q29u
dGV4dE1vZGUpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0gICAgV2ViR0xDb250ZXh0R3JvdXAq
IGNvbnRleHRHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9Ci0g
ICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLQotICAgIHZvaWQg
bWFya0xheWVyQ29tcG9zaXRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcygpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwotCi0gICAgdm9pZCByZW1vdmVTaGFyZWRP
YmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3Qo
V2ViR0xDb250ZXh0T2JqZWN0Kik7Ci0gICAgCi0gICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0
cmlicygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VmVydGV4QXR0cmliczsgfQotCi0gICAgLy8gQU5H
TEVfaW5zdGFuY2VkX2FycmF5cyBleHRlbnNpb24gZnVuY3Rpb25zLgotICAgIHZvaWQgZHJhd0Fy
cmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291
bnQsIEdDM0RzaXplaSBwcmltY291bnQpOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25n
IG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZp
c29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKTsKLQotcHJpdmF0ZToKLSAgICBm
cmllbmQgY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xGcmFt
ZWJ1ZmZlcjsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xPYmplY3Q7Ci0gICAgZnJpZW5kIGNsYXNz
IE9FU1ZlcnRleEFycmF5T2JqZWN0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTERlYnVnU2hhZGVy
czsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLSAgICBmcmll
bmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOwotICAgIGZyaWVuZCBjbGFzcyBX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xSZW5kZXJp
bmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVM7Ci0KLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZh
c0VsZW1lbnQqLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7Ci0gICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4sIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKTsKLSAgICB2b2lkIGluaXRpYWxp
emVOZXdDb250ZXh0KCk7Ci0gICAgdm9pZCBzZXR1cEZsYWdzKCk7Ci0KLSAgICAvLyBBY3RpdmVE
T01PYmplY3QKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRk
U2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7Ci0gICAgdm9pZCBhZGRDb250ZXh0T2Jq
ZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOwotICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2Jq
ZWN0cygpOwotCi0gICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLSAgICB2b2lk
IG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotCi0gICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWls
dCBvbiB0b3Agb2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9uLgotICAgIGJvb2wgaXNH
TEVTMkNvbXBsaWFudCgpIHsgcmV0dXJuIG1faXNHTEVTMkNvbXBsaWFudDsgfQotICAgIC8vIFF1
ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KLSAgICBib29sIGlz
R0xFUzJOUE9UU3RyaWN0KCkgeyByZXR1cm4gbV9pc0dMRVMyTlBPVFN0cmljdDsgfQotICAgIC8v
IFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1v
Zi1ib3VuZHMgYnVmZmVyIGFjY2Vzc2VzLgotICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0
T2ZCb3VuZHNBY2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlczsgfQotICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0
aWFsaXplcyB0ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgYm9vbCBpc1Jlc291cmNl
U2FmZSgpIHsgcmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7IH0KLSAgICAvLyBRdWVyeSBpZiBkZXB0
aF9zdGVuY2lsIGJ1ZmZlciBpcyBzdXBwb3J0ZWQuCi0gICAgYm9vbCBpc0RlcHRoU3RlbmNpbFN1
cHBvcnRlZCgpIHsgcmV0dXJuIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7IH0KLQotICAgIC8v
IEhlbHBlciB0byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMK
LSAgICAvLyBsaWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KLSAgICB1bnNpZ25lZCBpbnQgc2l6
ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSk7Ci0KLSAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIGNv
dW50IGFuZCBvZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVudCBhcnJh
eSBidWZmZXIKLSAgICBib29sIHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291
bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKLQotICAgIC8vIENvbnNlcnZh
dGl2ZSBidXQgcXVpY2sgaW5kZXggdmFsaWRhdGlvbgotICAgIGJvb2wgdmFsaWRhdGVJbmRleEFy
cmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVp
cmVkKTsKLQotICAgIC8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlvbiAtLSBvbmx5
IGRvbmUgaWYgY29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCi0gICAgYm9vbCB2YWxpZGF0ZUluZGV4
QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBv
ZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKLSAgICBib29sIHZhbGlkYXRl
VmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2
ZUNvdW50ID0gMCk7Ci0KLSAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhcios
IFdlYkdMT2JqZWN0Kik7Ci0KLSAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBj
b3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7Ci0gICAgYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRz
KTsKLQotICAgIC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0LgotICAgIHZvaWQg
YWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOwotCi0gICAgUGFzc1JlZlB0cjxJ
bWFnZT4gZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSosIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IGRldmljZVNjYWxlRmFjdG9yKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBQYXNzUmVm
UHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgQmFja2luZ1N0
b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IG1fY29udGV4dDsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IG1fY29u
dGV4dEdyb3VwOwotCi0gICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8g
YSBEcmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5Ci0gICAgLy8gdG8gdGhlIGJhY2st
YnVmZmVyIG9mIG1fY29udGV4dC4KLSAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5n
QnVmZmVyOwotCi0gICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0
IGlzIGRldGVybWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgotICAgIC8vIFRoaXMgaXMgdXNlZCBi
b3RoIGZvciBzeW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMs
IGl0J3MKLSAgICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0
YWNrLCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKLSAgICAvLyBvbiBob3cgZXhhY3RseSB0
aGUgcGxhdGZvcm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBiZXR0
ZXIKLSAgICAvLyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRo
ZSBldmVudC4KLSAgICBUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOwotICAg
IGJvb2wgbV9yZXN0b3JlQWxsb3dlZDsKLSAgICBUaW1lciBtX3Jlc3RvcmVUaW1lcjsKLQotICAg
IGJvb2wgbV9uZWVkc1VwZGF0ZTsKLSAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7Ci0gICAg
SGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3RzOwotCi0gICAgLy8g
TGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFib3V0IHNpemVzIGZv
ciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRfQVJSQVlfQlVGRkVS
Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAgCi0gICAg
UmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZlcnRleEFycmF5T2Jq
ZWN0OwotICAgIFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3Q7Ci0gICAgdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2JqZWN0KFBhc3NSZWZQ
dHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCi0gICAgewotICAgICAg
ICBpZiAoYXJyYXlPYmplY3QpCi0gICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qg
PSBhcnJheU9iamVjdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgfQotICAgIAotICAg
IGNsYXNzIFZlcnRleEF0dHJpYlZhbHVlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFZlcnRleEF0
dHJpYlZhbHVlKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW5pdFZhbHVlKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgaW5pdFZhbHVlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgdmFsdWVbMF0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOwotICAg
ICAgICAgICAgdmFsdWVbMl0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbM10gPSAxLjBmOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBHQzNEZmxvYXQgdmFsdWVbNF07Ci0gICAgfTsK
LSAgICBWZWN0b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0cmliVmFsdWU7Ci0gICAg
dW5zaWduZWQgbV9tYXhWZXJ0ZXhBdHRyaWJzOwotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbV92
ZXJ0ZXhBdHRyaWIwQnVmZmVyOwotICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZTsK
LSAgICBHQzNEZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07Ci0gICAgYm9vbCBt
X2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbDsKLSAgICBib29sIG1fdmVydGV4QXR0cmliMFVzZWRC
ZWZvcmU7Ci0KLSAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOwotICAg
IFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAgICBSZWZQ
dHI8V2ViR0xSZW5kZXJidWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKLSAgICBzdHJ1Y3Qg
VGV4dHVyZVVuaXRTdGF0ZSB7Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmUy
REJpbmRpbmc7Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmVDdWJlTWFwQmlu
ZGluZzsKLSAgICB9OwotICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0
czsKLSAgICB1bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7Ci0KLSAgICBSZWZQdHI8
V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZTJEOwotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+
IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcDsKLQotICAgIFZlY3RvcjxHQzNEZW51bT4gbV9jb21wcmVz
c2VkVGV4dHVyZUZvcm1hdHM7Ci0KLSAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJldXNhYmxl
IGltYWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCi0gICAgY2xhc3MgTFJV
SW1hZ2VCdWZmZXJDYWNoZSB7Ci0gICAgcHVibGljOgotICAgICAgICBMUlVJbWFnZUJ1ZmZlckNh
Y2hlKGludCBjYXBhY2l0eSk7Ci0gICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93
bmVkIGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgotICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBi
dWJibGVUb0Zyb250KGludCBpZHgpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7Ci0gICAgICAgIGludCBtX2NhcGFjaXR5
OwotICAgIH07Ci0gICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZEltYWdlQ2FjaGU7
Ci0KLSAgICBHQzNEaW50IG1fbWF4VGV4dHVyZVNpemU7Ci0gICAgR0MzRGludCBtX21heEN1YmVN
YXBUZXh0dXJlU2l6ZTsKLSAgICBHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKLSAgICBH
QzNEaW50IG1fbWF4Vmlld3BvcnREaW1zWzJdOwotICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlTGV2
ZWw7Ci0gICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0KLSAgICBHQzNEaW50
IG1fbWF4RHJhd0J1ZmZlcnM7Ci0gICAgR0MzRGludCBtX21heENvbG9yQXR0YWNobWVudHM7Ci0g
ICAgR0MzRGVudW0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICBib29sIG1fZHJhd0J1ZmZlcnNXZWJH
TFJlcXVpcmVtZW50c0NoZWNrZWQ7Ci0gICAgYm9vbCBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOwot
Ci0gICAgR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7Ci0gICAgR0MzRGludCBtX3VucGFja0FsaWdu
bWVudDsKLSAgICBib29sIG1fdW5wYWNrRmxpcFk7Ci0gICAgYm9vbCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGE7Ci0gICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKLSAg
ICBib29sIG1fY29udGV4dExvc3Q7Ci0gICAgTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RN
b2RlOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKLQot
ICAgIGJvb2wgbV9sYXllckNsZWFyZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJDb2xvcls0XTsK
LSAgICBib29sIG1fc2Npc3NvckVuYWJsZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJEZXB0aDsK
LSAgICBHQzNEaW50IG1fY2xlYXJTdGVuY2lsOwotICAgIEdDM0Rib29sZWFuIG1fY29sb3JNYXNr
WzRdOwotICAgIEdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOwotCi0gICAgYm9vbCBtX3N0ZW5jaWxF
bmFibGVkOwotICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNpbE1hc2tCYWNrOwot
ICAgIEdDM0RpbnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1JlZkJhY2s7IC8vIE5v
dGUgdGhhdCB0aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywgbm90IHRoZSBpbnRl
cm5hbCBjbGFtcGVkIHZhbHVlLgotICAgIEdDM0R1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBtX3N0
ZW5jaWxGdW5jTWFza0JhY2s7Ci0KLSAgICBib29sIG1faXNHTEVTMkNvbXBsaWFudDsKLSAgICBi
b29sIG1faXNHTEVTMk5QT1RTdHJpY3Q7Ci0gICAgYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91
dE9mQm91bmRzQWNjZXNzZXM7Ci0gICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZlOwotICAgIGJvb2wg
bV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKLSAgICBib29sIG1faXNSb2J1c3RuZXNzRVhUU3Vw
cG9ydGVkOwotCi0gICAgYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlOwotICAgIGlu
dCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKLQotICAgIC8vIEEgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IGNhbiBiZSBjcmVhdGVkIGluIGEgc3RhdGUgd2hlcmUgaXQgYXBwZWFycyBhcwot
ICAgIC8vIGEgdmFsaWQgYW5kIGFjdGl2ZSBjb250ZXh0LCBidXQgd2lsbCBub3QgZXhlY3V0ZSBh
bnkgaW1wb3J0YW50IG9wZXJhdGlvbnMKLSAgICAvLyB1bnRpbCBpdHMgbG9hZCBwb2xpY3kgaXMg
Y29tcGxldGVseSByZXNvbHZlZC4KLSAgICBib29sIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bjsKLSAgICBib29sIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbjsKLSAgICBib29sIGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKTsKLQotICAgIC8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVj
dHMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9l
eHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRl
clRleHR1cmVMT0Q+IG1fZXh0U2hhZGVyVGV4dHVyZUxPRDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
T0VTVGV4dHVyZUZsb2F0PiBtX29lc1RleHR1cmVGbG9hdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
T0VTVGV4dHVyZUZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVGbG9hdExpbmVhcjsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1
cmVIYWxmRmxvYXRMaW5lYXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZh
dGl2ZXM+IG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VT
VmVydGV4QXJyYXlPYmplY3Q+IG1fb2VzVmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPE9FU0VsZW1lbnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViR0xMb3NlQ29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5k
ZXJlckluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmds
RGVidWdTaGFkZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDPiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmds
Q29tcHJlc3NlZFRleHR1cmVTM1RDOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4
dHVyZT4gbV93ZWJnbERlcHRoVGV4dHVyZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3
QnVmZmVycz4gbV93ZWJnbERyYXdCdWZmZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUlu
c3RhbmNlZEFycmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKLQotICAgIC8vIEhlbHBlcnMg
Zm9yIGdldFBhcmFtZXRlciBhbmQgb3RoZXJzCi0gICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5Q
YXJhbWV0ZXIoR0MzRGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJh
bWV0ZXIoR0MzRGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRlcihHQzNE
ZW51bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAg
V2ViR0xHZXRJbmZvIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJH
TEdldEluZm8gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJH
TEdldEluZm8gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7Ci0KLSAgICAvLyBD
bGVhciB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBv
cGVyYXRpb24uCi0gICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55
IGNsZWFyIHRoYXQgd291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKLSAgICAvLyBhbmQg
dGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2Fy
eS4KLSAgICBib29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAw
KTsKLQotICAgIC8vIEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZy
YW1lYnVmZmVyIG1heSBkZXN0cm95LgotICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigp
OwotCi0gICAgdm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRElt
cGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4
dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBj
aGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOwotCi0gICAgdm9pZCBj
cmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
biBmb3IgY29weVRleHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0
Ci0gICAgLy8gYW5kIHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5k
IGZyYW1lYnVmZmVyIGNvbWJpbmF0aW9uCi0gICAgLy8gaXMgdmFsaWQuCi0gICAgYm9vbCBpc1Rl
eEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleElu
dGVybmFsRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7Ci0KLSAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBm
b3JtYXQuCi0gICAgR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdp
ZHRoLgotICAgIGludCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKLQotICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgotICAgIGlu
dCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmVyaWZ5IGxpbWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBs
b2NhdGlvbnMuCi0gICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
Y2hlY2sgaWYgc2l6ZSBpcyBub24tbmVnYXRpdmUuCi0gICAgLy8gR2VuZXJhdGUgR0wgZXJyb3Ig
YW5kIHJldHVybiBmYWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0
cnVlLgotICAgIGJvb2wgdmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGludCB4LCBHQzNEaW50IHkpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlm
IGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQotICAgIC8vIEFTQ0lJ
IHN1YnNldCBhcyBkZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCi0gICAg
Ym9vbCB2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQgdGV4dHVy
ZSBib3VuZCB0byB0aGUgdGFyZ2V0LgotICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0
dXJuIDAgaWYgdGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcwotICAgIC8vIG51
bGwuICBPdGhlcndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0Lgot
ICAgIFdlYkdMVGV4dHVyZSogdmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApOwot
Ci0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBm
dW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3Ig
YW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBib29sIHZh
bGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4
e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2Ug
aWYgbGV2ZWwgaXMgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKLQot
ICAgIGVudW0gVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgewotICAgICAgICBOb3RUZXhT
dWJJbWFnZTJELAotICAgICAgICBUZXhTdWJJbWFnZTJELAotICAgIH07Ci0KLSAgICBlbnVtIFRl
eEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSB7Ci0gICAgICAgIFNvdXJjZUFycmF5QnVmZmVyVmll
dywKLSAgICAgICAgU291cmNlSW1hZ2VEYXRhLAotICAgICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVt
ZW50LAotICAgICAgICBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwKLSAgICAgICAgU291cmNlSFRN
TFZpZGVvRWxlbWVudCwKLSAgICB9OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7
U3VifUltYWdlMkQgdG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3Rhcmdl
dC93aWR0aC9oZWlnaHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCi0gICAgLy8g
T3RoZXJ3aXNlLCBpdCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdv
cmsuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBU
ZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBl
LCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0Mz
RGludCB5b2Zmc2V0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBw
YXJhbWV0ZXJzIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5l
cmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxp
ZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRh
dGlvbkZ1bmN0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlKTsKLQotICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKLSAgICAgICAg
TnVsbEFsbG93ZWQsCi0gICAgICAgIE51bGxOb3RBbGxvd2VkCi0gICAgfTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcK
LSAgICAvLyBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBm
b3IgdGhlIHRleEltYWdlIGNhbGwuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1
cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRl
eEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4
ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24pOwotCi0g
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQg
aXMgc2V0dGFibGUgYXMgaW4KLSAgICAvLyB5b3UgY2FuIHN1cHBseSBkYXRhIHRvIHRleEltYWdl
MkQsIG9yIGNhbGwgdGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5kCi0gICAgLy8gY29weVRl
eFN1YkltYWdlMkQuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNl
IGlmIHRoZSBmb3JtYXQgaXMgbm90IHNldHRhYmxlLgotICAgIGJvb2wgdmFsaWRhdGVTZXR0YWJs
ZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCk7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRh
dGEgaXMgY29ycmVjdCBzaXplCi0gICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVu
c2lvbnMuCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxz
KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRl
eHR1cmUgZm9ybWF0cy4KLSAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNE
ZW51bSBmb3JtYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXBy
ZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4g
Zm9ybWF0LgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOwotCi0gICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25z
IGFyZSB2YWxpZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgotICAgIGJvb2wgdmFsaWRh
dGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1
cmUqKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3
e0FycmF5cy9FbGVtZW50c30uCi0gICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZh
bGlkYXRlIGlmIGZyb250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdz
IGFyZSB0aGUgc2FtZS4KLSAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUg
c3RlbmNpbCBmdW5jLgotICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4
UGFyYW1ldGVyZiBhbmQgdGV4UGFyYW1ldGVyaS4KLSAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBh
cmFtZiwgYm9vbCBpc0Zsb2F0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCBH
TCBlcnJvcnMgdG8gY29uc29sZS4KLSAgICB2b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25z
dCBTdHJpbmcmKTsKLSAgICB2b2lkIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uLCBjb25zdCBjaGFyKiByZWFzb24pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHByaW50IHdhcm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQotICAgIC8vIHVzZWQgb25s
eSB0byB3YXJuIGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCi0gICAgdm9pZCBwcmlu
dFdhcm5pbmdUb0NvbnNvbGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25z
LgotICAgIC8vIEdlbmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCi0g
ICAgYm9vbCB2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOwotCi0gICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCi0gICAg
Ym9vbCB2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBm
YWN0b3JzLgotICAgIGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KLSAgICBib29sIHZhbGlkYXRl
Q2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3Jt
IGZ1bmN0aW9ucy4KLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJh
eSosIEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50
MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
Kiwgdm9pZCosIEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVu
aWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSos
IEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVy
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsK
LQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZm
ZXJEYXRhLgotICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0
LCBvciAwIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgV2ViR0xCdWZmZXIqIHZhbGlk
YXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHVzYWdlKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3Ig
dGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3Qg
dGFpbnQgT3JpZ2luLgotICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLQot
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBj
YW52YXMgaXMgcmVhZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KLSAgICBib29sIHZhbGlk
YXRlSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFz
RWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMg
cmVhZHkgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgotICAgIGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9F
bGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSNlbmRpZgotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4
QXR0cmliTmZ7dn0uCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxv
YXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOwotICAgIHZvaWQgdmVydGV4QXR0
cmliZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0
MzJBcnJheSosIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwotICAgIHZvaWQgdmVydGV4QXR0cmli
ZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCosIEdDM0RzaXplaSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Ci0KLSAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gZm9yIGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBm
dW5jdGlvbnMuCi0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdp
dGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLgotICAgIGJvb2wgZGVsZXRlT2JqZWN0KFdlYkdMT2Jq
ZWN0Kik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBi
aW5kVGV4dHVyZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KLSAgICAvLyBJZiB0aGUgb2JqZWN0IGhh
cyBhbHJlYWR5IGJlZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8gdHJ1ZSB1cG9uIHJldHVybi4K
LSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0
aGVyIHByb2Nlc3NpbmcuCi0gICAgYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7Ci0KLSAgICAvLyBI
ZWxwZXJzIGZvciBzaW11bGF0aW5nIHZlcnRleEF0dHJpYjAKLSAgICB2b2lkIGluaXRWZXJ0ZXhB
dHRyaWIwKCk7Ci0gICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZl
cnRleCk7Ci0gICAgdm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlv
bigpOwotCi0gICAgdm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKTsKLSAgICAvLyBIZWxw
ZXIgZm9yIHJlc3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KLSAgICB2b2lkIG1heWJlUmVz
dG9yZUNvbnRleHQoKTsKLQotICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2
aWxlZ2VkIGNvZGUgaW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAotICAgIC8vIGEgU2FmYXJp
IG9yIENocm9tZSBleHRlbnNpb24uCi0gICAgYm9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25z
KCkgY29uc3Q7Ci0KLSAgICBlbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7Ci0gICAgICAg
IERpc3BsYXlJbkNvbnNvbGUsCi0gICAgICAgIERvbnREaXNwbGF5SW5Db25zb2xlCi0gICAgfTsK
LQotICAgIC8vIFdyYXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJv
ciB0aGF0IHNlbmRzIGEgbWVzc2FnZQotICAgIC8vIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUu
Ci0gICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNl
ID0gRGlzcGxheUluQ29uc29sZSk7Ci0KLSAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBT
dHJpbmcmKSBjb25zdDsKLQotICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBi
YXNlZCBvbiB1c2VyIHNldHRpbmcgYW5kCi0gICAgLy8gd2hldGhlciB0aGUgY3VycmVudCBGQk8g
aGFzIGEgc3RlbmNpbCBidWZmZXIuCi0gICAgdm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7Ci0KLSAg
ICAvLyBIZWxwZXIgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCi0gICAg
dm9pZCBlbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOwot
Ci0gICAgLy8gQ2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJ
TVMuCi0gICAgSW50U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwotCi0gICAgLy8gRmlyc3QgdGlt
ZSBjYWxsZWQsIGlmIEVYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFs
dWU7IG90aGVyd2lzZSByZXR1cm4gMC4KLSAgICAvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQg
dmFsdWUuCi0gICAgR0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOwotICAgIEdDM0RpbnQgZ2V0
TWF4Q29sb3JBdHRhY2htZW50cygpOwotCi0gICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNE
ZW51bSk7Ci0KLSAgICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKLSAgICB2b2lk
IHJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKCk7Ci0KLSAgICAvLyBDaGVjayBpZiBFWFRfZHJhd19i
dWZmZXJzIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2Vi
R0wgcmVxdWlyZW1lbnRzLgotICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworICAgIFdl
YkdMMVJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyk7CisgICAgV2ViR0wxUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxl
bWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyk7CiB9OwotCisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVu
ZGVyaW5nQ29udGV4dC5pZGwJKHJldmlzaW9uIDE3Njk5NCkJKGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDoxNzY5OTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMZW51bTsKK3R5cGVkZWYgYm9v
bGVhbiAgICAgICAgR0xib29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGJpdGZpZWxk
OwordHlwZWRlZiBieXRlICAgICAgICAgICBHTGJ5dGU7ICAgICAgICAgLyogJ2J5dGUnIHNob3Vs
ZCBiZSBhIHNpZ25lZCA4IGJpdCB0eXBlLiAqLwordHlwZWRlZiBzaG9ydCAgICAgICAgICBHTHNo
b3J0OwordHlwZWRlZiBsb25nICAgICAgICAgICBHTGludDsKK3R5cGVkZWYgbG9uZyAgICAgICAg
ICAgR0xzaXplaTsKK3R5cGVkZWYgbG9uZyBsb25nICAgICAgR0xpbnRwdHI7Cit0eXBlZGVmIGxv
bmcgbG9uZyAgICAgIEdMc2l6ZWlwdHI7Cit0eXBlZGVmIG9jdGV0ICAgICAgICAgIEdMdWJ5dGU7
ICAgICAgICAvKiAnb2N0ZXQnIHNob3VsZCBiZSBhbiB1bnNpZ25lZCA4IGJpdCB0eXBlLiAqLwor
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBHTHVzaG9ydDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAg
R0x1aW50OwordHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xmbG9hdDsKK3R5cGVkZWYgdW5y
ZXN0cmljdGVkIGZsb2F0IEdMY2xhbXBmOworCitbCisgICAgQ29uZGl0aW9uYWw9V0VCR0wsCisg
ICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCisgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKK10gaW50
ZXJmYWNlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewor
CisgICAgLyogQ2xlYXJCdWZmZXJNYXNrICovCisgICAgY29uc3QgR0xlbnVtIERFUFRIX0JVRkZF
Ul9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7CisgICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfQlVGRkVSX0JJVCAgICAgICAgICAgICA9IDB4MDAwMDA0MDA7CisgICAgY29uc3QgR0xlbnVt
IENPTE9SX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7CisKKyAgICAvKiBC
ZWdpbk1vZGUgKi8KKyAgICBjb25zdCBHTGVudW0gUE9JTlRTICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwMDAwOworICAgIGNvbnN0IEdMZW51bSBMSU5FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAwMDE7CisgICAgY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDAwMjsKKyAgICBjb25zdCBHTGVudW0gTElORV9TVFJJUCAgICAgICAgICAg
ICAgICAgICAgID0gMHgwMDAzOworICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRVMgICAgICAgICAg
ICAgICAgICAgICAgPSAweDAwMDQ7CisgICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAg
ICAgICAgICAgICAgICA9IDB4MDAwNTsKKyAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfRkFOICAg
ICAgICAgICAgICAgICAgID0gMHgwMDA2OworCisgICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1
cHBvcnRlZCBpbiBFUzIwKSAqLworICAgIC8qICAgICAgTkVWRVIgKi8KKyAgICAvKiAgICAgIExF
U1MgKi8KKyAgICAvKiAgICAgIEVRVUFMICovCisgICAgLyogICAgICBMRVFVQUwgKi8KKyAgICAv
KiAgICAgIEdSRUFURVIgKi8KKyAgICAvKiAgICAgIE5PVEVRVUFMICovCisgICAgLyogICAgICBH
RVFVQUwgKi8KKyAgICAvKiAgICAgIEFMV0FZUyAqLworCisgICAgLyogQmxlbmRpbmdGYWN0b3JE
ZXN0ICovCisgICAgY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9
IDA7CisgICAgY29uc3QgR0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7
CisgICAgY29uc3QgR0xlbnVtIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMw
MDsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgw
MzAxOworICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAzMDI7CisgICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA9
IDB4MDMwMzsKKyAgICBjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAg
ID0gMHgwMzA0OworICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAg
ICAgPSAweDAzMDU7CisKKyAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLworICAgIC8qICAgICAg
WkVSTyAqLworICAgIC8qICAgICAgT05FICovCisgICAgY29uc3QgR0xlbnVtIERTVF9DT0xPUiAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDMwNjsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVT
X0RTVF9DT0xPUiAgICAgICAgICAgID0gMHgwMzA3OworICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQ
SEFfU0FUVVJBVEUgICAgICAgICAgICAgPSAweDAzMDg7CisgICAgLyogICAgICBTUkNfQUxQSEEg
Ki8KKyAgICAvKiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KKyAgICAvKiAgICAgIERTVF9B
TFBIQSAqLworICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLworCisgICAgLyogQmxl
bmRFcXVhdGlvblNlcGFyYXRlICovCisgICAgY29uc3QgR0xlbnVtIEZVTkNfQUREICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODAwNjsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT04g
ICAgICAgICAgICAgICAgID0gMHg4MDA5OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElP
Tl9SR0IgICAgICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAq
LworICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgPSAweDg4
M0Q7CisKKyAgICAvKiBCbGVuZFN1YnRyYWN0ICovCisgICAgY29uc3QgR0xlbnVtIEZVTkNfU1VC
VFJBQ1QgICAgICAgICAgICAgICAgICA9IDB4ODAwQTsKKyAgICBjb25zdCBHTGVudW0gRlVOQ19S
RVZFUlNFX1NVQlRSQUNUICAgICAgICAgID0gMHg4MDBCOworCisgICAgLyogU2VwYXJhdGUgQmxl
bmQgRnVuY3Rpb25zICovCisgICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAg
ICAgICAgICA9IDB4ODBDODsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX1JHQiAgICAgICAg
ICAgICAgICAgID0gMHg4MEM5OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfQUxQSEEgICAg
ICAgICAgICAgICAgPSAweDgwQ0E7CisgICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAg
ICAgICAgICAgICAgICA9IDB4ODBDQjsKKyAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQ09MT1Ig
ICAgICAgICAgICAgICAgID0gMHg4MDAxOworICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09O
U1RBTlRfQ09MT1IgICAgICAgPSAweDgwMDI7CisgICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0FM
UEhBICAgICAgICAgICAgICAgICA9IDB4ODAwMzsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVT
X0NPTlNUQU5UX0FMUEhBICAgICAgID0gMHg4MDA0OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9D
T0xPUiAgICAgICAgICAgICAgICAgICAgPSAweDgwMDU7CisKKyAgICAvKiBCdWZmZXIgT2JqZWN0
cyAqLworICAgIGNvbnN0IEdMZW51bSBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgPSAw
eDg4OTI7CisgICAgY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA9
IDB4ODg5MzsKKyAgICBjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAg
ID0gMHg4ODk0OworICAgIGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5H
ICAgPSAweDg4OTU7CisKKyAgICBjb25zdCBHTGVudW0gU1RSRUFNX0RSQVcgICAgICAgICAgICAg
ICAgICAgID0gMHg4OEUwOworICAgIGNvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAg
ICAgICAgICAgPSAweDg4RTQ7CisgICAgY29uc3QgR0xlbnVtIERZTkFNSUNfRFJBVyAgICAgICAg
ICAgICAgICAgICA9IDB4ODhFODsKKworICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfU0laRSAgICAg
ICAgICAgICAgICAgICAgPSAweDg3NjQ7CisgICAgY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAg
ICAgICAgICAgICAgICAgICA9IDB4ODc2NTsKKworICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1ZF
UlRFWF9BVFRSSUIgICAgICAgICAgPSAweDg2MjY7CisKKyAgICAvKiBDdWxsRmFjZU1vZGUgKi8K
KyAgICBjb25zdCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0
OworICAgIGNvbnN0IEdMZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0
MDU7CisgICAgY29uc3QgR0xlbnVtIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA9IDB4
MDQwODsKKworICAgIC8qIERlcHRoRnVuY3Rpb24gKi8KKyAgICAvKiAgICAgIE5FVkVSICovCisg
ICAgLyogICAgICBMRVNTICovCisgICAgLyogICAgICBFUVVBTCAqLworICAgIC8qICAgICAgTEVR
VUFMICovCisgICAgLyogICAgICBHUkVBVEVSICovCisgICAgLyogICAgICBOT1RFUVVBTCAqLwor
ICAgIC8qICAgICAgR0VRVUFMICovCisgICAgLyogICAgICBBTFdBWVMgKi8KKworICAgIC8qIEVu
YWJsZUNhcCAqLworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAg
ICAgPSAweDBERTE7CisgICAgY29uc3QgR0xlbnVtIENVTExfRkFDRSAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MEI0NDsKKyAgICBjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwQkUyOworICAgIGNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDBCRDA7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVEVTVCAgICAgICAg
ICAgICAgICAgICA9IDB4MEI5MDsKKyAgICBjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAg
ICAgICAgICAgICAgID0gMHgwQjcxOworICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX1RFU1QgICAg
ICAgICAgICAgICAgICAgPSAweDBDMTE7CisgICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VU
X0ZJTEwgICAgICAgICAgICA9IDB4ODAzNzsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFX0FMUEhB
X1RPX0NPVkVSQUdFICAgICAgID0gMHg4MDlFOworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09W
RVJBR0UgICAgICAgICAgICAgICAgPSAweDgwQTA7CisKKyAgICAvKiBFcnJvckNvZGUgKi8KKyAg
ICBjb25zdCBHTGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICBj
b25zdCBHTGVudW0gSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAwOworICAg
IGNvbnN0IEdMZW51bSBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1MDE7Cisg
ICAgY29uc3QgR0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsK
KyAgICBjb25zdCBHTGVudW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgwNTA1
OworCisgICAgLyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisgICAgY29uc3QgR0xlbnVtIENXICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKKyAgICBjb25zdCBHTGVudW0gQ0NX
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwOTAxOworCisgICAgLyogR2V0UE5hbWUg
Ki8KKyAgICBjb25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgw
QjIxOworICAgIGNvbnN0IEdMZW51bSBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgPSAw
eDg0NkQ7CisgICAgY29uc3QgR0xlbnVtIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9
IDB4ODQ2RTsKKyAgICBjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAg
ID0gMHgwQjQ1OworICAgIGNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAgICAgICAgICAgICAg
ICAgPSAweDBCNDY7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX1JBTkdFICAgICAgICAgICAgICAg
ICAgICA9IDB4MEI3MDsKKyAgICBjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAg
ICAgICAgID0gMHgwQjcyOworICAgIGNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxVRSAgICAg
ICAgICAgICAgPSAweDBCNzM7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX0ZVTkMgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEI3NDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxV
RSAgICAgICAgICAgID0gMHgwQjkxOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZVTkMgICAg
ICAgICAgICAgICAgICAgPSAweDBCOTI7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRkFJTCAg
ICAgICAgICAgICAgICAgICA9IDB4MEI5NDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNT
X0RFUFRIX0ZBSUwgICAgICAgID0gMHgwQjk1OworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BB
U1NfREVQVEhfUEFTUyAgICAgICAgPSAweDBCOTY7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxf
UkVGICAgICAgICAgICAgICAgICAgICA9IDB4MEI5NzsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJ
TF9WQUxVRV9NQVNLICAgICAgICAgICAgID0gMHgwQjkzOworICAgIGNvbnN0IEdMZW51bSBTVEVO
Q0lMX1dSSVRFTUFTSyAgICAgICAgICAgICAgPSAweDBCOTg7CisgICAgY29uc3QgR0xlbnVtIFNU
RU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICA9IDB4ODgwMDsKKyAgICBjb25zdCBHTGVudW0g
U1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOworICAgIGNvbnN0IEdMZW51
bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7CisgICAgY29uc3QgR0xl
bnVtIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKKyAgICBjb25zdCBH
TGVudW0gU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOworICAgIGNvbnN0
IEdMZW51bSBTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7CisgICAgY29u
c3QgR0xlbnVtIFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA9IDB4OENBNTsKKyAgICBj
b25zdCBHTGVudW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOworICAg
IGNvbnN0IEdMZW51bSBTQ0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBDMTA7Cisg
ICAgLyogICAgICBTQ0lTU09SX1RFU1QgKi8KKyAgICBjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJf
VkFMVUUgICAgICAgICAgICAgID0gMHgwQzIyOworICAgIGNvbnN0IEdMZW51bSBDT0xPUl9XUklU
RU1BU0sgICAgICAgICAgICAgICAgPSAweDBDMjM7CisgICAgY29uc3QgR0xlbnVtIFVOUEFDS19B
TElHTk1FTlQgICAgICAgICAgICAgICA9IDB4MENGNTsKKyAgICBjb25zdCBHTGVudW0gUEFDS19B
TElHTk1FTlQgICAgICAgICAgICAgICAgID0gMHgwRDA1OworICAgIGNvbnN0IEdMZW51bSBNQVhf
VEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgPSAweDBEMzM7CisgICAgY29uc3QgR0xlbnVtIE1B
WF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAgICA9IDB4MEQzQTsKKyAgICBjb25zdCBHTGVudW0g
U1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOworICAgIGNvbnN0IEdMZW51
bSBSRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgPSAweDBENTI7CisgICAgY29uc3QgR0xl
bnVtIEdSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKKyAgICBjb25zdCBH
TGVudW0gQkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OworICAgIGNvbnN0
IEdMZW51bSBBTFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7CisgICAgY29u
c3QgR0xlbnVtIERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKKyAgICBj
b25zdCBHTGVudW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OworICAg
IGNvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJBMDA7Cisg
ICAgLyogICAgICBQT0xZR09OX09GRlNFVF9GSUxMICovCisgICAgY29uc3QgR0xlbnVtIFBPTFlH
T05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKKyAgICBjb25zdCBHTGVudW0gVEVY
VFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgID0gMHg4MDY5OworICAgIGNvbnN0IEdMZW51bSBT
QU1QTEVfQlVGRkVSUyAgICAgICAgICAgICAgICAgPSAweDgwQTg7CisgICAgY29uc3QgR0xlbnVt
IFNBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKKyAgICBjb25zdCBHTGVu
dW0gU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFBOworICAgIGNvbnN0IEdM
ZW51bSBTQU1QTEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7CisKKyAgICAvKiBH
ZXRUZXh0dXJlUGFyYW1ldGVyICovCisgICAgLyogICAgICBURVhUVVJFX01BR19GSUxURVIgKi8K
KyAgICAvKiAgICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqLworICAgIC8qICAgICAgVEVYVFVSRV9X
UkFQX1MgKi8KKyAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9UICovCisKKyAgICBjb25zdCBHTGVu
dW0gQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOworCisgICAgLyogSGlu
dE1vZGUgKi8KKyAgICBjb25zdCBHTGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxMTAwOworICAgIGNvbnN0IEdMZW51bSBGQVNURVNUICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDExMDE7CisgICAgY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTEwMjsKKworICAgIC8qIEhpbnRUYXJnZXQgKi8KKyAgICBjb25zdCBHTGVudW0g
R0VORVJBVEVfTUlQTUFQX0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKKworICAgIC8qIERhdGFU
eXBlICovCisgICAgY29uc3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MTQwMDsKKyAgICBjb25zdCBHTGVudW0gVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
ID0gMHgxNDAxOworICAgIGNvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDE0MDI7CisgICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAg
ICAgICA9IDB4MTQwMzsKKyAgICBjb25zdCBHTGVudW0gSU5UICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxNDA0OworICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAg
ICAgICAgICAgPSAweDE0MDU7CisgICAgY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MTQwNjsKKworICAgIC8qIFBpeGVsRm9ybWF0ICovCisgICAgY29uc3Qg
R0xlbnVtIERFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKKyAgICBjb25z
dCBHTGVudW0gQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA2OworICAgIGNv
bnN0IEdMZW51bSBSR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7CisgICAg
Y29uc3QgR0xlbnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKKyAg
ICBjb25zdCBHTGVudW0gTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA5Owor
ICAgIGNvbnN0IEdMZW51bSBMVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAweDE5MEE7
CisKKyAgICAvKiBQaXhlbFR5cGUgKi8KKyAgICAvKiAgICAgIFVOU0lHTkVEX0JZVEUgKi8KKyAg
ICBjb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOwor
ICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7
CisgICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9IDB4ODM2
MzsKKworICAgIC8qIFNoYWRlcnMgKi8KKyAgICBjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVS
ICAgICAgICAgICAgICAgICAgPSAweDhCMzA7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9TSEFE
RVIgICAgICAgICAgICAgICAgICAgID0gMHg4QjMxOworICAgIGNvbnN0IEdMZW51bSBNQVhfVkVS
VEVYX0FUVFJJQlMgICAgICAgICAgICAgICA9IDB4ODg2OTsKKyAgICBjb25zdCBHTGVudW0gTUFY
X1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7CisgICAgY29uc3QgR0xlbnVt
IE1BWF9WQVJZSU5HX1ZFQ1RPUlMgICAgICAgICAgICAgID0gMHg4REZDOworICAgIGNvbnN0IEdM
ZW51bSBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKKyAgICBjb25z
dCBHTGVudW0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7CisgICAg
Y29uc3QgR0xlbnVtIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgID0gMHg4ODcyOwor
ICAgIGNvbnN0IEdMZW51bSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9IDB4OERG
RDsKKyAgICBjb25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNEY7CisgICAgY29uc3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjgwOworICAgIGNvbnN0IEdMZW51bSBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAg
ICAgICA9IDB4OEI4MjsKKyAgICBjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAg
ICAgICAgICAgPSAweDhCODM7CisgICAgY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURFUlMgICAg
ICAgICAgICAgICAgID0gMHg4Qjg1OworICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVU5JRk9STVMg
ICAgICAgICAgICAgICAgICA9IDB4OEI4NjsKKyAgICBjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJ
QlVURVMgICAgICAgICAgICAgICAgPSAweDhCODk7CisgICAgY29uc3QgR0xlbnVtIFNIQURJTkdf
TEFOR1VBR0VfVkVSU0lPTiAgICAgICAgID0gMHg4QjhDOworICAgIGNvbnN0IEdMZW51bSBDVVJS
RU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICA9IDB4OEI4RDsKKworICAgIC8qIFN0ZW5jaWxG
dW5jdGlvbiAqLworICAgIGNvbnN0IEdMZW51bSBORVZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAyMDA7CisgICAgY29uc3QgR0xlbnVtIExFU1MgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDIwMTsKKyAgICBjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwMjAyOworICAgIGNvbnN0IEdMZW51bSBMRVFVQUwgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDAyMDM7CisgICAgY29uc3QgR0xlbnVtIEdSRUFURVIgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDIwNDsKKyAgICBjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwMjA1OworICAgIGNvbnN0IEdMZW51bSBHRVFVQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDAyMDY7CisgICAgY29uc3QgR0xlbnVtIEFMV0FZUyAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDIwNzsKKworICAgIC8qIFN0ZW5jaWxPcCAqLworICAgIC8q
ICAgICAgWkVSTyAqLworICAgIGNvbnN0IEdMZW51bSBLRUVQICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDFFMDA7CisgICAgY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MUUwMTsKKyAgICBjb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgxRTAyOworICAgIGNvbnN0IEdMZW51bSBERUNSICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDFFMDM7CisgICAgY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MTUwQTsKKyAgICBjb25zdCBHTGVudW0gSU5DUl9XUkFQICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NTA3OworICAgIGNvbnN0IEdMZW51bSBERUNSX1dSQVAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg1MDg7CisKKyAgICAvKiBTdHJpbmdOYW1lICovCisgICAg
Y29uc3QgR0xlbnVtIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMDsKKyAg
ICBjb25zdCBHTGVudW0gUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAxOwor
ICAgIGNvbnN0IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7
CisKKyAgICAvKiBUZXh0dXJlTWFnRmlsdGVyICovCisgICAgY29uc3QgR0xlbnVtIE5FQVJFU1Qg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjYwMDsKKyAgICBjb25zdCBHTGVudW0gTElORUFS
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNjAxOworCisgICAgLyogVGV4dHVyZU1pbkZp
bHRlciAqLworICAgIC8qICAgICAgTkVBUkVTVCAqLworICAgIC8qICAgICAgTElORUFSICovCisg
ICAgY29uc3QgR0xlbnVtIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsK
KyAgICBjb25zdCBHTGVudW0gTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0gMHgyNzAx
OworICAgIGNvbnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3
MDI7CisgICAgY29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICA9IDB4
MjcwMzsKKworICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCisgICAgY29uc3QgR0xlbnVt
IFRFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKKyAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9NSU5fRklMVEVSICAgICAgICAgICAgID0gMHgyODAxOworICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7CisgICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKKworICAgIC8q
IFRleHR1cmVUYXJnZXQgKi8KKyAgICAvKiAgICAgIFRFWFRVUkVfMkQgKi8KKyAgICBjb25zdCBH
TGVudW0gVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOworCisgICAgY29u
c3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKKyAgICBj
b25zdCBHTGVudW0gVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0OworICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7Cisg
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsK
KyAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3
OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1
MTg7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA9IDB4
ODUxOTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0g
MHg4NTFBOworICAgIGNvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAg
PSAweDg1MUM7CisKKyAgICAvKiBUZXh0dXJlVW5pdCAqLworICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFMCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzA7CisgICAgY29uc3QgR0xlbnVtIFRF
WFRVUkUxICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKKyAgICBjb25zdCBHTGVudW0g
VEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMyOworICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzM7CisgICAgY29uc3QgR0xl
bnVtIFRFWFRVUkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKKyAgICBjb25zdCBH
TGVudW0gVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OworICAgIGNvbnN0
IEdMZW51bSBURVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzY7CisgICAgY29u
c3QgR0xlbnVtIFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKKyAgICBj
b25zdCBHTGVudW0gVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4OworICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzk7Cisg
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsK
KyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENC
OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
Q0M7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODRDRDsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NENFOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0Q0Y7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODREMDsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NEQxOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTggICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0RDI7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAg
ICAgICAgICA9IDB4ODREMzsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NEQ0OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjEgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0RDU7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODRENjsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIzICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NEQ3OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjQgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0RDg7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODREOTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI2
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERBOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
MjcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REI7CisgICAgY29uc3QgR0xlbnVtIFRFWFRV
UkUyOCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREQzsKKyAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTI5ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEREOworICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REU7CisgICAgY29uc3QgR0xlbnVt
IFRFWFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKKyAgICBjb25zdCBHTGVu
dW0gQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOworCisgICAgLyogVGV4
dHVyZVdyYXBNb2RlICovCisgICAgY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MjkwMTsKKyAgICBjb25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAgICAgICAg
ICAgICAgICAgID0gMHg4MTJGOworICAgIGNvbnN0IEdMZW51bSBNSVJST1JFRF9SRVBFQVQgICAg
ICAgICAgICAgICAgPSAweDgzNzA7CisKKyAgICAvKiBVbmlmb3JtIFR5cGVzICovCisgICAgY29u
c3QgR0xlbnVtIEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MDsKKyAgICBj
b25zdCBHTGVudW0gRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOworICAg
IGNvbnN0IEdMZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7Cisg
ICAgY29uc3QgR0xlbnVtIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MzsK
KyAgICBjb25zdCBHTGVudW0gSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU0
OworICAgIGNvbnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhC
NTU7CisgICAgY29uc3QgR0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI1NjsKKyAgICBjb25zdCBHTGVudW0gQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgID0g
MHg4QjU3OworICAgIGNvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAg
PSAweDhCNTg7CisgICAgY29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEI1OTsKKyAgICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAg
ICAgID0gMHg4QjVBOworICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAg
ICAgICAgPSAweDhCNUI7CisgICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDQgICAgICAgICAgICAg
ICAgICAgICA9IDB4OEI1QzsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFUl8yRCAgICAgICAgICAg
ICAgICAgICAgID0gMHg4QjVFOworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAg
ICAgICAgICAgICAgPSAweDhCNjA7CisKKyAgICAvKiBWZXJ0ZXggQXJyYXlzICovCisgICAgY29u
c3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7Cisg
ICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2
MjM7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAg
PSAweDg2MjQ7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAg
ICAgICAgPSAweDg2MjU7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9S
TUFMSVpFRCAgICAgPSAweDg4NkE7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJS
QVlfUE9JTlRFUiAgICAgICAgPSAweDg2NDU7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRS
SUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgPSAweDg4OUY7CisKKyAgICAvKiBTaGFkZXIgU291cmNl
ICovCisgICAgY29uc3QgR0xlbnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4
OEI4MTsKKworICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCisgICAg
Y29uc3QgR0xlbnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKKyAg
ICBjb25zdCBHTGVudW0gTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4REYxOwor
ICAgIGNvbnN0IEdMZW51bSBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgPSAweDhERjI7
CisgICAgY29uc3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERG
MzsKKyAgICBjb25zdCBHTGVudW0gTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgID0gMHg4
REY0OworICAgIGNvbnN0IEdMZW51bSBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDhERjU7CisKKyAgICAvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCisgICAgY29uc3QgR0xlbnVt
IEZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKKyAgICBjb25zdCBHTGVu
dW0gUkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4RDQxOworCisgICAgY29uc3Qg
R0xlbnVtIFJHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKKyAgICBjb25z
dCBHTGVudW0gUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OworICAgIGNv
bnN0IEdMZW51bSBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhENjI7CisgICAg
Y29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKKyAg
ICBjb25zdCBHTGVudW0gU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOwor
ICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgPSAweDhENDg7
CisgICAgY29uc3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRG
OTsKKworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgPSAw
eDhENDI7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAgICAgICA9
IDB4OEQ0MzsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAg
ID0gMHg4RDQ0OworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAg
ICAgPSAweDhENTA7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFICAg
ICAgICA9IDB4OEQ1MTsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVfU0laRSAg
ICAgICAgID0gMHg4RDUyOworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQUxQSEFfU0la
RSAgICAgICAgPSAweDhENTM7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9ERVBUSF9T
SVpFICAgICAgICA9IDB4OEQ1NDsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1NURU5D
SUxfU0laRSAgICAgID0gMHg4RDU1OworCisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgID0gMHg4Q0QwOworICAgIGNvbnN0IEdMZW51
bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA9IDB4OENEMTsK
KyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAg
ICAgICAgPSAweDhDRDI7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
VEVYVFVSRV9DVUJFX01BUF9GQUNFID0gMHg4Q0QzOworCisgICAgY29uc3QgR0xlbnVtIENPTE9S
X0FUVEFDSE1FTlQwICAgICAgICAgICAgICA9IDB4OENFMDsKKyAgICBjb25zdCBHTGVudW0gREVQ
VEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4RDAwOworICAgIGNvbnN0IEdMZW51bSBT
VEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgPSAweDhEMjA7CisgICAgY29uc3QgR0xlbnVt
IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA9IDB4ODIxQTsKKworICAgIGNvbnN0IEdM
ZW51bSBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworCisgICAgY29uc3QgR0xl
bnVtIEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4Q0Q1Owor
ICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAg
ICA9IDB4OENENjsKKyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNT
SU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgID0gMHg4Q0Q5OworICAgIGNvbnN0IEdMZW51bSBG
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA9IDB4OENERDsKKworICAg
IGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Cisg
ICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4OENBNzsK
KyAgICBjb25zdCBHTGVudW0gTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgID0gMHg4NEU4
OworCisgICAgY29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4
MDUwNjsKKworICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovCisgICAgY29uc3QgR0xlbnVt
IFVOUEFDS19GTElQX1lfV0VCR0wgICAgICAgICAgICAgICAgPSAweDkyNDA7CisgICAgY29uc3Qg
R0xlbnVtIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7CisgICAg
Y29uc3QgR0xlbnVtIENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICAgICAgPSAweDkyNDI7
CisgICAgY29uc3QgR0xlbnVtIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wgPSAw
eDkyNDM7CisgICAgY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICAg
ICAgPSAweDkyNDQ7CisKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3aW5nQnVm
ZmVyV2lkdGg7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1ZmZlckhl
aWdodDsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAg
ICAgICAgIGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGF0dGFjaFNoYWRlcihXZWJHTFBy
b2dyYW0gcHJvZ3JhbSwgV2ViR0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRpb24oV2Vi
R0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCwgRE9NU3RyaW5nIG5hbWUpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRCdWZm
ZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kRnJhbWVidWZmZXIoR0xl
bnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CisgICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFJlbmRlcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0
dXJlKEdMZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBm
IGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xl
bnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBibGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jU2VwYXJhdGUo
R0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0
QWxwaGEpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAg
ICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdMZW51
bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEs
IEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUs
IEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZz
ZXQsIEFycmF5QnVmZmVyPyBkYXRhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50
cHRyIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhKTsKKworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIEdMZW51bSAgICAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51bSB0YXJnZXQp
OworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZpZWxk
IG1hc2spOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhckNvbG9y
KEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFs
cGhhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJEZXB0aChH
TGNsYW1wZiBkZXB0aCk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNs
ZWFyU3RlbmNpbChHTGludCBzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgY29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJs
dWUsIEdMYm9vbGVhbiBhbHBoYSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOwor
CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEFycmF5QnVmZmVy
VmlldyBkYXRhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29tcHJl
c3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7CisgICAgCisgICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBjb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gV2ViR0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7CisgICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gV2ViR0xGcmFtZWJ1ZmZlciBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIFdlYkdMUHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gV2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRlciBjcmVhdGVTaGFk
ZXIoR0xlbnVtIHR5cGUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMVGV4dHVyZSBj
cmVhdGVUZXh0dXJlKCk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
Y3VsbEZhY2UoR0xlbnVtIG1vZGUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVy
IGZyYW1lYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVs
ZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CisgICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciByZW5k
ZXJidWZmZXIpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVT
aGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CisKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhGdW5jKEdMZW51bSBmdW5jKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhNYXNrKEdMYm9vbGVhbiBm
bGFnKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhSYW5nZShH
TGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBkaXNhYmxlKEdMZW51bSBjYXApOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShH
THVpbnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVp
IGNvdW50KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0
eXBlLCBHTGludHB0ciBvZmZzZXQpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGVuYWJsZShHTGVudW0gY2FwKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQg
aW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBmaW5pc2goKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJl
bmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKKyAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1
ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlIHRleHR1cmUsIEdMaW50IGxldmVsKTsKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsKKyAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRh
cmdldCk7CisgICAgCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBX
ZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVp
bnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2Vi
R0xBY3RpdmVJbmZvIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWlu
dCBpbmRleCk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtIHByb2dyYW0pOworCisg
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7CisKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b21dIGFueSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIHBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQ29udGV4dEF0dHJp
YnV0ZXMgZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IEdMZW51bSBnZXRFcnJvcigpOworCisgICAgLy8gb2JqZWN0IGdldEV4dGVuc2lvbihET01TdHJp
bmcgbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0RXh0ZW5z
aW9uKERPTVN0cmluZyBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwg
UmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UGFyYW1ldGVy
KEdMZW51bSBwbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNF
eGNlcHRpb25dIGFueSBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBH
TGVudW0gcG5hbWUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxs
U3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9M
b2coV2ViR0xQcm9ncmFtIHByb2dyYW0pOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIgc2hhZGVy
LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5l
ZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFk
ZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0IGdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUpOwor
CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxs
LCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFk
ZXIgc2hhZGVyKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2VxdWVuY2U8
RE9NU3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFRleFBhcmFtZXRlcihHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSBwcm9ncmFt
LCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbik7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZvcm1Mb2Nh
dGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOworCisgICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRWZXJ0ZXhBdHRy
aWIoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gR0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0x1aW50IGluZGV4LCBHTGVudW0g
cG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9v
bGVhbiAgICBpc0J1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIEdMYm9vbGVhbiAgICBpc0NvbnRleHRMb3N0KCk7CisgICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gR0xib29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZy
YW1lYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNQcm9n
cmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJv
b2xlYW4gICAgaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNTaGFkZXIoV2ViR0xTaGFk
ZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNUZXh0
dXJlKFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgbGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcGl4ZWxT
dG9yZWkoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CisgICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5p
dHMpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyBwaXhl
bHMpOworICAgIAorICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
cmVuZGVyYnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgc2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBp
bnZlcnQpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lzc29yKEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBzaGFkZXJTb3Vy
Y2UoV2ViR0xTaGFkZXIgc2hhZGVyLCBET01TdHJpbmcgc3RyaW5nKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmMoR0xlbnVtIGZ1bmMsIEdMaW50IHJl
ZiwgR0x1aW50IG1hc2spOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBz
dGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBH
THVpbnQgbWFzayk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5j
aWxNYXNrKEdMdWludCBtYXNrKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgc3RlbmNpbE1hc2tTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdM
ZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgc3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVu
dW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgdGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxv
YXQgcGFyYW0pOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJh
bWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworCisgICAg
Ly8gU3VwcG9ydGVkIGZvcm1zOgorICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJv
cmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxz
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMpOworI2lmIGRlZmluZWQoRU5BQkxF
X1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRl
b0VsZW1lbnQ/IHZpZGVvKTsKKyNlbmRpZgorCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBp
eGVscyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VEYXRhPyBw
aXhlbHMpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAg
ICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVs
ZW1lbnQ/IGltYWdlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1M
Q2FudmFzRWxlbWVudD8gY2FudmFzKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5B
QkxFX1ZJREVPCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTFZpZGVv
RWxlbWVudD8gdmlkZW8pOworI2VuZGlmCisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9u
LCBHTGZsb2F0IHgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZs
b2F0MzJBcnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgdW5pZm9ybTFpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4KTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1
bmlmb3JtMWl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmYo
V2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtMmZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaShX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7CisgICAgW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJp
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmKFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1
bmlmb3JtM2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7
CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0z
aShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQg
eik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgdW5pZm9ybTNpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9y
bTRmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwg
R0xmbG9hdCB6LCBHTGZsb2F0IHcpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9j
YXRpb24sIEZsb2F0MzJBcnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBH
TGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGl2KFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOworCisgICAgW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5IGFycmF5KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9u
LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXg0
ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZs
b2F0MzJBcnJheSBhcnJheSk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2YWxp
ZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworCisgICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjFmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgp
OworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYo
R0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBH
TGZsb2F0IHkpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhB
dHRyaWIyZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5keCwgR0xm
bG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywg
Q3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFycmF5IHZh
bHVlcyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJp
YjRmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0
IHcpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYlBvaW50ZXIo
R0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXpl
ZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBzdHJpZGUsIEdMaW50cHRyIG9mZnNldCk7CisKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCSh3b3JraW5nIGNv
cHkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMsNjQ3ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi10
eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMZW51bTsKLXR5cGVkZWYgYm9vbGVhbiAgICAgICAgR0xi
b29sZWFuOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGJpdGZpZWxkOwotdHlwZWRlZiBieXRl
ICAgICAgICAgICBHTGJ5dGU7ICAgICAgICAgLyogJ2J5dGUnIHNob3VsZCBiZSBhIHNpZ25lZCA4
IGJpdCB0eXBlLiAqLwotdHlwZWRlZiBzaG9ydCAgICAgICAgICBHTHNob3J0OwotdHlwZWRlZiBs
b25nICAgICAgICAgICBHTGludDsKLXR5cGVkZWYgbG9uZyAgICAgICAgICAgR0xzaXplaTsKLXR5
cGVkZWYgbG9uZyBsb25nICAgICAgR0xpbnRwdHI7Ci10eXBlZGVmIGxvbmcgbG9uZyAgICAgIEdM
c2l6ZWlwdHI7Ci10eXBlZGVmIG9jdGV0ICAgICAgICAgIEdMdWJ5dGU7ICAgICAgICAvKiAnb2N0
ZXQnIHNob3VsZCBiZSBhbiB1bnNpZ25lZCA4IGJpdCB0eXBlLiAqLwotdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBHTHVzaG9ydDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0x1aW50OwotdHlwZWRl
ZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xmbG9hdDsKLXR5cGVkZWYgdW5yZXN0cmljdGVkIGZsb2F0
IEdMY2xhbXBmOwotCiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCR0wsCiAgICAgSlNDdXN0b21NYXJr
RnVuY3Rpb24sCiAgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLV0gaW50ZXJmYWNlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewotCi0gICAgLyogQ2xlYXJC
dWZmZXJNYXNrICovCi0gICAgY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAgICAgICAg
ICAgICA9IDB4MDAwMDAxMDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQlVGRkVSX0JJVCAg
ICAgICAgICAgICA9IDB4MDAwMDA0MDA7Ci0gICAgY29uc3QgR0xlbnVtIENPTE9SX0JVRkZFUl9C
SVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7Ci0KLSAgICAvKiBCZWdpbk1vZGUgKi8KLSAg
ICBjb25zdCBHTGVudW0gUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwOwot
ICAgIGNvbnN0IEdMZW51bSBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDE7
Ci0gICAgY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAw
MjsKLSAgICBjb25zdCBHTGVudW0gTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAgID0gMHgw
MDAzOwotICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDQ7Ci0gICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICA9
IDB4MDAwNTsKLSAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAg
ID0gMHgwMDA2OwotCi0gICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBpbiBFUzIw
KSAqLwotICAgIC8qICAgICAgTkVWRVIgKi8KLSAgICAvKiAgICAgIExFU1MgKi8KLSAgICAvKiAg
ICAgIEVRVUFMICovCi0gICAgLyogICAgICBMRVFVQUwgKi8KLSAgICAvKiAgICAgIEdSRUFURVIg
Ki8KLSAgICAvKiAgICAgIE5PVEVRVUFMICovCi0gICAgLyogICAgICBHRVFVQUwgKi8KLSAgICAv
KiAgICAgIEFMV0FZUyAqLwotCi0gICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovCi0gICAgY29u
c3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Ci0gICAgY29uc3Qg
R0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7Ci0gICAgY29uc3QgR0xl
bnVtIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMDsKLSAgICBjb25zdCBH
TGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOwotICAgIGNvbnN0
IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDI7Ci0gICAgY29u
c3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA9IDB4MDMwMzsKLSAgICBj
b25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0OwotICAg
IGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAgICAgPSAweDAzMDU7Ci0K
LSAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLwotICAgIC8qICAgICAgWkVSTyAqLwotICAgIC8q
ICAgICAgT05FICovCi0gICAgY29uc3QgR0xlbnVtIERTVF9DT0xPUiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDMwNjsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xPUiAgICAg
ICAgICAgID0gMHgwMzA3OwotICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQSEFfU0FUVVJBVEUgICAg
ICAgICAgICAgPSAweDAzMDg7Ci0gICAgLyogICAgICBTUkNfQUxQSEEgKi8KLSAgICAvKiAgICAg
IE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KLSAgICAvKiAgICAgIERTVF9BTFBIQSAqLwotICAgIC8q
ICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLwotCi0gICAgLyogQmxlbmRFcXVhdGlvblNlcGFy
YXRlICovCi0gICAgY29uc3QgR0xlbnVtIEZVTkNfQUREICAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODAwNjsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAg
ID0gMHg4MDA5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAg
ICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLwotICAgIGNvbnN0IEdM
ZW51bSBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgPSAweDg4M0Q7Ci0KLSAgICAvKiBC
bGVuZFN1YnRyYWN0ICovCi0gICAgY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAgICAgICAg
ICAgICAgICA9IDB4ODAwQTsKLSAgICBjb25zdCBHTGVudW0gRlVOQ19SRVZFUlNFX1NVQlRSQUNU
ICAgICAgICAgID0gMHg4MDBCOwotCi0gICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rpb25zICov
Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9IDB4ODBD
ODsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAgID0gMHg4
MEM5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgPSAw
eDgwQ0E7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAgICAgICA9
IDB4ODBDQjsKLSAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQ09MT1IgICAgICAgICAgICAgICAg
ID0gMHg4MDAxOwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgICAg
ICAgPSAweDgwMDI7Ci0gICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAgICAgICAg
ICAgICA9IDB4ODAwMzsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5UX0FMUEhB
ICAgICAgID0gMHg4MDA0OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9DT0xPUiAgICAgICAgICAg
ICAgICAgICAgPSAweDgwMDU7Ci0KLSAgICAvKiBCdWZmZXIgT2JqZWN0cyAqLwotICAgIGNvbnN0
IEdMZW51bSBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgPSAweDg4OTI7Ci0gICAgY29u
c3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA9IDB4ODg5MzsKLSAgICBj
b25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0OwotICAg
IGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgPSAweDg4OTU7Ci0K
LSAgICBjb25zdCBHTGVudW0gU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgID0gMHg4OEUw
OwotICAgIGNvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgPSAweDg4
RTQ7Ci0gICAgY29uc3QgR0xlbnVtIERZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAgICA9IDB4
ODhFODsKLQotICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAg
PSAweDg3NjQ7Ci0gICAgY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAg
ICA9IDB4ODc2NTsKLQotICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1ZFUlRFWF9BVFRSSUIgICAg
ICAgICAgPSAweDg2MjY7Ci0KLSAgICAvKiBDdWxsRmFjZU1vZGUgKi8KLSAgICBjb25zdCBHTGVu
dW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OwotICAgIGNvbnN0IEdM
ZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0MDU7Ci0gICAgY29uc3Qg
R0xlbnVtIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA9IDB4MDQwODsKLQotICAgIC8q
IERlcHRoRnVuY3Rpb24gKi8KLSAgICAvKiAgICAgIE5FVkVSICovCi0gICAgLyogICAgICBMRVNT
ICovCi0gICAgLyogICAgICBFUVVBTCAqLwotICAgIC8qICAgICAgTEVRVUFMICovCi0gICAgLyog
ICAgICBHUkVBVEVSICovCi0gICAgLyogICAgICBOT1RFUVVBTCAqLwotICAgIC8qICAgICAgR0VR
VUFMICovCi0gICAgLyogICAgICBBTFdBWVMgKi8KLQotICAgIC8qIEVuYWJsZUNhcCAqLwotICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgPSAweDBERTE7Ci0g
ICAgY29uc3QgR0xlbnVtIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA9IDB4MEI0NDsK
LSAgICBjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkUy
OwotICAgIGNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDBC
RDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAgICA9IDB4
MEI5MDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgID0g
MHgwQjcxOwotICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX1RFU1QgICAgICAgICAgICAgICAgICAg
PSAweDBDMTE7Ci0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAgICAg
ICA9IDB4ODAzNzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAg
ICAgID0gMHg4MDlFOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0UgICAgICAgICAg
ICAgICAgPSAweDgwQTA7Ci0KLSAgICAvKiBFcnJvckNvZGUgKi8KLSAgICBjb25zdCBHTGVudW0g
Tk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLSAgICBjb25zdCBHTGVudW0gSU5W
QUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAwOwotICAgIGNvbnN0IEdMZW51bSBJ
TlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1MDE7Ci0gICAgY29uc3QgR0xlbnVt
IElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsKLSAgICBjb25zdCBHTGVu
dW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgwNTA1OwotCi0gICAgLyogRnJv
bnRGYWNlRGlyZWN0aW9uICovCi0gICAgY29uc3QgR0xlbnVtIENXICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDkwMDsKLSAgICBjb25zdCBHTGVudW0gQ0NXICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwOTAxOwotCi0gICAgLyogR2V0UE5hbWUgKi8KLSAgICBjb25zdCBH
TGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOwotICAgIGNvbnN0
IEdMZW51bSBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgPSAweDg0NkQ7Ci0gICAgY29u
c3QgR0xlbnVtIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9IDB4ODQ2RTsKLSAgICBj
b25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1OwotICAg
IGNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAgICAgICAgICAgICAgICAgPSAweDBCNDY7Ci0g
ICAgY29uc3QgR0xlbnVtIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA9IDB4MEI3MDsK
LSAgICBjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0gMHgwQjcy
OwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxVRSAgICAgICAgICAgICAgPSAweDBC
NzM7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAgICA9IDB4
MEI3NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgID0g
MHgwQjkxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZVTkMgICAgICAgICAgICAgICAgICAg
PSAweDBCOTI7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRkFJTCAgICAgICAgICAgICAgICAg
ICA9IDB4MEI5NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAg
ICAgID0gMHgwQjk1OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyAg
ICAgICAgPSAweDBCOTY7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUkVGICAgICAgICAgICAg
ICAgICAgICA9IDB4MEI5NzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9NQVNLICAg
ICAgICAgICAgID0gMHgwQjkzOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1dSSVRFTUFTSyAg
ICAgICAgICAgICAgPSAweDBCOTg7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19GVU5D
ICAgICAgICAgICAgICA9IDB4ODgwMDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZB
SUwgICAgICAgICAgICAgID0gMHg4ODAxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tf
UEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFD
S19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9C
QUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfQkFDS19XUklURU1BU0sgICAgICAgICA9IDB4OENBNTsKLSAgICBjb25zdCBHTGVudW0gVklF
V1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOwotICAgIGNvbnN0IEdMZW51bSBT
Q0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBDMTA7Ci0gICAgLyogICAgICBTQ0lT
U09SX1RFU1QgKi8KLSAgICBjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAg
ICAgID0gMHgwQzIyOwotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9XUklURU1BU0sgICAgICAgICAg
ICAgICAgPSAweDBDMjM7Ci0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19BTElHTk1FTlQgICAgICAg
ICAgICAgICA9IDB4MENGNTsKLSAgICBjb25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQgICAgICAg
ICAgICAgICAgID0gMHgwRDA1OwotICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9TSVpFICAg
ICAgICAgICAgICAgPSAweDBEMzM7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WSUVXUE9SVF9ESU1T
ICAgICAgICAgICAgICA9IDB4MEQzQTsKLSAgICBjb25zdCBHTGVudW0gU1VCUElYRUxfQklUUyAg
ICAgICAgICAgICAgICAgID0gMHgwRDUwOwotICAgIGNvbnN0IEdMZW51bSBSRURfQklUUyAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDBENTI7Ci0gICAgY29uc3QgR0xlbnVtIEdSRUVOX0JJVFMg
ICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKLSAgICBjb25zdCBHTGVudW0gQkxVRV9CSVRT
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OwotICAgIGNvbnN0IEdMZW51bSBBTFBIQV9C
SVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRI
X0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKLSAgICBjb25zdCBHTGVudW0gU1RF
TkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OwotICAgIGNvbnN0IEdMZW51bSBQ
T0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJBMDA7Ci0gICAgLyogICAgICBQT0xZ
R09OX09GRlNFVF9GSUxMICovCi0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZBQ1RP
UiAgICAgICAgICA9IDB4ODAzODsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9CSU5ESU5HXzJE
ICAgICAgICAgICAgID0gMHg4MDY5OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQlVGRkVSUyAg
ICAgICAgICAgICAgICAgPSAweDgwQTg7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRVMgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0NPVkVS
QUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFBOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09W
RVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7Ci0KLSAgICAvKiBHZXRUZXh0dXJlUGFyYW1l
dGVyICovCi0gICAgLyogICAgICBURVhUVVJFX01BR19GSUxURVIgKi8KLSAgICAvKiAgICAgIFRF
WFRVUkVfTUlOX0ZJTFRFUiAqLwotICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8KLSAgICAv
KiAgICAgIFRFWFRVUkVfV1JBUF9UICovCi0KLSAgICBjb25zdCBHTGVudW0gQ09NUFJFU1NFRF9U
RVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOwotCi0gICAgLyogSGludE1vZGUgKi8KLSAgICBj
b25zdCBHTGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAwOwotICAg
IGNvbnN0IEdMZW51bSBGQVNURVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDE7Ci0g
ICAgY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMjsK
LQotICAgIC8qIEhpbnRUYXJnZXQgKi8KLSAgICBjb25zdCBHTGVudW0gR0VORVJBVEVfTUlQTUFQ
X0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKLQotICAgIC8qIERhdGFUeXBlICovCi0gICAgY29u
c3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMDsKLSAgICBj
b25zdCBHTGVudW0gVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgID0gMHgxNDAxOwotICAg
IGNvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDI7Ci0g
ICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA9IDB4MTQwMzsK
LSAgICBjb25zdCBHTGVudW0gSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA0
OwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgPSAweDE0
MDU7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MTQwNjsKLQotICAgIC8qIFBpeGVsRm9ybWF0ICovCi0gICAgY29uc3QgR0xlbnVtIERFUFRIX0NP
TVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKLSAgICBjb25zdCBHTGVudW0gQUxQSEEg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA2OwotICAgIGNvbnN0IEdMZW51bSBSR0Ig
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7Ci0gICAgY29uc3QgR0xlbnVtIFJH
QkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKLSAgICBjb25zdCBHTGVudW0g
TFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA5OwotICAgIGNvbnN0IEdMZW51
bSBMVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAweDE5MEE7Ci0KLSAgICAvKiBQaXhl
bFR5cGUgKi8KLSAgICAvKiAgICAgIFVOU0lHTkVEX0JZVEUgKi8KLSAgICBjb25zdCBHTGVudW0g
VU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOwotICAgIGNvbnN0IEdMZW51
bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7Ci0gICAgY29uc3QgR0xl
bnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9IDB4ODM2MzsKLQotICAgIC8qIFNo
YWRlcnMgKi8KLSAgICBjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAg
ICAgPSAweDhCMzA7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9TSEFERVIgICAgICAgICAgICAg
ICAgICAgID0gMHg4QjMxOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX0FUVFJJQlMgICAg
ICAgICAgICAgICA9IDB4ODg2OTsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9VTklGT1JN
X1ZFQ1RPUlMgICAgICAgPSAweDhERkI7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WQVJZSU5HX1ZF
Q1RPUlMgICAgICAgICAgICAgID0gMHg4REZDOwotICAgIGNvbnN0IEdMZW51bSBNQVhfQ09NQklO
RURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7Ci0gICAgY29uc3QgR0xlbnVtIE1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgID0gMHg4ODcyOwotICAgIGNvbnN0IEdMZW51
bSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9IDB4OERGRDsKLSAgICBjb25zdCBH
TGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7Ci0gICAgY29u
c3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgID0gMHg4QjgwOwotICAg
IGNvbnN0IEdMZW51bSBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI4MjsK
LSAgICBjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgPSAweDhC
ODM7Ci0gICAgY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAgICAgID0g
MHg4Qjg1OwotICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAg
ICA9IDB4OEI4NjsKLSAgICBjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAg
ICAgICAgPSAweDhCODk7Ci0gICAgY29uc3QgR0xlbnVtIFNIQURJTkdfTEFOR1VBR0VfVkVSU0lP
TiAgICAgICAgID0gMHg4QjhDOwotICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1BST0dSQU0gICAg
ICAgICAgICAgICAgICA9IDB4OEI4RDsKLQotICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAqLwotICAg
IGNvbnN0IEdMZW51bSBORVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDA7Ci0g
ICAgY29uc3QgR0xlbnVtIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMTsK
LSAgICBjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAy
OwotICAgIGNvbnN0IEdMZW51bSBMRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAy
MDM7Ci0gICAgY29uc3QgR0xlbnVtIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDIwNDsKLSAgICBjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMjA1OwotICAgIGNvbnN0IEdMZW51bSBHRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDAyMDY7Ci0gICAgY29uc3QgR0xlbnVtIEFMV0FZUyAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwNzsKLQotICAgIC8qIFN0ZW5jaWxPcCAqLwotICAgIC8qICAgICAgWkVSTyAqLwot
ICAgIGNvbnN0IEdMZW51bSBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDA7
Ci0gICAgY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUw
MTsKLSAgICBjb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgx
RTAyOwotICAgIGNvbnN0IEdMZW51bSBERUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDFFMDM7Ci0gICAgY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MTUwQTsKLSAgICBjb25zdCBHTGVudW0gSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NTA3OwotICAgIGNvbnN0IEdMZW51bSBERUNSX1dSQVAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg1MDg7Ci0KLSAgICAvKiBTdHJpbmdOYW1lICovCi0gICAgY29uc3QgR0xlbnVtIFZF
TkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMDsKLSAgICBjb25zdCBHTGVudW0g
UkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAxOwotICAgIGNvbnN0IEdMZW51
bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7Ci0KLSAgICAvKiBUZXh0
dXJlTWFnRmlsdGVyICovCi0gICAgY29uc3QgR0xlbnVtIE5FQVJFU1QgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MjYwMDsKLSAgICBjb25zdCBHTGVudW0gTElORUFSICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgyNjAxOwotCi0gICAgLyogVGV4dHVyZU1pbkZpbHRlciAqLwotICAgIC8q
ICAgICAgTkVBUkVTVCAqLwotICAgIC8qICAgICAgTElORUFSICovCi0gICAgY29uc3QgR0xlbnVt
IE5FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsKLSAgICBjb25zdCBHTGVu
dW0gTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0gMHgyNzAxOwotICAgIGNvbnN0IEdM
ZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7Ci0gICAgY29uc3Qg
R0xlbnVtIExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICA9IDB4MjcwMzsKLQotICAgIC8q
IFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCi0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfTUFHX0ZJ
TFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9NSU5f
RklMVEVSICAgICAgICAgICAgID0gMHgyODAxOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX1dS
QVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
V1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKLQotICAgIC8qIFRleHR1cmVUYXJnZXQg
Ki8KLSAgICAvKiAgICAgIFRFWFRVUkVfMkQgKi8KLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRSAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOwotCi0gICAgY29uc3QgR0xlbnVtIFRFWFRV
UkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKLSAgICBjb25zdCBHTGVudW0gVEVY
VFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0OwotICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7Ci0gICAgY29uc3QgR0xlbnVt
IFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3OwotICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7Ci0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA9IDB4ODUxOTsKLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0gMHg4NTFBOwotICAgIGNv
bnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7Ci0KLSAg
ICAvKiBUZXh0dXJlVW5pdCAqLwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMCAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0QzA7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODRDMTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NEMyOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMyAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0QzM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU0ICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTUg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
NiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzY7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRV
UkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKLSAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4OwotICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzk7Ci0gICAgY29uc3QgR0xlbnVt
IFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENCOwotICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0M7Ci0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRDsKLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENFOwotICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Y7Ci0gICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMDsKLSAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQxOwot
ICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDI7
Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
MzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEQ0OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODRENjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEQ3OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjQgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0RDg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODREOTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI2ICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NERBOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjcgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0REI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyOCAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODREQzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI5ICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEREOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMzAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0REU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUzMSAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODRERjsKLSAgICBjb25zdCBHTGVudW0gQUNUSVZFX1RFWFRV
UkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOwotCi0gICAgLyogVGV4dHVyZVdyYXBNb2RlICov
Ci0gICAgY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4Mjkw
MTsKLSAgICBjb25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAgID0gMHg4
MTJGOwotICAgIGNvbnN0IEdMZW51bSBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAgICAgPSAw
eDgzNzA7Ci0KLSAgICAvKiBVbmlmb3JtIFR5cGVzICovCi0gICAgY29uc3QgR0xlbnVtIEZMT0FU
X1ZFQzIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MDsKLSAgICBjb25zdCBHTGVudW0gRkxP
QVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOwotICAgIGNvbnN0IEdMZW51bSBG
TE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7Ci0gICAgY29uc3QgR0xlbnVt
IElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MzsKLSAgICBjb25zdCBHTGVu
dW0gSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU0OwotICAgIGNvbnN0IEdM
ZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7Ci0gICAgY29uc3Qg
R0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NjsKLSAgICBjb25z
dCBHTGVudW0gQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU3OwotICAgIGNv
bnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTg7Ci0gICAg
Y29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1OTsKLSAg
ICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVBOwot
ICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUI7
Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
QzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjVFOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgPSAw
eDhCNjA7Ci0KLSAgICAvKiBWZXJ0ZXggQXJyYXlzICovCi0gICAgY29uc3QgR0xlbnVtIFZFUlRF
WF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7Ci0gICAgY29uc3QgR0xlbnVt
IFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2MjM7Ci0gICAgY29uc3Qg
R0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgPSAweDg2MjQ7Ci0gICAg
Y29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgPSAweDg2MjU7
Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCAgICAgPSAw
eDg4NkE7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiAgICAg
ICAgPSAweDg2NDU7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVS
X0JJTkRJTkcgPSAweDg4OUY7Ci0KLSAgICAvKiBTaGFkZXIgU291cmNlICovCi0gICAgY29uc3Qg
R0xlbnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4OEI4MTsKLQotICAgIC8q
IFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCi0gICAgY29uc3QgR0xlbnVtIExP
V19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKLSAgICBjb25zdCBHTGVudW0g
TUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4REYxOwotICAgIGNvbnN0IEdMZW51
bSBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgPSAweDhERjI7Ci0gICAgY29uc3QgR0xl
bnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKLSAgICBjb25zdCBH
TGVudW0gTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REY0OwotICAgIGNvbnN0
IEdMZW51bSBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjU7Ci0KLSAgICAv
KiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSICAg
ICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVS
ICAgICAgICAgICAgICAgICAgID0gMHg4RDQxOwotCi0gICAgY29uc3QgR0xlbnVtIFJHQkE0ICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKLSAgICBjb25zdCBHTGVudW0gUkdCNV9B
MSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OwotICAgIGNvbnN0IEdMZW51bSBSR0I1
NjUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhENjI7Ci0gICAgY29uc3QgR0xlbnVtIERF
UFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKLSAgICBjb25zdCBHTGVudW0g
U1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOwotICAgIGNvbnN0IEdMZW51
bSBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgPSAweDhENDg7Ci0gICAgY29uc3QgR0xl
bnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKLQotICAgIGNvbnN0
IEdMZW51bSBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgPSAweDhENDI7Ci0gICAgY29u
c3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAgICAgICA9IDB4OEQ0MzsKLSAgICBj
b25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgID0gMHg4RDQ0OwotICAg
IGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAgICAgPSAweDhENTA7Ci0g
ICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFICAgICAgICA9IDB4OEQ1MTsK
LSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgID0gMHg4RDUy
OwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAgPSAweDhE
NTM7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFICAgICAgICA9IDB4
OEQ1NDsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAgID0g
MHg4RDU1OwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X1RZUEUgICAgICAgICAgID0gMHg4Q0QwOwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA9IDB4OENEMTsKLSAgICBjb25zdCBHTGVu
dW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAweDhDRDI7
Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01B
UF9GQUNFID0gMHg4Q0QzOwotCi0gICAgY29uc3QgR0xlbnVtIENPTE9SX0FUVEFDSE1FTlQwICAg
ICAgICAgICAgICA9IDB4OENFMDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfQVRUQUNITUVOVCAg
ICAgICAgICAgICAgID0gMHg4RDAwOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0FUVEFDSE1F
TlQgICAgICAgICAgICAgPSAweDhEMjA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1NURU5DSUxf
QVRUQUNITUVOVCAgICAgICA9IDB4ODIxQTsKLQotICAgIGNvbnN0IEdMZW51bSBOT05FICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAwOwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVS
X0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4Q0Q1OwotICAgIGNvbnN0IEdMZW51
bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICA9IDB4OENENjsKLSAg
ICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQg
PSAweDhDRDc7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5T
SU9OUyAgICAgICAgID0gMHg4Q0Q5OwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9VTlNV
UFBPUlRFRCAgICAgICAgICAgICAgICAgICA9IDB4OENERDsKLQotICAgIGNvbnN0IEdMZW51bSBG
UkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Ci0gICAgY29uc3QgR0xlbnVt
IFJFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4OENBNzsKLSAgICBjb25zdCBHTGVu
dW0gTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgID0gMHg4NEU4OwotCi0gICAgY29uc3Qg
R0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUwNjsKLQotICAgIC8q
IFdlYkdMLXNwZWNpZmljIGVudW1zICovCi0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19GTElQX1lf
V0VCR0wgICAgICAgICAgICAgICAgPSAweDkyNDA7Ci0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19Q
UkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7Ci0gICAgY29uc3QgR0xlbnVtIENP
TlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICAgICAgPSAweDkyNDI7Ci0gICAgY29uc3QgR0xl
bnVtIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wgPSAweDkyNDM7Ci0gICAgY29u
c3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICAgICAgPSAweDkyNDQ7Ci0K
LSAgICByZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3aW5nQnVmZmVyV2lkdGg7Ci0gICAg
cmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1ZmZlckhlaWdodDsKLQotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGFjdGl2ZVRl
eHR1cmUoR0xlbnVtIHRleHR1cmUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwg
V2ViR0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtIHByb2dy
YW0sIEdMdWludCBpbmRleCwgRE9NU3RyaW5nIG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRCdWZmZXIoR0xlbnVtIHRhcmdl
dCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgV2Vi
R0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdMZW51bSB0YXJn
ZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgYmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1w
ZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdM
ZW51bSBtb2RlQWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBi
bGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jU2VwYXJhdGUoR0xlbnVtIHNyY1JHQiwg
R0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRh
dGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdMZW51bSB1c2FnZSk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVy
RGF0YShHTGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEsIEdMZW51bSB1c2FnZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
YnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2FnZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
YnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVy
PyBkYXRhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgQXJy
YXlCdWZmZXJWaWV3PyBkYXRhKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSAg
ICAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51bSB0YXJnZXQpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZpZWxkIG1hc2spOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhckNvbG9yKEdMY2xhbXBmIHJlZCwg
R0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJEZXB0aChHTGNsYW1wZiBkZXB0aCk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNpbChHTGlu
dCBzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29sb3JNYXNrKEdM
Ym9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9vbGVhbiBh
bHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOwotCi0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyBkYXRhKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29tcHJlc3NlZFRleFN1YkltYWdl
MkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBB
cnJheUJ1ZmZlclZpZXcgZGF0YSk7Ci0gICAgCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICBjb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xCdWZm
ZXIgY3JlYXRlQnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xGcmFtZWJ1
ZmZlciBjcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdM
UHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xS
ZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRlciBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMVGV4dHVyZSBjcmVhdGVUZXh0dXJlKCk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2UoR0xlbnVt
IG1vZGUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZUJ1
ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUHJvZ3JhbShXZWJH
TFByb2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVTaGFkZXIoV2ViR0xTaGFk
ZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRl
VGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgZGVwdGhGdW5jKEdMZW51bSBmdW5jKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhSYW5nZShHTGNsYW1wZiB6TmVhciwg
R0xjbGFtcGYgekZhcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFNo
YWRlciBzaGFkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkaXNh
YmxlKEdMZW51bSBjYXApOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRy
YXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBkcmF3RWxl
bWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBHTGludHB0ciBv
ZmZzZXQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGVuYWJsZShH
TGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBmaW5pc2goKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
TGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclRleHR1cmUyRChH
TGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgV2ViR0xU
ZXh0dXJlIHRleHR1cmUsIEdMaW50IGxldmVsKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCk7Ci0gICAgCi0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8g
Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJbmZvIGdl
dEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCk7Ci0KLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBnZXRB
dHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotCi0gICAgW1N0cmljdFR5cGVD
aGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtLCBET01TdHJpbmcgbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21d
IGFueSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgZ2V0Q29udGV4
dEF0dHJpYnV0ZXMoKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSBnZXRFcnJv
cigpOwotCi0gICAgLy8gb2JqZWN0IGdldEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0RXh0ZW5zaW9uKERPTVN0cmluZyBu
YW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UGFyYW1ldGVyKEdMZW51bSBwbmFtZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBn
ZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTGVudW0gcG5hbWUpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwg
UmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFt
IHByb2dyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0
aW9uXSBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIgc2hhZGVyLCBHTGVudW0gcG5hbWUp
OwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1O
dWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKFdlYkdM
U2hhZGVyIHNoYWRlcik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0IGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChH
TGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUpOwotCi0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRp
b25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5nPiBnZXRT
dXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20s
IFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFRleFBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIGFueSBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiBsb2NhdGlvbik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dy
YW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
Q3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xzaXplaXB0ciBn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOwotCi0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0J1ZmZl
cihXZWJHTEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVh
biAgICBpc0NvbnRleHRMb3N0KCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFu
ICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJv
b2xlYW4gICAgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNSZW5k
ZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNUZXh0dXJlKFdlYkdMVGV4dHVy
ZSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgbGluZVdp
ZHRoKEdMZmxvYXQgd2lkdGgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcGl4ZWxTdG9yZWkoR0xlbnVtIHBu
YW1lLCBHTGludCBwYXJhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgcmVhZFBpeGVs
cyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyBwaXhlbHMpOwotICAgIAotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29tcGlsZXIo
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcmVuZGVyYnVmZmVyU3Rv
cmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
c2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lzc29yKEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIg
c2hhZGVyLCBET01TdHJpbmcgc3RyaW5nKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgc3RlbmNpbEZ1bmMoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2sp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsRnVuY1NlcGFy
YXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrKEdMdWludCBt
YXNrKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE1hc2tT
ZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xl
bnVtIHpwYXNzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNp
bE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51
bSB6cGFzcyk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdGV4UGFy
YW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJhbWV0ZXJpKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwotCi0gICAgLy8gU3VwcG9ydGVkIGZv
cm1zOgotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxD
YW52YXNFbGVtZW50PyBjYW52YXMpOwotI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFC
TEVfVklERU8KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/IHZpZGVv
KTsKLSNlbmRpZgotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscyk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1h
Z2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1Yklt
YWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0
ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudD8g
Y2FudmFzKTsKLSNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCi0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudD8gdmlkZW8p
OwotI2VuZGlmCi0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgdW5pZm9ybTFmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVu
aWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFp
KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4KTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWl2KFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmYoV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmZ2KFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaShXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJHTFVuaWZvcm1M
b2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2Z2KFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zaShXZWJHTFVuaWZvcm1M
b2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNpdihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRmKFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZs
b2F0IHcpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJB
cnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybTRpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5
LCBHTGludCB6LCBHTGludCB3KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0
aW9uLCBJbnQzMkFycmF5IHYpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtTWF0cml4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJh
bnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSBhcnJh
eSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2YWxpZGF0ZVByb2dyYW0oV2Vi
R0xQcm9ncmFtIHByb2dyYW0pOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHZlcnRleEF0dHJpYjFmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGluZHgsIEZs
b2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICB2ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0x1aW50
IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0
IHksIEdMZmxvYXQgeik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIHZl
cnRleEF0dHJpYjNmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFycmF5IHZhbHVlcyk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjRmKEdMdWludCBpbmR4
LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZHgs
IEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGluZHgsIEdM
aW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBz
dHJpZGUsIEdMaW50cHRyIG9mZnNldCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworXSBpbnRlcmZhY2UgV2ViR0wxUmVuZGVyaW5nQ29udGV4dCA6IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UgewogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJH
TCkKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dChI
VE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRyaWJ1dGVzKQorICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShwYXNzZWRD
YW52YXMsIGF0dHJpYnV0ZXMpCit7CisgICAgbV90eXBlID0gIndlYmdsMiI7Cit9CisKK1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1l
bnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwK
KyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKSA6IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBjb250ZXh0LCBhdHRyaWJ1dGVzKQorewor
ICAgIG1fdHlwZSA9ICJ3ZWJnbDIiOworfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0X2gKKyNkZWZpbmUgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dCBmaW5hbCA6IHB1YmxpYyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIHsKK3B1YmxpYzoKKyAg
ICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMpOworICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZh
c0VsZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAg
ICBDb25kaXRpb25hbD1XRUJHTCwKKyAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKKyAgICBEb05v
dENoZWNrQ29uc3RhbnRzLAorXSBpbnRlcmZhY2UgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCA6IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgeworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYg
KzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKIAogI2luY2x1ZGUgIldlYkdMQ29u
dGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMQnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTEJ1ZmZlcjo6Y3Jl
YXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdlYkdMQnVmZmVyKGN0eCkpOwogfQogCi1XZWJHTEJ1ZmZlcjo6V2ViR0xCdWZmZXIo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTEJ1ZmZlcjo6V2ViR0xCdWZmZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4
KQogICAgICwgbV90YXJnZXQoMCkKICAgICAsIG1fYnl0ZUxlbmd0aCgwKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCShyZXZpc2lvbiAxNzY5OTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIGNsYXNzIFdlYkdMQnVmZmVyIGZpbmFsIDogcHVibGljIFdlYkdMU2gK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTEJ1ZmZlcigpOwogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqKTsKIAogICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyRGF0YShHQzNEc2l6ZWlwdHIgc2l6
ZSk7CiAgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhKEpTQzo6QXJyYXlCdWZmZXIqKTsKQEAg
LTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXZlckJlZW5Cb3VuZCgpIGNvbnN0
IHsgcmV0dXJuIG9iamVjdCgpICYmIG1fdGFyZ2V0OyB9CiAKIHByb3RlY3RlZDoKLSAgICBXZWJH
TEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBXZWJHTEJ1ZmZlcihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1w
bChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDLmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OldlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdM
RXh0ZW5zaW9uKGNvbnRleHQpCiB7CiAgICAgY29udGV4dC0+YWRkQ29tcHJlc3NlZFRleHR1cmVG
b3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EKTsKQEAgLTUwLDcgKzUw
LDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xDb21wcgogICAgIHJldHVy
biBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDTmFtZTsKIH0KIAotYm9vbCBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQor
Ym9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBj
b250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CiAgICAgcmV0dXJu
IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZSIpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMuaAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwxMCArMzQsMTAgQEAgY2xhc3MgV2ViR0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIGV4cGxpY2l0IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMo
KTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwog
CiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRl
eHR1cmVQVlJUQy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJU
Qzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4
dGVuc2lvbihjb250ZXh0KQogewogICAgIGNvbnRleHQtPmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyk7CkBAIC01
Miw3ICs1Miw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMQ29tcHIKICAg
ICByZXR1cm4gV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDTmFtZTsKIH0KIAotYm9vbCBXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQpCitib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBl
eHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygp
OwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfSU1HX3RleHR1cmVfY29tcHJl
c3Npb25fcHZydGMiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVQVlJUQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oCShyZXZpc2lvbiAxNzY5OTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDIGZpbmFsIDogcHVibGljIFdlYkdM
RXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFs
IH5XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMoKTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBv
cnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBn
ZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwCShy
ZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAog
I2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCiAKICNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RD
OjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBj
b250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKICAgICBjb250ZXh0LT5h
ZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQpOwpAQCAtNTIsNyArNTIsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9u
TmFtZSBXZWJHTENvbXByCiAgICAgcmV0dXJuIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDTmFt
ZTsKIH0KIAotYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMz
VEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogewogICAg
IEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCkt
PmdldEV4dGVuc2lvbnMoKTsKICAgICByZXR1cm4gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VY
VF90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGMiKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oCShyZXZpc2lv
biAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRU
ZXh0dXJlUzNUQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgY2xhc3MgV2Vi
R0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyBmaW5hbCA6IHB1
YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAg
IHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKCk7CiAKLSAgICBzdGF0aWMgYm9v
bCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgc3Vw
cG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5z
aW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAkocmV2aXNpb24gMTc2
OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0
R3JvdXAuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTUzLDE2ICs1MywxNiBAQCBXZWJHTENvbnRleHRHcm91cDo6fldlYkdMQ29udGV4dEdy
b3VwKCkKIEdyYXBoaWNzQ29udGV4dDNEKiBXZWJHTENvbnRleHRHcm91cDo6Z2V0QUdyYXBoaWNz
Q29udGV4dDNEKCkKIHsKICAgICBBU1NFUlQoIW1fY29udGV4dHMuaXNFbXB0eSgpKTsKLSAgICBI
YXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dHMu
YmVnaW4oKTsKKyAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqPjo6aXRlcmF0
b3IgaXQgPSBtX2NvbnRleHRzLmJlZ2luKCk7CiAgICAgcmV0dXJuICgqaXQpLT5ncmFwaGljc0Nv
bnRleHQzRCgpOwogfQogCi12b2lkIFdlYkdMQ29udGV4dEdyb3VwOjphZGRDb250ZXh0KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OmFkZENv
bnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBtX2NvbnRl
eHRzLmFkZChjb250ZXh0KTsKIH0KIAotdm9pZCBXZWJHTENvbnRleHRHcm91cDo6cmVtb3ZlQ29u
dGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIFdlYkdMQ29udGV4dEdy
b3VwOjpyZW1vdmVDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7
CiAgICAgLy8gV2UgbXVzdCBjYWxsIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMgYmVmb3JlIHJl
bW92aW5nIHRoZSBsYXN0IGNvbnRleHQuCiAgICAgaWYgKG1fY29udGV4dHMuc2l6ZSgpID09IDEg
JiYgbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKQEAgLTg5LDkgKzg5LDkgQEAgdm9pZCBX
ZWJHTENvbnRleHRHcm91cDo6ZGV0YWNoQW5kUmVtb3ZlQQogICAgIH0KIH0KIAotdm9pZCBXZWJH
TENvbnRleHRHcm91cDo6bG9zZUNvbnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxv
c3RDb250ZXh0TW9kZSBtb2RlKQordm9pZCBXZWJHTENvbnRleHRHcm91cDo6bG9zZUNvbnRleHRH
cm91cChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKIHsK
LSAgICBmb3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ID0g
bV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQorICAgIGZv
ciAoSGFzaFNldDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj46Oml0ZXJhdG9yIGl0ID0gbV9j
b250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQogICAgICAgICAo
Kml0KS0+bG9zZUNvbnRleHRJbXBsKG1vZGUpOwogCiAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2Jq
ZWN0cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3Jv
dXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRl
eHRHcm91cC5oCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTENvbnRleHRHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAj
aWZuZGVmIFdlYkdMQ29udGV4dEdyb3VwX2gKICNkZWZpbmUgV2ViR0xDb250ZXh0R3JvdXBfaAog
Ci0jaW5jbHVkZSA8V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzYsNyAr
MzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNs
YXNzIFdlYkdMRXh0ZW5zaW9uOwogY2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7Ci1jbGFzcyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCiB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC00NSwxNSArNDUsMTUgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjcmVhdGUoKTsKICAgICB+
V2ViR0xDb250ZXh0R3JvdXAoKTsKIAotICAgIHZvaWQgYWRkQ29udGV4dChXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CisgICAgdm9pZCBhZGRDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAg
ICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAg
dm9pZCBhZGRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKICAgICB2b2lkIHJlbW92ZU9iamVj
dChXZWJHTFNoYXJlZE9iamVjdCopOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFw
aGljc0NvbnRleHQzRCgpOwogCi0gICAgdm9pZCBsb3NlQ29udGV4dEdyb3VwKFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlKTsKKyAgICB2b2lkIGxvc2VDb250ZXh0R3JvdXAo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlKTsKIAogICBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CiAKLSAgICBIYXNoU2V0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+IG1fY29udGV4dHM7CisgICAgSGFzaFNldDxXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKj4gbV9jb250ZXh0czsKICAgICBIYXNoU2V0PFdlYkdMU2hhcmVk
T2JqZWN0Kj4gbV9ncm91cE9iamVjdHM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAJKHJldmlzaW9uIDE3Njk5NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0
T2JqZWN0LmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0KQorV2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMT2JqZWN0KGNvbnRl
eHQpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCShyZXZpc2lvbiAxNzY5OTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIC8vIFdlYkdMQ29udGV4dE9iamVjdCB0aGUgYmFz
ZSBjbGFzcyBmb3Igb2JqZWN0cyB0aGF0IGFyZSBvd25lZCBieSBhIHNwZWNpZmljCiAvLyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQuCkBAIC0zOSw5ICszOSw5IEBAIGNsYXNzIFdlYkdMQ29udGV4dE9i
amVjdCA6IHB1YmxpYyBXZWJHTE8KIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTENvbnRleHRP
YmplY3QoKTsKIAotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dDsgfQorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB2YWxp
ZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGUoY29u
c3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBj
b250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbnRleHQgPT0g
bV9jb250ZXh0OwogICAgIH0KQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGV0
YWNoQ29udGV4dCgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xDb250ZXh0T2JqZWN0KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdMQ29udGV4dE9iamVjdChXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzR3JvdXBPckNvbnRleHQoKSBj
b25zdCBvdmVycmlkZQogICAgIHsKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0
OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVidWdSZW5kZXJlckluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwCShyZXZpc2lvbiAxNzY5OTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAKICNpbmNsdWRlICJXZWJHTERlYnVnUmVu
ZGVyZXJJbmZvLmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpXZWJHTERl
YnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAg
OiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaAkocmV2aXNpb24gMTc2
OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICAgICAgVU5N
QVNLRURfUkVOREVSRVJfV0VCR0wgPSAweDkyNDYKICAgICB9OwogCi0gICAgZXhwbGljaXQgV2Vi
R0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBsaWNp
dCBXZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAg
ICB2aXJ0dWFsIH5XZWJHTERlYnVnUmVuZGVyZXJJbmZvKCk7CiAKICAgICB2aXJ0dWFsIEV4dGVu
c2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcAkocmV2aXNpb24gMTc2OTk0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlICJXZWJHTERlYnVnU2hh
ZGVycy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgog
I2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xE
ZWJ1Z1NoYWRlcnM6OldlYkdMRGVidWdTaGFkZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK1dlYkdMRGVidWdTaGFkZXJzOjpXZWJHTERlYnVnU2hhZGVycyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRl
cnMuaAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xEZWJ1Z1NoYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB0eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBXZWJHTERlYnVnU2hhZGVycyBmaW5hbCA6IHB1
YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xEZWJ1Z1No
YWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xEZWJ1Z1No
YWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldlYkdMRGVi
dWdTaGFkZXJzKCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRl
eHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVwdGhUZXh0dXJlLmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICsz
Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xEZXB0aFRleHR1cmU6OldlYkdM
RGVwdGhUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdMRGVwdGhU
ZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250
ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaAkocmV2aXNpb24gMTc2
OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFdlYkdMRGVwdGhUZXh0dXJlIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xEZXB0aFRleHR1cmUoKTsKIAogICAgIHN0YXRp
YyBib29sIHN1cHBvcnRlZChHcmFwaGljc0NvbnRleHQzRCopOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAJKHJldmlzaW9uIDE3Njk5
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V2ViR0xEcmF3QnVmZmVyczo6V2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQpCitXZWJHTERyYXdCdWZmZXJzOjpXZWJHTERyYXdCdWZmZXJzKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQog
ewogfQpAQCAtNDgsNyArNDgsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJH
TERyYXdCCiAKICNpZiBPUyhEQVJXSU4pCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9y
dGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopCitib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKikKIHsKICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyNDg2CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NTYsNyArNTYsNyBAQCBib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBvcnRlZChXZWJHTFJlCiAK
ICNlbHNlCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBleHRl
bnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpOwog
ICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX2RyYXdfYnVmZmVycyIpCkBA
IC0xMDAsNyArMTAwLDcgQEAgdm9pZCBXZWJHTERyYXdCdWZmZXJzOjpkcmF3QnVmZmVyc1dFQkdM
KAogfQogCiAvLyBzdGF0aWMKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xS
ZXF1aXJlbWVudHMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiB3ZWJnbENvbnRleHQpCitib29sIFdl
YkdMRHJhd0J1ZmZlcnM6OnNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIHdlYmdsQ29udGV4dCkKIHsKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCA9IHdlYmdsQ29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaAkocmV2aXNpb24gMTc2
OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxNyArMzIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBXZWJHTERyYXdCdWZmZXJzIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTERyYXdCdWZmZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIGV4cGxpY2l0IFdlYkdMRHJhd0J1ZmZlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSopOwogICAgIHZpcnR1YWwgfldlYkdMRHJhd0J1ZmZlcnMoKTsKIAotICAgIHN0YXRpYyBi
b29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCBz
dXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdmlydHVhbCBFeHRl
bnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgZHJhd0J1ZmZl
cnNXRUJHTChjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBidWZmZXJzKTsKIAogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgYm9vbCBzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uY3BwCShy
ZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVu
c2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1XZWJHTEV4dGVuc2lvbjo6V2ViR0xFeHRlbnNpb24oV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0KQorV2ViR0xFeHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKIHsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaAko
cmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRl
bnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBXZWJHTEV4
dGVuc2lvbl9oCiAjZGVmaW5lIFdlYkdMRXh0ZW5zaW9uX2gKIAotI2luY2x1ZGUgIldlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NywxNCArNTcsMTQgQEAgcHVibGljOgogCiAg
ICAgdm9pZCByZWYoKSB7IG1fY29udGV4dC0+cmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkgeyBt
X2NvbnRleHQtPmRlcmVmKCk7IH0KLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQo
KSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBj
b250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAKICAgICB2aXJ0dWFsIH5XZWJHTEV4dGVu
c2lvbigpOwogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3QgPSAwOwog
CiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xFeHRlbnNpb24oV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7
Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7CisgICAgV2ViR0xFeHRlbnNp
b24oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqIG1fY29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZp
c2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRC5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2Vi
R0xEcmF3QnVmZmVycy5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0yNjksMTIgKzI2OSwxMiBAQCBXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEF0dGFjaG1l
bnQ6On5XZWJHCiB7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xGcmFt
ZWJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQorUGFzc1JlZlB0cjxX
ZWJHTEZyYW1lYnVmZmVyPiBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY3R4KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xGcmFtZWJ1
ZmZlcihjdHgpKTsKIH0KIAotV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcihXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKK1dlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZm
ZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xDb250ZXh0T2Jq
ZWN0KGN0eCkKICAgICAsIG1faGFzRXZlckJlZW5Cb3VuZChmYWxzZSkKIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDE3
Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5X
ZWJHTEZyYW1lYnVmZmVyKCk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVm
ZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V2ViR0xGcmFtZWJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsK
IAogICAgIHZvaWQgc2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0
YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBHQzNEaW50IGxldmVs
KTsKICAgICB2b2lkIHNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0
dGFjaG1lbnQsIFdlYkdMUmVuZGVyYnVmZmVyKik7CkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGlj
OgogICAgIEdDM0RlbnVtIGdldERyYXdCdWZmZXIoR0MzRGVudW0pOwogCiBwcm90ZWN0ZWQ6Ci0g
ICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBXZWJHTEZy
YW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkg
b3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMTG9zZUNv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
TG9zZUNvbnRleHQuY3BwCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5
LDExIEBACiAKICNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCiAKLSNpbmNsdWRlICJXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xMb3NlQ29udGV4dDo6V2ViR0xMb3Nl
Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTExvc2VDb250ZXh0
OjpXZWJHTExvc2VDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAg
ICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpAQCAtNDksNyArNDksNyBAQCBXZWJH
TEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJHTExvc2VDCiAKIHZvaWQgV2ViR0xMb3NlQ29u
dGV4dDo6bG9zZUNvbnRleHQoKQogewotICAgIG1fY29udGV4dC0+Zm9yY2VMb3N0Q29udGV4dChX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OlN5bnRoZXRpY0xvc3RDb250ZXh0KTsKKyAgICBtX2NvbnRl
eHQtPmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6U3ludGhldGlj
TG9zdENvbnRleHQpOwogfQogCiB2b2lkIFdlYkdMTG9zZUNvbnRleHQ6OnJlc3RvcmVDb250ZXh0
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0
LmgJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
TG9zZUNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKIAogY2xhc3MgV2ViR0xMb3NlQ29udGV4dCBmaW5hbCA6
IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xMb3Nl
Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTExvc2VD
b250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5XZWJHTExv
c2VDb250ZXh0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0
LmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTEgQEAKICNpbmNsdWRl
ICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCiAjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMu
aCIKICNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMT2JqZWN0OjpXZWJHTE9iamVjdChXZWJHTFJlbmRl
cmluZ0NvbnRleHQqKQorV2ViR0xPYmplY3Q6OldlYkdMT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqKQogICAgIDogbV9vYmplY3QoMCkKICAgICAsIG1fYXR0YWNobWVudENvdW50KDAp
CiAgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMT2JqZWN0LmgJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkdM
Q29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTsKIAogY2xhc3MgV2ViR0xPYmplY3QgOiBwdWJsaWMgUmVmQ291
bnRlZDxXZWJHTE9iamVjdD4gewogcHVibGljOgpAQCAtNTYsMTAgKzU2LDEwIEBAIHB1YmxpYzoK
ICAgICBib29sIGlzRGVsZXRlZCgpIHsgcmV0dXJuIG1fZGVsZXRlZDsgfQogCiAgICAgLy8gVHJ1
ZSBpZiB0aGlzIG9iamVjdCBiZWxvbmdzIHRvIHRoZSBncm91cCBvciBjb250ZXh0LgotICAgIHZp
cnR1YWwgYm9vbCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdM
UmVuZGVyaW5nQ29udGV4dCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGUo
Y29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KikgY29uc3QgPSAwOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xPYmplY3QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0Kik7CisgICAgV2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSop
OwogCiAgICAgLy8gc2V0T2JqZWN0IHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIHJpZ2h0IGFm
dGVyIGNyZWF0aW5nIGEgV2ViR0xPYmplY3QuCiAgICAgdm9pZCBzZXRPYmplY3QoUGxhdGZvcm0z
RE9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICszMCwxNiBAQAogI2luY2x1
ZGUgIldlYkdMUHJvZ3JhbS5oIgogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxXZWJH
TFByb2dyYW0+IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4
KQorUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdM
UHJvZ3JhbShjdHgpKTsKIH0KIAotV2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbShXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlKiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAg
LCBtX2xpbmtTdGF0dXMoZmFsc2UpCiAgICAgLCBtX2xpbmtDb3VudCgwKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHJldmlzaW9uIDE3Njk5NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFdlYkdMUHJvZ3JhbSBmaW5hbCA6IHB1YmxpYyBXZWJH
TFMKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTFByb2dyYW0oKTsKIAotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqKTsKIAogICAgIHVuc2lnbmVkIG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygp
OwogICAgIEdDM0RpbnQgZ2V0QWN0aXZlQXR0cmliTG9jYXRpb24oR0MzRHVpbnQgaW5kZXgpOwpA
QCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBkZXRhY2hTaGFkZXIoV2ViR0xTaGFk
ZXIqKTsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0
Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgog
CiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xS
ZW5kZXJidWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKK1Bhc3NSZWZQ
dHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY3R4KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xS
ZW5kZXJidWZmZXIoY3R4KSk7CiB9CkBAIC00NCw3ICs0NCw3IEBAIFdlYkdMUmVuZGVyYnVmZmVy
Ojp+V2ViR0xSZW5kZXJidWZmZXIoKQogICAgIGRlbGV0ZU9iamVjdCgwKTsKIH0KIAotV2ViR0xS
ZW5kZXJidWZmZXI6OldlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4
KQorV2ViR0xSZW5kZXJidWZmZXI6OldlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqIGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1faW50
ZXJuYWxGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0KQogICAgICwgbV9pbml0aWFsaXpl
ZChmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVm
ZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJidWZmZXIuaAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBj
bGFzcyBXZWJHTFJlbmRlcmJ1ZmZlciBmaW5hbCA6IHB1YmxpYyBXCiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+V2ViR0xSZW5kZXJidWZmZXIoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdM
UmVuZGVyYnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKik7CiAKICAgICB2b2lkIHNldEludGVybmFsRm9ybWF0KEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0KQogICAgIHsKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFz
RXZlckJlZW5Cb3VuZCgpIHsgbV9oYXNFdmVyQmVlbkJvdW5kID0gdHJ1ZTsgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgV2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAg
V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNE
T2JqZWN0KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNzY5OTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYyNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoV0VCR0wpCi0KLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKLQot
I2luY2x1ZGUgIkFOR0xFSW5zdGFuY2VkQXJyYXlzLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2Uu
aCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKLSNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXh0ZW5z
aW9uczNELmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxl
bWVudC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
Ci0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJN
YWluRnJhbWUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0Vs
ZW1lbnRJbmRleFVpbnQuaCIKLSNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0j
aW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGlu
ZWFyLmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJT
ZXR0aW5ncy5oIgotI2luY2x1ZGUgIldlYkdMQWN0aXZlSW5mby5oIgotI2luY2x1ZGUgIldlYkdM
QnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1
ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgot
I2luY2x1ZGUgIldlYkdMQ29udGV4dEV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViR0xDb250ZXh0R3Jv
dXAuaCIKLSNpbmNsdWRlICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCi0jaW5jbHVkZSAiV2Vi
R0xEZWJ1Z1NoYWRlcnMuaCIKLSNpbmNsdWRlICJXZWJHTERlcHRoVGV4dHVyZS5oIgotI2luY2x1
ZGUgIldlYkdMRHJhd0J1ZmZlcnMuaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCi0j
aW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgot
I2luY2x1ZGUgIldlYkdMUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIK
LSNpbmNsdWRlICJXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIgotI2luY2x1ZGUgIldlYkdM
VGV4dHVyZS5oIgotI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0KLSNpbmNsdWRl
IDxydW50aW1lL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxp
bmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9VaW50MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0
IGRvdWJsZSBzZWNvbmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0cyA9IDEuMDsKLWNvbnN0IGludCBt
YXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUgPSAyNTY7Ci0KLW5hbWVzcGFjZSB7Ci0KLSAgICBj
bGFzcyBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNj
b3BlZERyYXdpbmdCdWZmZXJCaW5kZXIoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgV2Vi
R0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgOiBtX2RyYXdp
bmdCdWZmZXIoZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgICwgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcoZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb21taXQg
RHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQotICAgICAg
ICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCi0gICAg
ICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIH5TY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAotICAgICAgICAgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgICAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKLSAgICAgICAgV2ViR0xGcmFtZWJ1ZmZl
ciogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7Ci0gICAgfTsKLQotICAgIFBsYXRmb3JtM0RPYmplY3Qg
b2JqZWN0T3JaZXJvKFdlYkdMT2JqZWN0KiBvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4g
b2JqZWN0ID8gb2JqZWN0LT5vYmplY3QoKSA6IDA7Ci0gICAgfQotCi0gICAgdm9pZCBjbGlwMUQo
R0MzRGludCBzdGFydCwgR0MzRHNpemVpIHJhbmdlLCBHQzNEc2l6ZWkgc291cmNlUmFuZ2UsIEdD
M0RpbnQqIGNsaXBwZWRTdGFydCwgR0MzRHNpemVpKiBjbGlwcGVkUmFuZ2UpCi0gICAgewotICAg
ICAgICBBU1NFUlQoY2xpcHBlZFN0YXJ0ICYmIGNsaXBwZWRSYW5nZSk7Ci0gICAgICAgIGlmIChz
dGFydCA8IDApIHsKLSAgICAgICAgICAgIHJhbmdlICs9IHN0YXJ0OwotICAgICAgICAgICAgc3Rh
cnQgPSAwOwotICAgICAgICB9Ci0gICAgICAgIEdDM0RpbnQgZW5kID0gc3RhcnQgKyByYW5nZTsK
LSAgICAgICAgaWYgKGVuZCA+IHNvdXJjZVJhbmdlKQotICAgICAgICAgICAgcmFuZ2UgLT0gZW5k
IC0gc291cmNlUmFuZ2U7Ci0gICAgICAgICpjbGlwcGVkU3RhcnQgPSBzdGFydDsKLSAgICAgICAg
KmNsaXBwZWRSYW5nZSA9IHJhbmdlOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgZmFsc2UgaWYg
bm8gY2xpcHBpbmcgaXMgbmVjZXNzYXJ5LCBpLmUuLCB4LCB5LCB3aWR0aCwgaGVpZ2h0IHN0YXkg
dGhlIHNhbWUuCi0gICAgYm9vbCBjbGlwMkQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc291
cmNlV2lkdGgsIEdDM0RzaXplaSBzb3VyY2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgR0MzRGlu
dCogY2xpcHBlZFgsIEdDM0RpbnQqIGNsaXBwZWRZLCBHQzNEc2l6ZWkqIGNsaXBwZWRXaWR0aCwg
R0MzRHNpemVpKmNsaXBwZWRIZWlnaHQpCi0gICAgewotICAgICAgICBBU1NFUlQoY2xpcHBlZFgg
JiYgY2xpcHBlZFkgJiYgY2xpcHBlZFdpZHRoICYmIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICBj
bGlwMUQoeCwgd2lkdGgsIHNvdXJjZVdpZHRoLCBjbGlwcGVkWCwgY2xpcHBlZFdpZHRoKTsKLSAg
ICAgICAgY2xpcDFEKHksIGhlaWdodCwgc291cmNlSGVpZ2h0LCBjbGlwcGVkWSwgY2xpcHBlZEhl
aWdodCk7Ci0gICAgICAgIHJldHVybiAoKmNsaXBwZWRYICE9IHggfHwgKmNsaXBwZWRZICE9IHkg
fHwgKmNsaXBwZWRXaWR0aCAhPSB3aWR0aCB8fCAqY2xpcHBlZEhlaWdodCAhPSBoZWlnaHQpOwot
ICAgIH0KLQotICAgIEdDM0RpbnQgY2xhbXAoR0MzRGludCB2YWx1ZSwgR0MzRGludCBtaW4sIEdD
M0RpbnQgbWF4KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlIDwgbWluKQotICAgICAgICAgICAg
dmFsdWUgPSBtaW47Ci0gICAgICAgIGlmICh2YWx1ZSA+IG1heCkKLSAgICAgICAgICAgIHZhbHVl
ID0gbWF4OwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHRy
dWUgaWYgYSBjaGFyYWN0ZXIgYmVsb25ncyB0byB0aGUgQVNDSUkgc3Vic2V0IGFzIGRlZmluZWQg
aW4KLSAgICAvLyBHTFNMIEVTIDEuMCBzcGVjIHNlY3Rpb24gMy4xLgotICAgIGJvb2wgdmFsaWRh
dGVDaGFyYWN0ZXIodW5zaWduZWQgY2hhciBjKQotICAgIHsKLSAgICAgICAgLy8gUHJpbnRpbmcg
Y2hhcmFjdGVycyBhcmUgdmFsaWQgZXhjZXB0ICIgJCBgIEAgXCAnIERFTC4KLSAgICAgICAgaWYg
KGMgPj0gMzIgJiYgYyA8PSAxMjYKLSAgICAgICAgICAgICYmIGMgIT0gJyInICYmIGMgIT0gJyQn
ICYmIGMgIT0gJ2AnICYmIGMgIT0gJ0AnICYmIGMgIT0gJ1xcJyAmJiBjICE9ICdcJycpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgLy8gSG9yaXpvbnRhbCB0YWIsIGxpbmUgZmVl
ZCwgdmVydGljYWwgdGFiLCBmb3JtIGZlZWQsIGNhcnJpYWdlIHJldHVybgotICAgICAgICAvLyBh
cmUgYWxzbyB2YWxpZC4KLSAgICAgICAgaWYgKGMgPj0gOSAmJiBjIDw9IDEzKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29s
IGlzUHJlZml4UmVzZXJ2ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIHsKLSAgICAgICAgaWYg
KG5hbWUuc3RhcnRzV2l0aCgiZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJ3ZWJnbF8iKSB8fCBu
YW1lLnN0YXJ0c1dpdGgoIl93ZWJnbF8iKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU3RyaXBzIGNvbW1lbnRzIGZyb20g
c2hhZGVyIHRleHQuIFRoaXMgYWxsb3dzIG5vbi1BU0NJSSBjaGFyYWN0ZXJzCi0gICAgLy8gdG8g
YmUgdXNlZCBpbiBjb21tZW50cyB3aXRob3V0IHBvdGVudGlhbGx5IGJyZWFraW5nIE9wZW5HTAot
ICAgIC8vIGltcGxlbWVudGF0aW9ucyBub3QgZXhwZWN0aW5nIGNoYXJhY3RlcnMgb3V0c2lkZSB0
aGUgR0xTTCBFUyBzZXQuCi0gICAgY2xhc3MgU3RyaXBDb21tZW50cyB7Ci0gICAgcHVibGljOgot
ICAgICAgICBTdHJpcENvbW1lbnRzKGNvbnN0IFN0cmluZyYgc3RyKQotICAgICAgICAgICAgOiBt
X3BhcnNlU3RhdGUoQmVnaW5uaW5nT2ZMaW5lKQotICAgICAgICAgICAgLCBtX3NvdXJjZVN0cmlu
ZyhzdHIpCi0gICAgICAgICAgICAsIG1fbGVuZ3RoKHN0ci5sZW5ndGgoKSkKLSAgICAgICAgICAg
ICwgbV9wb3NpdGlvbigwKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZSgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgU3RyaW5nIHJlc3VsdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgYm9vbCBoYXNNb3JlQ2hhcmFjdGVycygpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAobV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgcGFyc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAoaGFzTW9yZUNoYXJh
Y3RlcnMoKSkgewotICAgICAgICAgICAgICAgIHByb2Nlc3MoY3VycmVudCgpKTsKLSAgICAgICAg
ICAgICAgICAvLyBwcm9jZXNzKCkgbWlnaHQgYWR2YW5jZSB0aGUgcG9zaXRpb24uCi0gICAgICAg
ICAgICAgICAgaWYgKGhhc01vcmVDaGFyYWN0ZXJzKCkpCi0gICAgICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcHJvY2Vz
cyhVQ2hhcik7Ci0KLSAgICAgICAgYm9vbCBwZWVrKFVDaGFyJiBjaGFyYWN0ZXIpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3Bvc2l0aW9uICsgMSA+PSBtX2xlbmd0aCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjaGFyYWN0ZXIgPSBtX3Nv
dXJjZVN0cmluZ1ttX3Bvc2l0aW9uICsgMV07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX3Bvc2l0aW9uIDwgbV9s
ZW5ndGgpOwotICAgICAgICAgICAgcmV0dXJuIG1fc291cmNlU3RyaW5nW21fcG9zaXRpb25dOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZHZhbmNlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgKyttX3Bvc2l0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc05ld2xpbmUoVUNo
YXIgY2hhcmFjdGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBEb24ndCBhdHRl
bXB0IHRvIGNhbm9uaWNhbGl6ZSBuZXdsaW5lIHJlbGF0ZWQgY2hhcmFjdGVycy4KLSAgICAgICAg
ICAgIHJldHVybiAoY2hhcmFjdGVyID09ICdcbicgfHwgY2hhcmFjdGVyID09ICdccicpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBlbWl0KFVDaGFyIGNoYXJhY3RlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgbV9idWlsZGVyLmFwcGVuZChjaGFyYWN0ZXIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZW51bSBQYXJzZVN0YXRlIHsKLSAgICAgICAgICAgIC8vIEhhdmUgbm90IHNlZW4gYW4g
QVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIHlldCBvbgotICAgICAgICAgICAgLy8gdGhp
cyBsaW5lLiBQb3NzaWJsZSB0aGF0IHdlIG1pZ2h0IHNlZSBhIHByZXByb2Nlc3NvcgotICAgICAg
ICAgICAgLy8gZGlyZWN0aXZlLgotICAgICAgICAgICAgQmVnaW5uaW5nT2ZMaW5lLAotCi0gICAg
ICAgICAgICAvLyBIYXZlIHNlZW4gYXQgbGVhc3Qgb25lIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNo
YXJhY3RlcgotICAgICAgICAgICAgLy8gb24gdGhpcyBsaW5lLgotICAgICAgICAgICAgTWlkZGxl
T2ZMaW5lLAotCi0gICAgICAgICAgICAvLyBIYW5kbGluZyBhIHByZXByb2Nlc3NvciBkaXJlY3Rp
dmUuIFBhc3NlcyB0aHJvdWdoIGFsbAotICAgICAgICAgICAgLy8gY2hhcmFjdGVycyB1cCB0byB0
aGUgZW5kIG9mIHRoZSBsaW5lLiBEaXNhYmxlcyBjb21tZW50Ci0gICAgICAgICAgICAvLyBwcm9j
ZXNzaW5nLgotICAgICAgICAgICAgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmUsCi0KLSAgICAgICAg
ICAgIC8vIEhhbmRsaW5nIGEgc2luZ2xlLWxpbmUgY29tbWVudC4gVGhlIGNvbW1lbnQgdGV4dCBp
cwotICAgICAgICAgICAgLy8gcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4KLSAgICAgICAg
ICAgIEluU2luZ2xlTGluZUNvbW1lbnQsCi0KLSAgICAgICAgICAgIC8vIEhhbmRsaW5nIGEgbXVs
dGktbGluZSBjb21tZW50LiBOZXdsaW5lcyBhcmUgcGFzc2VkCi0gICAgICAgICAgICAvLyB0aHJv
dWdoIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycy4KLSAgICAgICAgICAgIEluTXVsdGlMaW5lQ29t
bWVudAotICAgICAgICB9OwotCi0gICAgICAgIFBhcnNlU3RhdGUgbV9wYXJzZVN0YXRlOwotICAg
ICAgICBTdHJpbmcgbV9zb3VyY2VTdHJpbmc7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwot
ICAgICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uOwotICAgICAgICBTdHJpbmdCdWlsZGVyIG1fYnVp
bGRlcjsKLSAgICB9OwotCi0gICAgdm9pZCBTdHJpcENvbW1lbnRzOjpwcm9jZXNzKFVDaGFyIGMp
Ci0gICAgewotICAgICAgICBpZiAoaXNOZXdsaW5lKGMpKSB7Ci0gICAgICAgICAgICAvLyBObyBt
YXR0ZXIgd2hhdCBzdGF0ZSB3ZSBhcmUgaW4sIHBhc3MgdGhyb3VnaCBuZXdsaW5lcwotICAgICAg
ICAgICAgLy8gc28gd2UgcHJlc2VydmUgbGluZSBudW1iZXJzLgotICAgICAgICAgICAgZW1pdChj
KTsKLQotICAgICAgICAgICAgaWYgKG1fcGFyc2VTdGF0ZSAhPSBJbk11bHRpTGluZUNvbW1lbnQp
Ci0gICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gQmVnaW5uaW5nT2ZMaW5lOwotCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBVQ2hhciB0ZW1wID0gMDsKLSAg
ICAgICAgc3dpdGNoIChtX3BhcnNlU3RhdGUpIHsKLSAgICAgICAgY2FzZSBCZWdpbm5pbmdPZkxp
bmU6Ci0gICAgICAgICAgICBpZiAoV1RGOjppc0FTQ0lJU3BhY2UoYykpIHsKLSAgICAgICAgICAg
ICAgICBlbWl0KGMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoYyA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUg
PSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZTsKLSAgICAgICAgICAgICAgICBlbWl0KGMpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUcmFu
c2l0aW9uIHRvIG5vcm1hbCBzdGF0ZSBhbmQgcmUtaGFuZGxlIGNoYXJhY3Rlci4KLSAgICAgICAg
ICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKLSAgICAgICAgICAgIHByb2Nlc3MoYyk7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIE1pZGRsZU9mTGluZToKLSAgICAg
ICAgICAgIGlmIChjID09ICcvJyAmJiBwZWVrKHRlbXApKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHRlbXAgPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluU2lu
Z2xlTGluZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoJyAnKTsKLSAgICAgICAg
ICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSAnKicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5NdWx0aUxpbmVDb21tZW50OwotICAgICAg
ICAgICAgICAgICAgICAvLyBFbWl0IHRoZSBjb21tZW50IHN0YXJ0IGluIGNhc2UgdGhlIHVzZXIg
aGFzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuIHVuY2xvc2VkIGNvbW1lbnQgYW5kIHdlIHdh
bnQgdG8gbGF0ZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmFsIGFuIGVycm9yLgotICAg
ICAgICAgICAgICAgICAgICBlbWl0KCcvJyk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoJyon
KTsKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVt
aXQoYyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEluUHJlcHJvY2Vzc29y
RGlyZWN0aXZlOgotICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgdGhlIGNoYXJhY3RlciBp
cywganVzdCBwYXNzIGl0Ci0gICAgICAgICAgICAvLyB0aHJvdWdoLiBEbyBub3QgcGFyc2UgY29t
bWVudHMgaW4gdGhpcyBzdGF0ZS4gVGhpcwotICAgICAgICAgICAgLy8gbWlnaHQgbm90IGJlIHRo
ZSByaWdodCB0aGluZyB0byBkbyBsb25nIHRlcm0sIGJ1dCBpdAotICAgICAgICAgICAgLy8gc2hv
dWxkIGhhbmRsZSB0aGUgI2Vycm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuCi0gICAgICAgICAg
ICBlbWl0KGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJblNpbmdsZUxp
bmVDb21tZW50OgotICAgICAgICAgICAgLy8gVGhlIG5ld2xpbmUgY29kZSBhdCB0aGUgdG9wIG9m
IHRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZQotICAgICAgICAgICAgLy8gb2YgcmVzZXR0aW5nIG91
ciBzdGF0ZSB3aGVuIHdlIGdldCBvdXQgb2YgdGhlCi0gICAgICAgICAgICAvLyBzaW5nbGUtbGlu
ZSBjb21tZW50LiBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBJbk11bHRpTGluZUNvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAo
YyA9PSAnKicgJiYgcGVlayh0ZW1wKSAmJiB0ZW1wID09ICcvJykgewotICAgICAgICAgICAgICAg
IGVtaXQoJyonKTsKLSAgICAgICAgICAgICAgICBlbWl0KCcvJyk7Ci0gICAgICAgICAgICAgICAg
bV9wYXJzZVN0YXRlID0gTWlkZGxlT2ZMaW5lOwotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
U3dhbGxvdyBhbGwgb3RoZXIgY2hhcmFjdGVycy4gVW5jbGVhciB3aGV0aGVyIHdlIG1heQotICAg
ICAgICAgICAgLy8gd2FudCBvciBuZWVkIHRvIGp1c3QgZW1pdCBhIHNwYWNlIHBlciBjaGFyYWN0
ZXIgdG8gdHJ5Ci0gICAgICAgICAgICAvLyB0byBwcmVzZXJ2ZSBjb2x1bW4gbnVtYmVycyBmb3Ig
ZGVidWdnaW5nIHB1cnBvc2VzLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci19IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKLQotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0
TG9zdENhbGxiYWNrIDogcHVibGljIEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxi
YWNrIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNp
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjYikgOiBtX2NvbnRleHQoY2IpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0
KCkgb3ZlcnJpZGUgeyBtX2NvbnRleHQtPmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpSZWFsTG9zdENvbnRleHQpOyB9Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdD
b250ZXh0TG9zdENhbGxiYWNrKCkge30KLXByaXZhdGU6Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBtX2NvbnRleHQ7Ci19OwotCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2Fs
bGJhY2sgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxp
Y2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNiKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgb25F
cnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBHQzNEaW50KSBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+bV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSkK
LSAgICAgICAgICAgIG1fY29udGV4dC0+cHJpbnRHTEVycm9yVG9Db25zb2xlKG1lc3NhZ2UpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxs
YmFjaygpIHsgfQotcHJpdmF0ZToKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4
dDsKLX07Ci0KLXN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMqIGF0dHJzKQotewotICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNhbnZh
cy0+ZG9jdW1lbnQoKTsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gVGhlIEZyYW1l
TG9hZGVyQ2xpZW50IG1pZ2h0IGJsb2NrIGNyZWF0aW9uIG9mIGEgbmV3IFdlYkdMIGNvbnRleHQg
ZGVzcGl0ZSB0aGUgcGFnZSBzZXR0aW5nczsgaW4KLSAgICAvLyBwYXJ0aWN1bGFyLCBpZiBXZWJH
TCBjb250ZXh0cyB3ZXJlIGxvc3Qgb25lIG9yIG1vcmUgdGltZXMgdmlhIHRoZSBHTF9BUkJfcm9i
dXN0bmVzcyBleHRlbnNpb24uCi0gICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxs
b3dXZWJHTChmcmFtZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpIHsKLSAgICAgICAgY2Fu
dmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2UsIHRydWUsICJXZWIgcGFnZSB3
YXMgbm90IGFsbG93ZWQgdG8gY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGJvb2wgaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
biA9IGZhbHNlOwotICAgIERvY3VtZW50JiB0b3BEb2N1bWVudCA9IGRvY3VtZW50LnRvcERvY3Vt
ZW50KCk7Ci0gICAgUGFnZSogcGFnZSA9IHRvcERvY3VtZW50LnBhZ2UoKTsKLSAgICBpZiAocGFn
ZSAmJiAhdG9wRG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkgewotICAgICAgICBXZWJHTExv
YWRQb2xpY3kgcG9saWN5ID0gcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkud2Vi
R0xQb2xpY3lGb3JVUkwodG9wRG9jdW1lbnQudXJsKCkpOwotCi0gICAgICAgIGlmIChwb2xpY3kg
PT0gV2ViR0xCbG9ja0NyZWF0aW9uKSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJUaGUgcG9s
aWN5IGZvciB0aGlzIFVSTCAoJXMpIGlzIHRvIGJsb2NrIFdlYkdMLiIsIHRvcERvY3VtZW50LnVy
bCgpLmhvc3QoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTFBlbmRpbmdDcmVhdGlvbikg
ewotICAgICAgICAgICAgTE9HKFdlYkdMLCAiV2ViR0wgcG9saWN5IGlzIHBlbmRpbmcuIE1heSBu
ZWVkIHRvIGJlIHJlc29sdmVkIGxhdGVyLiIpOwotICAgICAgICAgICAgaXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbiA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gYXR0cnMgPyBhdHRycy0+YXR0cmlidXRlcygp
IDogR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRyaWJ1dGVz
LmFudGlhbGlhcykgewotICAgICAgICBpZiAoIWZyYW1lLT5zZXR0aW5ncygpLm9wZW5HTE11bHRp
c2FtcGxpbmdFbmFibGVkKCkpCi0gICAgICAgICAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZh
bHNlOwotICAgIH0KLQotICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKLSAgICBh
dHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gZmFsc2U7Ci0gICAgYXR0cmlidXRlcy5wcmVmZXJE
aXNjcmV0ZUdQVSA9IHRydWU7Ci0KLSAgICBpZiAoZnJhbWUtPnNldHRpbmdzKCkuZm9yY2VTb2Z0
d2FyZVdlYkdMUmVuZGVyaW5nKCkpCi0gICAgICAgIGF0dHJpYnV0ZXMuZm9yY2VTb2Z0d2FyZVJl
bmRlcmVyID0gdHJ1ZTsKLQotICAgIGlmIChwYWdlKQotICAgICAgICBhdHRyaWJ1dGVzLmRldmlj
ZVBpeGVsUmF0aW8gPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotCi0gICAgaWYgKGlzUGVu
ZGluZ1BvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiQ3JlYXRlIGEgV2Vi
R0wgY29udGV4dCB0aGF0IGxvb2tzIHJlYWwsIGJ1dCB3aWxsIHJlcXVpcmUgYSBwb2xpY3kgcmVz
b2x1dGlvbiBpZiB1c2VkLiIpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJp
bmdDb250ZXh0PiByZW5kZXJpbmdDb250ZXh0KG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2Fu
dmFzLCBhdHRyaWJ1dGVzKSk7Ci0gICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPnN1c3BlbmRJZk5l
ZWRlZCgpOwotICAgICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKLSAgICB9Ci0KLSAgICBI
b3N0V2luZG93KiBob3N0V2luZG93ID0gZG9jdW1lbnQudmlldygpLT5yb290KCktPmhvc3RXaW5k
b3coKTsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7Ci0KLSAgICBpZiAoIWNvbnRl
eHQgfHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7Ci0gICAgICAgIGNhbnZhcy0+
ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJn
bGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZhbHNlLCB0cnVlLCAiQ291bGQgbm90IGNyZWF0
ZSBhIFdlYkdMIGNvbnRleHQuIikpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7
Ci0gICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfZGVidWdfbWFya2VyIikpCi0g
ICAgICAgIGV4dGVuc2lvbnMtPnB1c2hHcm91cE1hcmtlckVYVCgiV2ViR0xSZW5kZXJpbmdDb250
ZXh0Iik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiByZW5k
ZXJpbmdDb250ZXh0KG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBjb250ZXh0LCBh
dHRyaWJ1dGVzKSk7Ci0gICAgcmVuZGVyaW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7Ci0K
LSAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICA6IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQotICAgICwgQWN0aXZlRE9NT2JqZWN0KCZwYXNz
ZWRDYW52YXMtPmRvY3VtZW50KCkpCi0gICAgLCBtX2NvbnRleHQoMCkKLSAgICAsIG1fZHJhd2lu
Z0J1ZmZlcigwKQotICAgICwgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcigqdGhpcywg
JldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KQotICAgICwg
bV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKLSAgICAsIG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmVDb250ZXh0KQotICAgICwgbV9nZW5lcmF0
ZWRJbWFnZUNhY2hlKDApCi0gICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQotICAgICwgbV9jb250
ZXh0TG9zdE1vZGUoU3ludGhldGljTG9zdENvbnRleHQpCi0gICAgLCBtX2F0dHJpYnV0ZXMoYXR0
cmlidXRlcykKLSAgICAsIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUodHJ1ZSkKLSAgICAs
IG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29s
ZSkKLSAgICAsIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbih0cnVlKQotICAgICwgbV9oYXNS
ZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQotewotfQotCi1XZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2Fu
dmFzLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LAotICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0KHBhc3NlZENhbnZhcykKLSAgICAsIEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFz
LT5kb2N1bWVudCgpKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2RyYXdpbmdC
dWZmZXIoMCkKLSAgICAsIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIoKnRoaXMsICZX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNoQ29udGV4dExvc3RFdmVudCkKLSAgICAsIG1f
cmVzdG9yZUFsbG93ZWQoZmFsc2UpCi0gICAgLCBtX3Jlc3RvcmVUaW1lcigqdGhpcywgJldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCkKLSAgICAsIG1fZ2VuZXJhdGVk
SW1hZ2VDYWNoZSg0KQotICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkKLSAgICAsIG1fY29udGV4
dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQotICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpCi0gICAgLCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKHRydWUpCi0gICAgLCBt
X251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZChtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUp
Ci0gICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24oZmFsc2UpCi0gICAgLCBtX2hhc1Jl
cXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7
Ci0gICAgbV9jb250ZXh0R3JvdXAgPSBXZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKCk7Ci0gICAg
bV9jb250ZXh0R3JvdXAtPmFkZENvbnRleHQodGhpcyk7Ci0KLSAgICBtX21heFZpZXdwb3J0RGlt
c1swXSA9IG1fbWF4Vmlld3BvcnREaW1zWzFdID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUywgbV9tYXhWaWV3cG9ydERp
bXMpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5iaW5kKCk7Ci0KLSAgICBzZXR1cEZsYWdzKCk7Ci0gICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQo
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0
KCkKLXsKLSAgICBBU1NFUlQoIW1fY29udGV4dExvc3QpOwotICAgIG1fbmVlZHNVcGRhdGUgPSB0
cnVlOwotICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKLSAgICBtX2FjdGl2ZVRleHR1
cmVVbml0ID0gMDsKLSAgICBtX3BhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1fdW5wYWNrQWxpZ25t
ZW50ID0gNDsKLSAgICBtX3VucGFja0ZsaXBZID0gZmFsc2U7Ci0gICAgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhID0gZmFsc2U7Ci0gICAgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9IEdy
YXBoaWNzQ29udGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0w7Ci0gICAgbV9ib3VuZEFycmF5
QnVmZmVyID0gMDsKLSAgICBtX2N1cnJlbnRQcm9ncmFtID0gMDsKLSAgICBtX2ZyYW1lYnVmZmVy
QmluZGluZyA9IDA7Ci0gICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gMDsKLSAgICBtX2RlcHRo
TWFzayA9IHRydWU7Ci0gICAgbV9zdGVuY2lsRW5hYmxlZCA9IGZhbHNlOwotICAgIG1fc3RlbmNp
bE1hc2sgPSAweEZGRkZGRkZGOwotICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gMHhGRkZGRkZGRjsK
LSAgICBtX3N0ZW5jaWxGdW5jUmVmID0gMDsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IDA7
Ci0gICAgbV9zdGVuY2lsRnVuY01hc2sgPSAweEZGRkZGRkZGOwotICAgIG1fc3RlbmNpbEZ1bmNN
YXNrQmFjayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsKLSAgICBt
X251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCA9IG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29s
ZTsKLSAgICAKLSAgICBtX2NsZWFyQ29sb3JbMF0gPSBtX2NsZWFyQ29sb3JbMV0gPSBtX2NsZWFy
Q29sb3JbMl0gPSBtX2NsZWFyQ29sb3JbM10gPSAwOwotICAgIG1fc2Npc3NvckVuYWJsZWQgPSBm
YWxzZTsKLSAgICBtX2NsZWFyRGVwdGggPSAxOwotICAgIG1fY2xlYXJTdGVuY2lsID0gMDsKLSAg
ICBtX2NvbG9yTWFza1swXSA9IG1fY29sb3JNYXNrWzFdID0gbV9jb2xvck1hc2tbMl0gPSBtX2Nv
bG9yTWFza1szXSA9IHRydWU7Ci0KLSAgICBHQzNEaW50IG51bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmbnVtQ29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cyk7Ci0gICAgbV90ZXh0dXJlVW5pdHMuY2xlYXIoKTsKLSAgICBtX3RleHR1cmVVbml0
cy5yZXNpemUobnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0KLSAgICBHQzNEaW50IG51
bVZlcnRleEF0dHJpYnMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJm51bVZlcnRleEF0dHJpYnMpOwotICAgIG1f
bWF4VmVydGV4QXR0cmlicyA9IG51bVZlcnRleEF0dHJpYnM7Ci0gICAgCi0gICAgbV9tYXhUZXh0
dXJlU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpOwotICAgIG1fbWF4VGV4dHVy
ZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heFRleHR1cmVTaXpl
LCBtX21heFRleHR1cmVTaXplKTsKLSAgICBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRSwgJm1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKLSAgICBtX21heEN1YmVN
YXBUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4Q3Vi
ZU1hcFRleHR1cmVTaXplLCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhSZW5k
ZXJidWZmZXJTaXplID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUsICZtX21heFJlbmRlcmJ1ZmZlclNpemUpOwot
Ci0gICAgLy8gVGhlc2UgdHdvIHZhbHVlcyBmcm9tIEVYVF9kcmF3X2J1ZmZlcnMgYXJlIGxhemls
eSBxdWVyaWVkLgotICAgIG1fbWF4RHJhd0J1ZmZlcnMgPSAwOwotICAgIG1fbWF4Q29sb3JBdHRh
Y2htZW50cyA9IDA7Ci0KLSAgICBtX2JhY2tEcmF3QnVmZmVyID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkJBQ0s7Ci0gICAgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCA9IGZhbHNl
OwotICAgIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQgPSBmYWxzZTsKLQotICAgIG1fZGVmYXVsdFZl
cnRleEFycmF5T2JqZWN0ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKHRoaXMs
IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0KTsKLSAgICBhZGRDb250
ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgpKTsKLSAgICBtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsKLSAgICAKLSAg
ICBtX3ZlcnRleEF0dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0dHJpYnMpOwotCi0gICAg
aWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjcmVhdGVGYWxsYmFja0JsYWNrVGV4
dHVyZXMxeDEoKTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgaW5pdFZl
cnRleEF0dHJpYjAoKTsKLQotICAgIEludFNpemUgY2FudmFzU2l6ZSA9IGNsYW1wZWRDYW52YXNT
aXplKCk7Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5yZXNldChjYW52YXNTaXplKTsKLQotICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXNTaXpl
LndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwotICAgIG1fY29udGV4dC0+dmlld3BvcnQo
MCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKLSAgICBtX2Nv
bnRleHQtPnNjaXNzb3IoMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdo
dCgpKTsKLQotICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhzdGQ6Om1ha2Vf
dW5pcXVlPFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaz4odGhpcykpOwotICAgIG1f
Y29udGV4dC0+c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJl
bmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjaz4odGhpcykpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0dXBGbGFncygpCi17Ci0gICAgQVNTRVJUKG1fY29udGV4
dCk7Ci0KLSAgICBpZiAoUGFnZSogcGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkK
LSAgICAgICAgbV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSA9IHBhZ2UtPnNldHRpbmdzKCku
d2ViR0xFcnJvcnNUb0NvbnNvbGVFbmFibGVkKCk7Ci0KLSAgICBtX2lzR0xFUzJDb21wbGlhbnQg
PSBtX2NvbnRleHQtPmlzR0xFUzJDb21wbGlhbnQoKTsKLSAgICBtX2lzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFi
bGVkKCJHTF9DSFJPTUlVTV9zdHJpY3RfYXR0cmlicyIpOwotICAgIG1faXNSZXNvdXJjZVNhZmUg
PSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9DSFJPTUlVTV9yZXNv
dXJjZV9zYWZlIik7Ci0gICAgaWYgKG1faXNHTEVTMkNvbXBsaWFudCkgewotICAgICAgICBtX2lz
R0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQo
IkdMX09FU190ZXh0dXJlX25wb3QiKTsKLSAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRl
ZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX09FU19wYWNrZWRf
ZGVwdGhfc3RlbmNpbCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faXNHTEVTMk5QT1RTdHJp
Y3QgPSAhbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQVJCX3RleHR1
cmVfbm9uX3Bvd2VyX29mX3R3byIpOwotICAgICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVk
ID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfRVhUX3BhY2tlZF9k
ZXB0aF9zdGVuY2lsIik7Ci0gICAgfQotICAgIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkID0g
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfRVhUX3JvYnVzdG5lc3Mi
KTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFsbG93UHJpdmlsZWdlZEV4dGVu
c2lvbnMoKSBjb25zdAotewotICAgIGlmIChQYWdlKiBwYWdlID0gY2FudmFzKCktPmRvY3VtZW50
KCkucGFnZSgpKQotICAgICAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3MoKS5wcml2aWxlZ2VkV2Vi
R0xFeHRlbnNpb25zRW5hYmxlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtIGZv
cm1hdCkKLXsKLSAgICBpZiAoIW1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZv
cm1hdCkpCi0gICAgICAgIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmFwcGVuZChmb3JtYXQp
OwotfQotCi1XZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJlbmRlcmluZ0NvbnRleHQoKQot
ewotICAgIC8vIFJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBXZWJHTE9iamVjdHMgc28gaWYgdGhl
eSBhcmUgdGhlIGxhc3QgcmVmZXJlbmNlCi0gICAgLy8gdGhleSB3aWxsIGJlIGZyZWVkIGJlZm9y
ZSB0aGUgbGFzdCBjb250ZXh0IGlzIHJlbW92ZWQgZnJvbSB0aGUgY29udGV4dCBncm91cC4KLSAg
ICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBudWxscHRyOwotICAgIG1fZGVmYXVsdFZlcnRleEFycmF5
T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBudWxscHRy
OwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9jdXJyZW50UHJv
Z3JhbSA9IG51bGxwdHI7Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOwotICAg
IG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IG51bGxwdHI7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVu
aXRzW2ldLnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRyOwotICAgICAgICBtX3RleHR1cmVVbml0
c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOwotICAgIH0KLQotICAgIG1fYmxh
Y2tUZXh0dXJlMkQgPSBudWxscHRyOwotICAgIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcCA9IG51bGxw
dHI7Ci0KLSAgICBpZiAoIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBk
ZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7Ci0gICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRl
eHQzRCgpOwotICAgICAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlQ29udGV4dCh0aGlzKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXN0cm95R3JhcGhpY3NDb250
ZXh0M0QoKQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFRoZSBkcmF3aW5nIGJ1ZmZlciBob2xkcyBhIGNvbnRleHQgcmVm
ZXJlbmNlLiBJdCBtdXN0IGFsc28gYmUgZGVzdHJveWVkCi0gICAgLy8gaW4gb3JkZXIgZm9yIHRo
ZSBjb250ZXh0IHRvIGJlIHJlbGVhc2VkLgotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci5jbGVhcigpOwotCi0gICAgaWYgKG1fY29udGV4dCkgewotICAg
ICAgICBtX2NvbnRleHQtPnNldENvbnRleHRMb3N0Q2FsbGJhY2sobnVsbHB0cik7Ci0gICAgICAg
IG1fY29udGV4dC0+c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2sobnVsbHB0cik7Ci0gICAgICAgIG1f
Y29udGV4dC5jbGVhcigpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
Om1hcmtDb250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOwot
Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5tYXJr
Q29udGVudHNDaGFuZ2VkKCk7Ci0KLSAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOwotICAgIFJl
bmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwotICAgIGlmIChpc0Fj
Y2VsZXJhdGVkKCkgJiYgcmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpKSB7Ci0gICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwotICAgICAg
ICBjYW52YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgpOwotICAgICAgICByZW5kZXJCb3gtPmNvbnRl
bnRDaGFuZ2VkKENhbnZhc0NoYW5nZWQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9t
YXJrZWRDYW52YXNEaXJ0eSkgewotICAgICAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRy
dWU7Ci0gICAgICAgICAgICBjYW52YXMoKS0+ZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgw
LCAwKSwgY2xhbXBlZENhbnZhc1NpemUoKSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZpZWxkIG1h
c2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKCFtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpIHx8IG1fbGF5
ZXJDbGVhcmVkCi0gICAgICAgIHx8IG1fYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIg
fHwgKG1hc2sgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gY29udGV4dEF0dHJpYnV0ZXMg
PSBnZXRDb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIGl0J3MgcG9z
c2libGUgdG8gY29tYmluZSB0aGUgY2xlYXIgdGhlIHVzZXIgYXNrZWQgZm9yIGFuZCB0aGlzIGNs
ZWFyLgotICAgIGJvb2wgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1fc2Npc3NvckVuYWJsZWQ7
Ci0KLSAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCk7Ci0gICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQlVGRkVSX0JJVCkpCi0gICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NvbG9y
TWFza1swXSA/IG1fY2xlYXJDb2xvclswXSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2NvbG9yTWFza1sxXSA/IG1fY2xlYXJDb2xvclsxXSA6IDAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1syXSA/IG1fY2xlYXJDb2xvclsyXSA6IDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1szXSA/IG1fY2xlYXJDb2xv
clszXSA6IDApOwotICAgIGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAs
IDAsIDApOwotICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUp
OwotICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QlVGRkVSX0JJVDsKLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPmRlcHRoKCkpIHsKLSAgICAg
ICAgaWYgKCFjb21iaW5lZENsZWFyIHx8ICFtX2RlcHRoTWFzayB8fCAhKG1hc2sgJiBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCkpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmNs
ZWFyRGVwdGgoMS4wZik7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQlVGRkVSX0JJVDsKLSAgICAgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7Ci0g
ICAgfQotICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+c3RlbmNpbCgpKSB7Ci0gICAgICAgIGlm
IChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVG
RkVSX0JJVCkpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3Rl
bmNpbCAmIG1fc3RlbmNpbE1hc2spOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRl
eHQtPmNsZWFyU3RlbmNpbCgwKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tT
ZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4RkZGRkZGRkYpOwotICAgIH0KLSAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNsZWFyRnJh
bWVidWZmZXJzKGNsZWFyTWFzayk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZykKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7Ci0gICAgICAgIG1fY29udGV4dC0+Y2xlYXIo
Y2xlYXJNYXNrKTsKLSAgICB9Ci0KLSAgICByZXN0b3JlU3RhdGVBZnRlckNsZWFyKCk7Ci0gICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1l
YnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgIG1fbGF5ZXJDbGVhcmVkID0gdHJ1ZTsKLQotICAg
IHJldHVybiBjb21iaW5lZENsZWFyOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpCi17Ci0gICAgLy8gUmVzdG9yZSB0aGUgc3RhdGUgdGhh
dCB0aGUgY29udGV4dCBzZXQuCi0gICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCi0gICAgICAgIG1f
Y29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIG1f
Y29udGV4dC0+Y2xlYXJDb2xvcihtX2NsZWFyQ29sb3JbMF0sIG1fY2xlYXJDb2xvclsxXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGVhckNvbG9yWzJdLCBtX2NsZWFyQ29sb3JbM10p
OwotICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JNYXNrWzBdLCBtX2NvbG9yTWFza1sx
XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1syXSwgbV9jb2xvck1hc2tb
M10pOwotICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChtX2NsZWFyRGVwdGgpOwotICAgIG1fY29u
dGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsKTsKLSAgICBtX2NvbnRleHQtPnN0ZW5j
aWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCBtX3N0ZW5jaWxNYXNrKTsK
LSAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhtX2RlcHRoTWFzayk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5tYXJr
TGF5ZXJDb21wb3NpdGVkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNhbnZhcygpLT5kb2N1bWVudCgp
LnByaW50aW5nKCkpCi0gICAgICAgIGNhbnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsK
LQotICAgIC8vIFVudGlsIHRoZSBjYW52YXMgaXMgd3JpdHRlbiB0byBieSB0aGUgYXBwbGljYXRp
b24sIHRoZSBjbGVhciB0aGF0Ci0gICAgLy8gaGFwcGVuZWQgYWZ0ZXIgaXQgd2FzIGNvbXBvc2l0
ZWQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIGNvbXBvc2l0b3IuCi0gICAgaWYgKG1fY29udGV4
dC0+bGF5ZXJDb21wb3NpdGVkKCkgJiYgIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZm
ZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMo
Y2FudmFzKCktPmJ1ZmZlcigpKTsKLQotICAgICAgICBjYW52YXMoKS0+bWFrZVByZXNlbnRhdGlv
bkNvcHkoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9u
Q29weSgpOwotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAgICBpZiAoIW1fbWFya2VkQ2Fu
dmFzRGlydHkgJiYgIW1fbGF5ZXJDbGVhcmVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYW52
YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgpOwotICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxz
ZTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
Y29tbWl0KCk7Ci0gICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhj
YW52YXMoKS0+YnVmZmVyKCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7Ci0KLSAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0KLX0K
LQotUGFzc1JlZlB0cjxJbWFnZURhdGE+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7
Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21t
aXQoKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBtX2NvbnRleHQtPnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7Ci0KLSAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZykKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgp
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGlzIGlzIGFu
IGFwcHJveGltYXRpb24gYmVjYXVzZSBhdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQgbGV2ZWwgd2Ug
ZG9uJ3QKLSAgICAvLyBrbm93IGlmIHRoZSB1bmRlcmx5aW5nIEZCTyB1c2VzIHRleHR1cmVzIG9y
IHJlbmRlcmJ1ZmZlcnMuCi0gICAgR0MzRGludCBtYXhTaXplID0gc3RkOjptaW4obV9tYXhUZXh0
dXJlU2l6ZSwgbV9tYXhSZW5kZXJidWZmZXJTaXplKTsKLSAgICAvLyBMaW1pdCBkcmF3aW5nIGJ1
ZmZlciBzaXplIHRvIDRrIHRvIGF2b2lkIG1lbW9yeSBleGhhdXN0aW9uLgotICAgIGNvbnN0IGlu
dCBzaXplVXBwZXJMaW1pdCA9IDQwOTY7Ci0gICAgbWF4U2l6ZSA9IHN0ZDo6bWluKG1heFNpemUs
IHNpemVVcHBlckxpbWl0KTsKLSAgICBHQzNEaW50IG1heFdpZHRoID0gc3RkOjptaW4obWF4U2l6
ZSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pOwotICAgIEdDM0RpbnQgbWF4SGVpZ2h0ID0gc3RkOjpt
aW4obWF4U2l6ZSwgbV9tYXhWaWV3cG9ydERpbXNbMV0pOwotICAgIHdpZHRoID0gY2xhbXAod2lk
dGgsIDEsIG1heFdpZHRoKTsKLSAgICBoZWlnaHQgPSBjbGFtcChoZWlnaHQsIDEsIG1heEhlaWdo
dCk7Ci0KLSAgICBpZiAobV9uZWVkc1VwZGF0ZSkgewotICAgICAgICBSZW5kZXJCb3gqIHJlbmRl
ckJveCA9IGNhbnZhcygpLT5yZW5kZXJCb3goKTsKLSAgICAgICAgaWYgKHJlbmRlckJveCAmJiBy
ZW5kZXJCb3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKLSAgICAgICAgICAgIHJlbmRl
ckJveC0+Y29udGVudENoYW5nZWQoQ2FudmFzQ2hhbmdlZCk7Ci0gICAgICAgIG1fbmVlZHNVcGRh
dGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1hcmsgdGhlIGNh
bnZhcyBhcyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UgYnVmZmVyIHdpbGwg
YWxzbyBzdGFydCBvZmYKLSAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hlcyB3aGF0IHJlc2hh
cGUgd2lsbCBkbykuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgICAgICByZXN0b3Jl
U3RhdGVBZnRlckNsZWFyKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+cmVzaGFw
ZSh3aWR0aCwgaGVpZ2h0KTsKLQotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyhtX3RleHR1cmVVbml0c1ttX2FjdGl2
ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpKSk7Ci0gICAgbV9jb250ZXh0LT5i
aW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG9iamVjdE9y
WmVybyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpCi0gICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQo
KSkpOwotfQotCi1pbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgo
KSBjb25zdAotewotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgIHJldHVybiBtX2Ry
YXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwotfQotCi1pbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKLXsKLSAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQotICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0
KCk7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgp
LmhlaWdodCgpOwotfQotCi11bnNpZ25lZCBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaXpl
SW5CeXRlcyhHQzNEZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRGJ5dGUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoR0MzRHVieXRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9S
VDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEc2hvcnQpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1c2hv
cnQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKLSAgICAgICAgcmV0dXJuIHNp
emVvZihHQzNEaW50KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVpbnQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RmbG9hdCk7Ci0gICAgfQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAodGV4dHVyZSAtIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCA+PSBtX3RleHR1cmVVbml0cy5zaXplKCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImFj
dGl2ZVRleHR1cmUiLCAidGV4dHVyZSB1bml0IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJlIC0gR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUwOwotICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZSh0ZXh0dXJl
KTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
c2V0QWN0aXZlVGV4dHVyZVVuaXQodGV4dHVyZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciog
c2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImF0
dGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFk
ZXIiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFwcm9ncmFtLT5hdHRhY2hT
aGFkZXIoc2hhZGVyKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJhdHRhY2hTaGFkZXIiLCAic2hhZGVyIGF0dGFjaG1l
bnQgYWxyZWFkeSBoYXMgc2hhZGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9j
b250ZXh0LT5hdHRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RPclplcm8o
c2hhZGVyKSk7Ci0gICAgc2hhZGVyLT5vbkF0dGFjaGVkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImJpbmRBdHRyaWJMb2NhdGlvbiIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJiaW5kQXR0
cmliTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVT
dHJpbmcoImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZEF0dHJpYkxvY2F0aW9u
IiwgInJlc2VydmVkIHByZWZpeCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChp
bmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJiaW5kQXR0cmliTG9jYXRpb24iLCAi
aW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250
ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgbmFt
ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja09iamVjdFRvQmVCb3Vu
ZChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QsIGJvb2wmIGRl
bGV0ZWQpCi17Ci0gICAgZGVsZXRlZCA9IGZhbHNlOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAob2JqZWN0KSB7Ci0gICAg
ICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZWQgPSAhb2Jq
ZWN0LT5vYmplY3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIq
IGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZEJ1ZmZl
ciIsIGJ1ZmZlciwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkK
LSAgICAgICAgYnVmZmVyID0gMDsKLSAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0
KCkgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZEJ1ZmZl
ciIsICJidWZmZXJzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIpCi0gICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKLSAg
ICBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVG
RkVSKQotICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldEVsZW1lbnRBcnJheUJ1
ZmZlcihidWZmZXIpOwotICAgIGVsc2UgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEJ1ZmZlciIsICJpbnZhbGlkIHRhcmdl
dCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwotICAgIGlmIChidWZmZXIpCi0gICAgICAg
IGJ1ZmZlci0+c2V0VGFyZ2V0KHRhcmdldCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBi
dWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
Ym9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRGcmFtZWJ1
ZmZlciIsIGJ1ZmZlciwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRl
ZCkKLSAgICAgICAgYnVmZmVyID0gMDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEZyYW1lYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBi
dWZmZXI7Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcob2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5n
LmdldCgpKSk7Ci0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZm
ZXIpIHsKLSAgICAgICAgLy8gSW5zdGVhZCBvZiBiaW5kaW5nIGZiIDAsIGJpbmQgdGhlIGRyYXdp
bmcgYnVmZmVyLgotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8o
YnVmZmVyKSk7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgYnVmZmVyLT5zZXRIYXNFdmVyQmVl
bkJvdW5kKCk7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVy
YnVmZmVyKiByZW5kZXJCdWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91
bmQoImJpbmRSZW5kZXJidWZmZXIiLCByZW5kZXJCdWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIHJlbmRlckJ1ZmZlciA9IDA7Ci0gICAg
aWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5k
UmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gcmVuZGVyQnVmZmVyOwotICAgIG1fY29udGV4
dC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhyZW5kZXJCdWZmZXIpKTsK
LSAgICBpZiAocmVuZGVyQnVmZmVyKQotICAgICAgICByZW5kZXJCdWZmZXItPnNldEhhc0V2ZXJC
ZWVuQm91bmQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJl
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAo
IWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kVGV4dHVyZSIsIHRleHR1cmUsIGRlbGV0ZWQpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIHRleHR1cmUgPSAwOwot
ICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgpICYmIHRleHR1cmUtPmdldFRh
cmdldCgpICE9IHRhcmdldCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kVGV4dHVyZSIsICJ0ZXh0dXJlcyBjYW4g
bm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB0YXJnZXRzIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgR0MzRGludCBtYXhMZXZlbCA9IDA7Ci0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCkgewotICAgICAgICBtX3RleHR1cmVVbml0c1ttX2FjdGl2
ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nID0gdGV4dHVyZTsKLSAgICAgICAgbWF4TGV2
ZWwgPSBtX21heFRleHR1cmVMZXZlbDsKLQotICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyICYm
ICFtX2FjdGl2ZVRleHR1cmVVbml0KQotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRU
ZXh0dXJlMkRCaW5kaW5nKG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7Ci0KLSAgICB9IGVsc2UgaWYg
KHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgewotICAgICAg
ICBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRp
bmcgPSB0ZXh0dXJlOwotICAgICAgICBtYXhMZXZlbCA9IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZl
bDsKLSAgICB9IGVsc2UgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFRleHR1cmUiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwg
b2JqZWN0T3JaZXJvKHRleHR1cmUpKTsKLSAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgdGV4dHVy
ZS0+c2V0VGFyZ2V0KHRhcmdldCwgbWF4TGV2ZWwpOwotCi0gICAgLy8gTm90ZTogcHJldmlvdXNs
eSB3ZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBURVhUVVJFX1dSQVBfUgotICAgIC8v
IHJlcGVhdCBtb2RlIHRvIENMQU1QX1RPX0VER0UgZm9yIGN1YmUgbWFwIHRleHR1cmVzLCBiZWNh
dXNlIE9wZW5HTAotICAgIC8vIEVTIDIuMCBkb2Vzbid0IGV4cG9zZSB0aGlzIGZsYWcgKGEgYnVn
IGluIHRoZSBzcGVjaWZpY2F0aW9uKSBhbmQKLSAgICAvLyBvdGhlcndpc2UgdGhlIGFwcGxpY2F0
aW9uIGhhcyBubyBjb250cm9sIG92ZXIgdGhlIHNlYW1zIGluIHRoaXMKLSAgICAvLyBkaW1lbnNp
b24uIEhvd2V2ZXIsIGl0IGFwcGVhcnMgdGhhdCBzdXBwb3J0aW5nIHRoaXMgcHJvcGVybHkgb24g
YWxsCi0gICAgLy8gcGxhdGZvcm1zIGlzIGZhaXJseSBpbnZvbHZlZCAod2lsbCByZXF1aXJlIGEg
SGFzaE1hcCBmcm9tIHRleHR1cmUgSUQKLSAgICAvLyBpbiBhbGwgcG9ydHMpLCBhbmQgd2UgaGF2
ZSBub3QgaGFkIGFueSBjb21wbGFpbnRzLCBzbyB0aGUgbG9naWMgaGFzCi0gICAgLy8gYmVlbiBy
ZW1vdmVkLgotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcihHQzNE
ZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxw
aGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY29udGV4dC0+YmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1v
ZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVu
ZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPmJsZW5kRXF1YXRpb24obW9kZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0g
bW9kZUFscGhhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGVSR0IpIHx8ICF2YWxpZGF0ZUJs
ZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlQWxwaGEpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhh
KTsKLX0KLQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKEdDM0RlbnVt
IHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBzZmFjdG9y
LCBkZmFjdG9yKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKHNm
YWN0b3IsIGRmYWN0b3IpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRG
dW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNy
Y0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKLXsKLSAgICAvLyBOb3RlOiBBbHBoYSBkb2VzIG5v
dCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBhcyBSR0IuCi0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBz
cmNSR0IsIGRzdFJHQikpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRnVu
Y1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcg
bG9uZyBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKLSAgICBpZiAoIWJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmIChzaXplIDwgMCkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAi
c2l6ZSA8IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXNpemUpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJEYXRhIiwgInNpemUgPT0gMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAg
IGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHN0YXRpY19jYXN0PEdDM0RzaXplaXB0
cj4oc2l6ZSkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92
ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRh
KHRhcmdldCwgc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihzaXplKSwgdXNhZ2UpOwotICAgIGlm
IChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAg
IC8vIFRoZSBidWZmZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRv
ZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5k
aXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBH
QzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1
ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICghZGF0YSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRh
KGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRh
cmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCksIHVzYWdlKTsKLSAgICBpZiAo
bV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAv
LyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vz
bid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlz
YXNzb2NpYXRlQnVmZmVyRGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEs
IEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygi
YnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2UpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJubyBkYXRhIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJv
dW5kc0FjY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRh
dGEoZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEo
dGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsK
LSAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewot
ICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZl
ciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1
ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcg
b2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFU
SUNfRFJBVyk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAob2Zm
c2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICgh
YnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9m
ZnNldCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiBy
YW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9j
b250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQt
PmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBk
YXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmRhdGEoKSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92
ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlclN1
YkRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRo
ZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1
ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZm
ZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJW
aWV3KiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBX
ZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVy
U3ViRGF0YSIsIHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChvZmZzZXQgPCAwKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
YnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgPCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVk
T25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0
ZUJ1ZmZlclN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YSkpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0
YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgo
KSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEgZnVu
Y3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0
IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEo
KTsKLSAgICB9Ci19Ci0KLUdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIsICJpbnZhbGlkIHRhcmdldCIp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGlu
ZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFOwotICAgIGNvbnN0IGNoYXIqIHJl
YXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBHQzNEZW51bSByZXN1bHQgPSBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+Y2hlY2tTdGF0dXMoJnJlYXNvbik7Ci0gICAgaWYgKHJlc3Vs
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAg
cHJpbnRHTFdhcm5pbmdUb0NvbnNvbGUoImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCByZWFzb24p
OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXN1bHQgPSBtX2NvbnRleHQt
PmNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChtYXNrICYgfihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQlVGRkVSX0JJVCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjbGVhciIsICJpbnZhbGlkIG1hc2siKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5j
b21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVy
QmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCks
ICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNsZWFyIiwgcmVhc29uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWNsZWFySWZDb21wb3NpdGVkKG1hc2spKQotICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyKG1hc2spOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xvcihHQzNEZmxvYXQgciwg
R0MzRGZsb2F0IGcsIEdDM0RmbG9hdCBiLCBHQzNEZmxvYXQgYSkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHN0ZDo6aXNuYW4o
cikpCi0gICAgICAgIHIgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFuKGcpKQotICAgICAgICBnID0g
MDsKLSAgICBpZiAoc3RkOjppc25hbihiKSkKLSAgICAgICAgYiA9IDA7Ci0gICAgaWYgKHN0ZDo6
aXNuYW4oYSkpCi0gICAgICAgIGEgPSAxOwotICAgIG1fY2xlYXJDb2xvclswXSA9IHI7Ci0gICAg
bV9jbGVhckNvbG9yWzFdID0gZzsKLSAgICBtX2NsZWFyQ29sb3JbMl0gPSBiOwotICAgIG1fY2xl
YXJDb2xvclszXSA9IGE7Ci0gICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKHIsIGcsIGIsIGEpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJEZXB0aChHQzNEZmxvYXQgZGVw
dGgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY2xlYXJEZXB0aCA9IGRlcHRoOwotICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChk
ZXB0aCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwoR0Mz
RGludCBzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2NsZWFyU3RlbmNpbCA9IHM7Ci0gICAgbV9jb250ZXh0LT5jbGVhclN0ZW5j
aWwocyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2soR0MzRGJv
b2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xl
YW4gYWxwaGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fY29sb3JNYXNrWzBdID0gcmVkOwotICAgIG1fY29sb3JNYXNrWzFdID0g
Z3JlZW47Ci0gICAgbV9jb2xvck1hc2tbMl0gPSBibHVlOwotICAgIG1fY29sb3JNYXNrWzNdID0g
YWxwaGE7Ci0gICAgbV9jb250ZXh0LT5jb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlcihXZWJHTFNo
YWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImNvbXBpbGVTaGFkZXIiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZXh0LT5jb21waWxlU2hhZGVyKG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBHQzNEaW50IHZh
bHVlOwotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIEdy
YXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUywgJnZhbHVlKTsKLSAgICBzaGFkZXItPnNl
dFZhbGlkKHZhbHVlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
QXJyYXlCdWZmZXJWaWV3KiBkYXRhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21w
cmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoYm9yZGVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleElt
YWdlMkQiLCAiYm9yZGVyIG5vdCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIs
IHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoImNvbXByZXNz
ZWRUZXhJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGRhdGEpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRl
eCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkgewotICAg
ICAgICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAy
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9jb250ZXh0
LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmNvbXBy
ZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LAotICAgICAgICBib3JkZXIsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJl
c3MoKSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCkpIHsKLSAgICAgICAgLy8gVGhlIGNvbXByZXNzZWRUZXhJbWFnZTJEIGZ1bmN0aW9uIGZhaWxl
ZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBmb3IgdGhp
cyBsZXZlbC4KLSAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSk7Ci0gICAgdGV4LT5zZXRDb21wcmVzc2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRh
dGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
IiwgdGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlQ29t
cHJlc3NlZFRleEZvcm1hdChmb3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIs
ICJpbnZhbGlkIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFs
aWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR0xU
ZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChmb3JtYXQgIT0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJmb3JtYXQgZG9lcyBub3QgbWF0
Y2ggdGV4dHVyZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
dmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucygiY29tcHJlc3NlZFRleFN1YkltYWdl
MkQiLCB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHRleCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdyYXBoaWNzQ29udGV4dDNEKCktPmNv
bXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwot
ICAgIHRleC0+c2V0Q29tcHJlc3NlZCgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIGZvcm1hdCkKLXsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0
c0J5Rm9ybWF0KGZvcm1hdCkgJiAoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQg
fCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImZvcm1hdCBjYW4gbm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0byIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJ
bWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5
VGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdM
VGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0
YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFp
c1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9y
bWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRl
eEltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAm
JiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFn
ZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFj
Y2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCByZWFzb24pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3Vy
Y2VTYWZlKCkpIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9k
cmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAg
IG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU2Nv
cGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBw
ZWRZOwotICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwotICAg
ICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJX
aWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZ
LCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4
dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgbV91bnBhY2tBbGlnbm1lbnQpOwotICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+
IDAgJiYgY2xpcHBlZEhlaWdodCA+IDApIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNv
cHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgs
IGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7
Ci0gICAgfQotICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRl
LCBub25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCi0gICAgdGV4LT5zZXRMZXZl
bEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5j
TGV2ZWwoImNvcHlUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlU
ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQs
IHlvZmZzZXQpIHx8ICF2YWxpZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhl
aWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBCZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMg
aW4gdGhlIHJhbmdlLCBjaGVjayBpZiBvdmVyZmxvdyBoYXBwZW5zIGZpcnN0LgotICAgIGlmICh4
b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRl
eFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8
fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJyZWN0YW5nbGUgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRl
eEZvcm1hdCgiY29weVRleFN1YkltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9u
VmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGli
bGUgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVh
c29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNE
KCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJj
b3B5VGV4U3ViSW1hZ2UyRCIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Y2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgewotICAgICAg
ICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCks
IG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVk
WTsKLSAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKLSAgICAg
ICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lk
dGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwg
JmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7Ci0gICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwotICAgICAgICAg
ICAgR0MzRGVudW0gdHlwZSA9IHRleC0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25lZCBjaGFyW10+IHplcm87Ci0gICAgICAgICAgICBp
ZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemU7
Ci0gICAgICAgICAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFn
ZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1l
bnQsICZzaXplLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KGVycm9yLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB6
ZXJvID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KHNpemUpOwotICAgICAgICAg
ICAgICAgIGlmICghemVybykgewotICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwg
Im91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6
ZXJvLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRI
ZWlnaHQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBi
aW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7
Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFggLSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBw
ZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIo
bV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAg
ICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1QYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1
ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBvID0gV2ViR0xCdWZmZXI6OmNy
ZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87
Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+
IG8gPSBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkQ29udGV4dE9iamVj
dChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRy
PFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNo
YXJlZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJH
TFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4gbyA9IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOwot
ICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1Jl
ZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5k
ZXJidWZmZXIoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdlYkdM
UmVuZGVyYnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkp
OwotICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICh0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfU0hBREVSICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QUdNRU5UX1NIQURFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiY3JlYXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUi
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkdMU2hh
ZGVyPiBvID0gV2ViR0xTaGFkZXI6OmNyZWF0ZSh0aGlzLCB0eXBlKTsKLSAgICBhZGRTaGFyZWRP
YmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1v
ZGUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlT2JqZWN0KFdlYkdM
T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
b2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFvYmplY3QtPnZhbGlkYXRl
KGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMg
bm90IGJlbG9uZyB0byB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAob2JqZWN0LT5vYmplY3QoKSkKLSAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNz
IGluIGNvbnRleHQgaGVyZSBiZWNhdXNlIHdlIHdhbnQKLSAgICAgICAgLy8gdGhpbmdzIGluIHRo
aXMgY29udGV4dCB1bmJvdW5kLgotICAgICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGlj
c0NvbnRleHQzRCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICgh
ZGVsZXRlT2JqZWN0KGJ1ZmZlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9ib3VuZEFy
cmF5QnVmZmVyID09IGJ1ZmZlcikKLSAgICAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gMDsKLQot
ICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+dW5iaW5kQnVmZmVyKGJ1ZmZlcik7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1l
YnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZl
cikpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpIHsKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgICAgICBp
ZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZy
YW1lYnVmZmVyQmluZGluZygwKTsKLSAgICAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJh
bWVidWZmZXIgaGVyZSB0byBiaW5kIGJhY2sgdG8gaW50ZXJuYWwgZmJvLgotICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAw
KTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKLXsKLSAgICBkZWxldGVPYmplY3QocHJvZ3JhbSk7Ci0g
ICAgLy8gV2UgZG9uJ3QgcmVzZXQgbV9jdXJyZW50UHJvZ3JhbSB0byAwIGhlcmUgYmVjYXVzZSB0
aGUgZGVsZXRpb24gb2YgdGhlCi0gICAgLy8gY3VycmVudCBwcm9ncmFtIGlzIGRlbGF5ZWQuCi19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xS
ZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChyZW5k
ZXJidWZmZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7Ci0g
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGlu
Zy0+cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIq
IHNoYWRlcikKLXsKLSAgICBkZWxldGVPYmplY3Qoc2hhZGVyKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQotewot
ICAgIGlmICghZGVsZXRlT2JqZWN0KHRleHR1cmUpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nKQotICAg
ICAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmluZGluZyA9IG51bGxwdHI7Ci0g
ICAgICAgIGlmICh0ZXh0dXJlID09IG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmlu
ZGluZykKLSAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGlu
ZyA9IG51bGxwdHI7Ci0gICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAg
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1
ZmZlcih0ZXh0dXJlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVu
YyhHQzNEZW51bSBmdW5jKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmRlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2RlcHRoTWFzayA9IGZsYWc7Ci0gICAgbV9jb250ZXh0LT5kZXB0aE1hc2soZmxhZyk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwg
R0MzRGZsb2F0IHpGYXIpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICh6TmVhciA+IHpGYXIpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVwdGhSYW5n
ZSIsICJ6TmVhciA+IHpGYXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRl
eHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNo
YWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRh
Y2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVy
Iiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hh
ZGVyKHNoYWRlcikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGV0YWNoU2hhZGVyIiwgInNoYWRlciBub3QgYXR0YWNo
ZWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRl
cihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFk
ZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9URVNUKSB7Ci0gICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgYXBw
bHlTdGVuY2lsVGVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JFbmFi
bGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOwotICAg
IH0KLSAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4
VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBv
dXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwotICAgIHN0YXRlLmVuYWJs
ZWQgPSBmYWxzZTsKLQotICAgIGlmIChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQot
ICAgICAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0K
LWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0Mz
RHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBS
ZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgCi0gICAgaWYgKCFlbGVtZW50
QXJyYXlCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChvZmZzZXQgPCAw
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UKSB7Ci0gICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBpbnQgYXJy
YXksIG9mZnNldCBtdXN0IGJlIGRpdmlzaWJsZSBieSA0IGZvciBhbGlnbm1lbnQgcmVhc29ucy4K
LSAgICAgICAgaWYgKG9mZnNldCAlIDQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICBvZmZzZXQg
Lz0gNDsKLQotICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpIC8gNDsKLSAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zm
c2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKLSAgICAgICAgLy8gRm9yIGFuIHVu
c2lnbmVkIHNob3J0IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgMiBmb3IgYWxp
Z25tZW50IHJlYXNvbnMuCi0gICAgICAgIGlmIChvZmZzZXQgJSAyKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4K
LSAgICAgICAgb2Zmc2V0IC89IDI7Ci0KLSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50
QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDI7Ci0gICAgICAgIGlmIChvZmZzZXQgPiBuIHx8
IGNvdW50ID4gbiAtIG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAg
ICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAg
ICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0
eXBlLCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKLXsKLSAgICAvLyBQZXJmb3JtcyBj
b25zZXJ2YXRpdmUgdmFsaWRhdGlvbiBieSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgotICAg
IC8vIHRoZSBnaXZlbiB0eXBlIHBlciBlbGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRo
ZSBib3VuZAotICAgIC8vIGFycmF5IGJ1ZmZlcnMgaGF2ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0
aXNmeSB0aGF0IG1heGltdW0KLSAgICAvLyBpbmRleCwgc2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXIt
ZHJhdy1jYWxsIGl0ZXJhdGlvbiBpbgotICAgIC8vIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2Uu
Ci0gICAgCi0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotCi0gICAgaWYg
KCFlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDM0Rz
aXplaXB0ciBudW1FbGVtZW50cyA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwot
ICAgIC8vIFRoZSBjYXNlIGNvdW50PT0wIGlzIGFscmVhZHkgZGVhbHQgd2l0aCBpbiBkcmF3RWxl
bWVudHMgYmVmb3JlIHZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZS4KLSAgICBpZiAoIW51
bUVsZW1lbnRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgQXJyYXlCdWZmZXIq
IGJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAg
QVNTRVJUKGJ1ZmZlcik7Ci0KLSAgICBpbnQgbWF4SW5kZXggPSBlbGVtZW50QXJyYXlCdWZmZXIt
PmdldENhY2hlZE1heEluZGV4KHR5cGUpOwotICAgIGlmIChtYXhJbmRleCA8IDApIHsKLSAgICAg
ICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3Ig
dGhlIGdpdmVuIHR5cGUgb2YgaW5kZXguCi0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7Ci0gICAgICAgICAgICBj
b25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXIt
PmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVs
ZW1lbnRzOyBpKyspCi0gICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRl
eCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDogewotICAg
ICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAgICAgICAg
Y29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZm
ZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51
bUVsZW1lbnRzOyBpKyspCi0gICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJ
bmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6IHsKLSAg
ICAgICAgICAgIGlmICghbV9vZXNFbGVtZW50SW5kZXhVaW50KQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdWludCk7
Ci0gICAgICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1
aW50Kj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9
IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3Rk
OjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBlbGVtZW50QXJyYXlCdWZmZXItPnNldENhY2hlZE1heElu
ZGV4KHR5cGUsIG1heEluZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAobWF4SW5kZXggPj0gMCkgewot
ICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcXVpcmVkIGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRo
YW4gdGhlIG1heGltdW0KLSAgICAgICAgLy8gaW5kZXggdGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgot
ICAgICAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gbWF4SW5kZXggKyAxOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1Jl
cXVpcmVkKQotewotICAgIEFTU0VSVChjb3VudCA+PSAwICYmIG9mZnNldCA+PSAwKTsKLSAgICB1
bnNpZ25lZCBsYXN0SW5kZXggPSAwOwotICAgIAotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxl
bWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJy
YXlCdWZmZXIoKTsKLQotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIG51bUVsZW1lbnRzUmVxdWly
ZWQgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWVsZW1lbnRB
cnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHVuc2lnbmVkIGxvbmcgdW9mZnNldCA9IG9mZnNldDsKLSAgICB1bnNpZ25lZCBsb25n
IG4gPSBjb3VudDsKLQotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9JTlQpIHsKLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAg
ICAgICB1b2Zmc2V0IC89IHNpemVvZihHQzNEdWludCk7Ci0gICAgICAgIGNvbnN0IEdDM0R1aW50
KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVpbnQqPihlbGVtZW50QXJyYXlCdWZmZXItPmVs
ZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4t
LSA+IDApIHsKLSAgICAgICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAg
ICBsYXN0SW5kZXggPSAqcDsKLSAgICAgICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKLSAgICAg
ICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89
IHNpemVvZihHQzNEdXNob3J0KTsKLSAgICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJh
eUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsK
LSAgICAgICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5k
ZXggPSAqcDsKLSAgICAgICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBjb25zdCBH
QzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihlbGVtZW50QXJyYXlC
dWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNldDsKLSAgICAgICAg
d2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKLSAgICAg
ICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAgICAgICAgICsrcDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIFRoZW4gc2V0IHRoZSBsYXN0IGluZGV4IGluIHRoZSBpbmRleCBhcnJh
eSBhbmQgbWFrZSBzdXJlIGl0IGlzIHZhbGlkLgotICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBs
YXN0SW5kZXggKyAxOwotICAgIHJldHVybiBudW1FbGVtZW50c1JlcXVpcmVkID4gMDsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNp
Z25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50KQotewotICAgIGlmICgh
bV9jdXJyZW50UHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTG9vayBp
biBlYWNoIGVuYWJsZWQgdmVydGV4IGF0dHJpYiBhbmQgY2hlY2sgaWYgdGhleSd2ZSBiZWVuIGJv
dW5kIHRvIGEgYnVmZmVyLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21heFZlcnRl
eEF0dHJpYnM7ICsraSkgewotICAgICAgICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+
Z2V0VmVydGV4QXR0cmliU3RhdGUoaSkudmFsaWRhdGVCaW5kaW5nKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA8PSAwKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotCi0gICAgLy8gTG9vayBpbiBlYWNoIGNvbnN1bWVkIHZlcnRleCBh
dHRyaWIgKGJ5IHRoZSBjdXJyZW50IHByb2dyYW0pLgotICAgIGJvb2wgc2F3Tm9uSW5zdGFuY2Vk
QXR0cmliID0gZmFsc2U7Ci0gICAgYm9vbCBzYXdFbmFibGVkQXR0cmliID0gZmFsc2U7Ci0gICAg
aW50IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyA9IG1fY3VycmVudFByb2dyYW0tPm51bUFjdGl2
ZUF0dHJpYkxvY2F0aW9ucygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQWN0aXZlQXR0
cmliTG9jYXRpb25zOyArK2kpIHsKLSAgICAgICAgaW50IGxvYyA9IG1fY3VycmVudFByb2dyYW0t
PmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGkpOwotICAgICAgICBpZiAobG9jID49IDAgJiYgbG9j
IDwgc3RhdGljX2Nhc3Q8aW50PihtX21heFZlcnRleEF0dHJpYnMpKSB7Ci0gICAgICAgICAgICBj
b25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUg
PSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGxvYyk7Ci0g
ICAgICAgICAgICBpZiAoc3RhdGUuZW5hYmxlZCkgewotICAgICAgICAgICAgICAgIHNhd0VuYWJs
ZWRBdHRyaWIgPSB0cnVlOwotICAgICAgICAgICAgICAgIC8vIEF2b2lkIG9mZi1ieS1vbmUgZXJy
b3JzIGluIG51bUVsZW1lbnRzIGNvbXB1dGF0aW9uLgotICAgICAgICAgICAgICAgIC8vIEZvciB0
aGUgbGFzdCBlbGVtZW50LCB3ZSB3aWxsIG9ubHkgdG91Y2ggdGhlIGRhdGEgZm9yIHRoZQotICAg
ICAgICAgICAgICAgIC8vIGVsZW1lbnQgYW5kIG5vdGhpbmcgYmV5b25kIGl0LgotICAgICAgICAg
ICAgICAgIGludCBieXRlc1JlbWFpbmluZyA9IHN0YXRpY19jYXN0PGludD4oc3RhdGUuYnVmZmVy
QmluZGluZy0+Ynl0ZUxlbmd0aCgpIC0gc3RhdGUub2Zmc2V0KTsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN0YXRlLnN0
cmlkZSA+IDApOwotICAgICAgICAgICAgICAgIGlmIChieXRlc1JlbWFpbmluZyA+PSBzdGF0ZS5i
eXRlc1BlckVsZW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIG51bUVsZW1lbnRzID0gMSArIChi
eXRlc1JlbWFpbmluZyAtIHN0YXRlLmJ5dGVzUGVyRWxlbWVudCkgLyBzdGF0ZS5zdHJpZGU7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5kaXZpc29yKQotICAgICAgICAgICAgICAgICAgICBz
YXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICgoIXN0YXRl
LmRpdmlzb3IgJiYgZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpIHx8IChzdGF0ZS5kaXZpc29y
ICYmIHByaW1pdGl2ZUNvdW50ID4gbnVtRWxlbWVudHMpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IXNhd05vbkluc3RhbmNlZEF0dHJpYiAmJiBzYXdFbmFibGVkQXR0cmliKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJH
TE9iamVjdCogb2JqZWN0KQotewotICAgIGlmICghb2JqZWN0IHx8ICFvYmplY3QtPm9iamVjdCgp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBvYmplY3Qgb3Igb2JqZWN0IGRlbGV0ZWQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29u
dGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IGRvZXMg
bm90IGJlbG9uZyB0byB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUs
IEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1
bmN0aW9uTmFtZSwgbW9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghdmFs
aWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25OYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGZpcnN0IDwgMCB8fCBjb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
ImZpcnN0IG9yIGNvdW50IDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKCFjb3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChwcmltY291bnQgPCAwKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJwcmltY291bnQgPCAwIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewot
ICAgICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAgICAg
ICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkRmlyc3QoZmlyc3QpOwot
ICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291
bnQpOwotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkU3Vt
ID0gY2hlY2tlZEZpcnN0ICsgY2hlY2tlZENvdW50OwotICAgICAgICBDaGVja2VkPEdDM0RpbnQs
IFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJpbUNvdW50KHByaW1jb3VudCk7Ci0gICAgICAgIGlm
IChjaGVja2VkU3VtLmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbUNvdW50Lmhhc092ZXJm
bG93ZWQoKSB8fCAhdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKGNoZWNrZWRTdW0udW5zYWZlR2V0
KCksIGNoZWNrZWRQcmltQ291bnQudW5zYWZlR2V0KCkpKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
IXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcygwKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJhdHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0bHkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1
ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJj
ZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJl
YXNvbik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9k
ZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRy
YXdBcnJheXMiLCBtb2RlLCBmaXJzdCwgY291bnQsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBjbGVhcklmQ29tcG9zaXRlZCgpOwotCi0gICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVk
ID0gZmFsc2U7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHZlcnRleEF0
dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEp
OwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29t
cGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgdHJ1ZSk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlz
KG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCkKLSAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0
cmliMFNpbXVsYXRpb24oKTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAg
IGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0FycmF5cyIsIGZhbHNlKTsKLSAgICBtYXJr
Q29udGV4dENoYW5nZWQoKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwg
R0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25l
ZCYgbnVtRWxlbWVudHMpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVEcmF3TW9kZShmdW5jdGlvbk5hbWUsIG1vZGUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGZ1bmN0aW9uTmFtZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAgICAgICAgaWYgKG1fb2VzRWxlbWVudEluZGV4VWludCkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGNvdW50
IDwgMCB8fCBvZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJjb3VudCBvciBvZmZzZXQg
PCAwIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvdW50KSB7
Ci0gICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJBWV9CVUZG
RVIgYm91bmQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3Vy
ZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCi0gICAgICAgIGlmICghdmFsaWRhdGVF
bGVtZW50QXJyYXlTaXplKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMg
Zm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJBWV9CVUZGRVIiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWNvdW50KQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBl
LCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cykp
IHsKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlw
ZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMpKSB7Ci0gICAgICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmICghdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3Qg
Y2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNz
Q29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlw
ZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLQotICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKLSAgICBpZiAoIXZhbGlk
YXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHMiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0
LCBudW1FbGVtZW50cykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVk
KCk7Ci0KLSAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAg
ICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8
R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpOwotICAgICAgICB2ZXJ0ZXhBdHRyaWIw
U2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKLSAgICB9Ci0g
ICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0
ZW5lc3MoImRyYXdFbGVtZW50cyIsIHRydWUpOwotICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRz
KG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLSAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAg
ICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KCJkcmF3RWxlbWVudHMiLCBmYWxzZSk7Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5h
YmxlIiwgY2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewotICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsK
LSAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBt
X3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5h
YmxlZCk7Ci0gICAgfQotICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4
ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5Iiwg
ImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0gICAgc3Rh
dGUuZW5hYmxlZCA9IHRydWU7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fY29udGV4dC0+ZmluaXNoKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpm
bHVzaCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fY29udGV4dC0+Zmx1c2goKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
YXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZl
ciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJG
dW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1l
bnQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChi
dWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZy
b20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3Qg
YWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQK
LSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9m
IHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJPLgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
fHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJv
KGJ1ZmZlcik7Ci0gICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FU
VEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
YnVmZmVyT2JqZWN0KTsKLSAgICB9Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFj
aG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7Ci0gICAgYXBwbHlT
dGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZy
YW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChsZXZlbCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5v
dCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgIXRleHR1
cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZl
clRleHR1cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1
bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1l
bnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0g
ICAgLy8gRkJPLgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJu
byBmcmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKLSAgICBz
d2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0
ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4
dHVyZU9iamVjdCwgbGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZm
ZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3Qs
IGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4
dHVyZU9iamVjdCwgbGV2ZWwpOwotICAgIH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0
QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlLCBsZXZlbCk7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZnJv
bnRGYWNlKG1vZGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVN
aXBtYXAoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4
dHVyZUJpbmRpbmcoImdlbmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0
ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBu
b3QgYWxsIHRoZSBzYW1lIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29t
cHJlc3NlZCB0ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAyOgotICAgIGlmICh0
ZXgtPmlzQ29tcHJlc3NlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0
byBnZW5lcmF0ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0
ZU1pcG1hcCIsIHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIGdlbmVyYXRlTWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWlu
RmlsdGVyIGlzIG5vdCBORUFSRVNUX01JUE1BUF9MSU5FQVIKLSAgICAvLyBvbiBNYWMuICBSZW1v
dmUgdGhlIGhhY2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCi0jaWYgT1MoREFSV0lO
KQotICAgIGJvb2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5n
ZXRNaW5GaWx0ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFS
KSB7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01J
UE1BUF9MSU5FQVIpOwotICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7Ci0gICAg
fQotI2VuZGlmCi0gICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotI2lmIE9T
KERBUldJTikKLSAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9G
SUxURVIsIHRleC0+Z2V0TWluRmlsdGVyKCkpOwotI2VuZGlmCi0gICAgdGV4LT5nZW5lcmF0ZU1p
cG1hcExldmVsSW5mbygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KCJnZXRBY3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRy
aWIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6
ICVzIiwgaW5kZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKLQotICAgIHJldHVybiBXZWJH
TEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0K
LQotUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZv
cm0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwot
ICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgaW5kZXgsIGluZm8pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkKLSAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5l
bmRzV2l0aCgiWzBdIikpCi0gICAgICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKLQot
ICAgIExPRyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwg
aW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6
Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwotfQotCi1ib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIHNoYWRlck9iamVjdHMuY2xl
YXIoKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdM
T2JqZWN0KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZVtdID0gewotICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQUdNRU5UX1NIQURFUgotICAgIH07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emVvZihzaGFkZXJUeXBlKSAvIHNpemVvZihHQzNEZW51bSk7ICsraSkgewotICAgICAgICBXZWJH
TFNoYWRlciogc2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtp
XSk7Ci0gICAgICAgIGlmIChzaGFkZXIpCi0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVu
ZChzaGFkZXIpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0MzRGludCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0g
ICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0
dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlk
YXRlU3RyaW5nKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gLTE7
Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAg
ICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2Nh
dGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0K
LSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJv
Z3JhbSksIG5hbWUpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYg
KHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBh
cmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgfQotCi0gICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJf
U0laRSAmJiBwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUp
OwotICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCi0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdM
Q29udGV4dEF0dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJp
YnV0ZXMoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJH
TENvbnRleHRBdHRyaWJ1dGVzIG9iamVjdCB0bwotICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJv
bSBtdXRhdGluZyBhbnkgY2FjaGVkIHZlcnNpb24uCi0KLSAgICAvLyBBbHNvLCB3ZSBuZWVkIHRv
IGVuZm9yY2UgcmVxdWVzdGVkIHZhbHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAotICAgIC8vIGFu
ZCBzdGVuY2lsLCByZWdhcmRsZXNzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5n
Ci0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KLSAgICBSZWZQdHI8
V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXM6OmNyZWF0ZShtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOwotICAgIGlmICgh
bV9hdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7
Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgYXR0cmlidXRlcy0+c2V0
U3RlbmNpbChmYWxzZSk7Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBU
aGUgRHJhd2luZ0J1ZmZlciBvYnRhaW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250
ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCksCi0gICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBp
dHMgb3duIGRldGVybWluYXRpb24gb2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRl
ZC4KLSAgICAgICAgYXR0cmlidXRlcy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVs
dGlzYW1wbGUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKLX0K
LQotR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYg
KG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dDNEOjpOT19FUlJPUjsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwotfQot
Ci1XZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKLSAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xv
ZCIpKSkgewotICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxPRCkgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9zaGFk
ZXJfdGV4dHVyZV9sb2QiKTsKLSAgICAgICAgICAgIG1fZXh0U2hhZGVyVGV4dHVyZUxPRCA9IHN0
ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsKLSAgICB9Ci0gICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgewotICAgICAgICBpZiAoIW1f
ZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljIik7Ci0gICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyA9IHN0
ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPih0aGlzKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuZ2V0KCk7
Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBv
cnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgewotICAgICAgICBpZiAoIW1fb2Vz
U3RhbmRhcmREZXJpdmF0aXZlcykgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAg
ICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNT
dGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9v
ZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKSB7Ci0gICAg
ICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpOwotICAg
ICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVG
bG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0
LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0
dXJlX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpIHsKLSAgICAgICAgaWYg
KCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIp
OwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQotICAgICAgICAmJiBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXQiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdCkgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKTsKLSAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdCA9IHN0
ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIp
Ci0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VT
X3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVy
ZUhhbGZGbG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7Ci0g
ICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQotICAgICAg
ICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhf
YXJyYXlfb2JqZWN0IikpIHsKLSAgICAgICAgaWYgKCFtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgi
R0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKLSAgICAgICAgICAgIG1fb2VzVmVydGV4QXJy
YXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5T2JqZWN0Pih0aGlzKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKTsK
LSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfZWxlbWVudF9pbmRl
eF91aW50IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKLSAgICAgICAgaWYgKCFtX29lc0VsZW1l
bnRJbmRleFVpbnQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5l
bnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7Ci0gICAgICAgICAgICBt
X29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU0VsZW1lbnRJbmRleFVp
bnQ+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc0VsZW1lbnRJbmRleFVp
bnQuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xf
bG9zZV9jb250ZXh0IikpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsTG9zZUNvbnRleHQpCi0gICAg
ICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMTG9zZUNv
bnRleHQ+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VDb250ZXh0LmdldCgpOwot
ICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29t
cHJlc3NlZF90ZXh0dXJlX2F0YyIpKQotICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVBVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMgPSBzdGQ6
Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRoaXMpOwotICAgICAgICBy
ZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOwotICAgIH0KLSAgICBpZiAo
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJl
X3B2cnRjIikpCi0gICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9y
dGVkKHRoaXMpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMp
Ci0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9IHN0ZDo6bWFrZV91
bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsKLSAgICAgICAgcmV0dXJu
IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIikKLSAg
ICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkgewot
ICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMpCi0gICAgICAgICAgICBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7Ci0gICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQotICAgICAgICAmJiBXZWJHTERlcHRoVGV4dHVyZTo6
c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbERl
cHRoVGV4dHVyZSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVu
c3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsKLSAgICAgICAgICAgIG1f
d2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVwdGhUZXh0dXJlPih0
aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV93ZWJnbERlcHRoVGV4dHVyZS5nZXQo
KTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kcmF3X2J1
ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKLSAgICAgICAgaWYgKCFtX3dlYmds
RHJhd0J1ZmZlcnMpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5l
bnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7Ci0gICAgICAgICAgICBtX3dlYmds
RHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1ZmZlcnM+KHRoaXMpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZlcnMuZ2V0KCk7Ci0gICAg
fQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVfaW5zdGFuY2VkX2FycmF5
cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAg
aWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIp
OwotICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0ZDo6bWFrZV91bmlxdWU8
QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBt
X2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOwotICAgIH0KLSAgICBpZiAoYWxsb3dQcml2aWxl
Z2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
V0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fd2ViZ2xE
ZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAgICAgICAgICAgICBtX3dlYmdsRGVidWdSZW5kZXJlcklu
Zm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlckluZm8+KHRoaXMpOwotICAg
ICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5nZXQoKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlYnVnX3NoYWRl
cnMiKQotICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgewotICAgICAgICAgICAgaWYg
KCFtX3dlYmdsRGVidWdTaGFkZXJzKQotICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1NoYWRl
cnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0aGlzKTsKLSAgICAgICAg
ICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOwotCi0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVj
dCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2JqZWN0KGF0dGFjaG1lbnQp
OwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkKLSAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOwotICAgICAgICAvLyBP
cGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0gaW4gdGhpcyBjYXNlLCB3aGlsZSBk
ZXNrdG9wIEdMCi0gICAgICAgIC8vIHNwZWNpZmllcyBJTlZBTElEX09QRVJBVElPTi4KLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
b2JqZWN0LT5pc1RleHR1cmUoKSB8fCBvYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpOwotICAgIGlm
IChvYmplY3QtPmlzVGV4dHVyZSgpKSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
VFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9OQU1FOgotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4ocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihv
YmplY3QpKSk7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0
dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8odmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
IGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUik7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7Ci0gICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY29uc3QgaW50
IGludFplcm8gPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVf
V0lEVEhfUkFOR0U6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRToKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoKLSAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0
cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQ6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICAgICAgcmV0
dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RT
VF9SR0I6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0gICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
X1NSQ19BTFBIQToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJMVUVfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJv
b2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
VWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1f
Y29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNVTExfRkFDRToKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgotICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50UHJvZ3JhbSkpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oaW50WmVybyk7Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAg
ICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0ZVTkM6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklU
RU1BU0s6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQ
dHI8V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCkpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5E
SU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVF9GQUNFOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgot
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Ci0g
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6
Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhf
QVRUUklCUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVM6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRT
OgotICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8K
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZB
Q1RPUjoKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgotICAgICAgICByZXR1cm4g
Z2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9MWUdPTl9PRkZTRVRfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6Ci0gICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NS
ZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKFN0cmluZygiV2ViS2l0IFdlYkdMIikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRV9CVUZGRVJTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAg
ICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0Rmxv
YXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6
Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0
U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIiki
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAg
ICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFD
S19QQVNTX0RFUFRIX1BBU1M6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoK
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6
Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVu
Y2lsKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgotICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BB
U1NfREVQVEhfRkFJTDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFT
UzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9U
RVNUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgotICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6
Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX0FMSUdOTUVOVDoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhTdHJpbmcoIldlYktpdCIpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJT
SU9OOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRl
eHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJ
bnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5U
X1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMK
LSAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKLSAgICAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9E
RVJJVkFUSVZFX0hJTlRfT0VTKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6
VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJl
ckluZm8pCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3Ry
aW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOwotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJs
ZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgotICAgICAgICBpZiAobV93ZWJn
bERlYnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2Nv
bnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKSk7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJh
bWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5m
byBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QKLSAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKLSAgICAg
ICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7Ci0gICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxl
ZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljCi0gICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykK
LSAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6
Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBl
bmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBC
RUdJTgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpOwotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxl
ZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJz
KQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1
ZmZlcnMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYm
IHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAgICAgJiYg
cG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBf
RVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUg
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5n
ZXREcmF3QnVmZmVyKHBuYW1lKTsKLSAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1
ZmZlcgotICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3Jh
bVBhcmFtZXRlciIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0K
LSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQoKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkFMSURBVEVfU1RBVFVTOgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RP
clplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TElOS19TVEFUVVM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0
TGlua1N0YXR1cygpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFE
RVJTOgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3Jh
bSksIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6Ci0gICAgICAgIG1fY29udGV4dC0+
Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5h
bWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotU3RyaW5nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkp
Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQt
PmdldFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSkpOwotfQotCi1XZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAi
aW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0K
LSAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVu
ZGVyYnVmZmVyIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9
Ci0KLSAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCi0gICAgICAgICYmICFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkgewotICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkKCkpOwotICAgICAgICBpbnQgdmFsdWUgPSAwOwotICAgICAgICBzd2l0Y2ggKHBu
YW1lKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURU
SDoKLSAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9IRUlHSFQ6Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmlu
ZGluZy0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAgICB2YWx1
ZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDI0OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9TVEVOQ0lMX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDg7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVS
TkFMX0ZPUk1BVDoKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIH0KLQotICAgIEdDM0RpbnQgdmFsdWUgPSAw
OwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfV0lEVEg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
X0hFSUdIVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJ
WkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgotICAgICAgICBt
X2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgp
KTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0K
LX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1l
dGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRl
cikpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0g
MDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVM
RVRFX1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRl
ZCgpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKLSAgICAg
ICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2
YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFs
dWUpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKLSAgICAgICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pih2YWx1ZSkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
fQotfQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xv
ZyIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVs
bChtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKLX0K
LQotUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0Mz
RGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfU0hBREVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QUdNRU5UX1NIQURFUjoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRl
clByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNRURJVU1fSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hf
SU5UOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9u
Rm9ybWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKLSAgICBHQzNEaW50
IHByZWNpc2lvbiA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQo
c2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIHJldHVy
biBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwg
cHJlY2lzaW9uKTsKLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hh
ZGVyU291cmNlIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1
cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQotewotICAgIFZlY3Rv
cjxTdHJpbmc+IHJlc3VsdDsKLQotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24p
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9hdCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKQotICAgICAg
ICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTsKLSAgICBpZiAobV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0IikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsK
LSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpKQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICBpZiAobV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9k
IikgfHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVy
X3RleHR1cmVfbG9kIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9zaGFkZXJfdGV4dHVy
ZV9sb2QiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOwotICAgIGlmIChtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2Jq
ZWN0IikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7
Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX2Vs
ZW1lbnRfaW5kZXhfdWludCIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfZWxlbWVudF9p
bmRleF91aW50Iik7Ci0gICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7Ci0g
ICAgaWYgKFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiKTsK
LSAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpCi0g
ICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZy
dGMiKTsKLSAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlz
KSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMi
KTsKLSAgICBpZiAoV2ViR0xEZXB0aFRleHR1cmU6OnN1cHBvcnRlZChncmFwaGljc0NvbnRleHQz
RCgpKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpOwotICAg
IGlmIChzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdM
X2RyYXdfYnVmZmVycyIpOwotICAgIGlmIChBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVk
KHRoaXMpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7
Ci0KLSAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmICht
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRf
c2hhZGVyX3NvdXJjZSIpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdf
c2hhZGVycyIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9p
bmZvIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGlu
ZygiZ2V0VGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBz
d2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdf
RklMVEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKLSAgICAgICAgbV9jb250ZXh0LT5nZXRU
ZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpKTsKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2Zp
bHRlcl9hbmlzb3Ryb3BpYwotICAgICAgICBpZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWMpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgJnZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
IG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB1bmlmb3JtTG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9ybSIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKCF1bmlmb3JtTG9jYXRpb24g
fHwgdW5pZm9ybUxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gcHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRV
bmlmb3JtIiwgIm5vIHVuaWZvcm1sb2NhdGlvbiBvciBub3QgdmFsaWQgZm9yIHRoaXMgcHJvZ3Jh
bSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIEdDM0RpbnQg
bG9jYXRpb24gPSB1bmlmb3JtTG9jYXRpb24tPmxvY2F0aW9uKCk7Ci0KLSAgICBHQzNEZW51bSBi
YXNlVHlwZTsKLSAgICB1bnNpZ25lZCBsZW5ndGg7Ci0gICAgc3dpdGNoICh1bmlmb3JtTG9jYXRp
b24tPnR5cGUoKSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6Ci0gICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDE7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoK
LSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVu
Z3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9P
TF9WRUMzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAg
ICAgICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCT09MX1ZFQzQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJP
T0w7Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpJTlRfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6Ci0gICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAy
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMz
OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAg
bGVuZ3RoID0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7
Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUX01BVDI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gOTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUNDoKLSAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE2OwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRToKLSAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCi0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiZ2V0VW5pZm9ybSIsICJ1bmhhbmRsZWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7Ci0gICAgfQotICAgIHN3aXRjaCAoYmFzZVR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDogewotICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9
OwotICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8o
cHJvZ3JhbSksIGxvY2F0aW9uLCAxNiAqIHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZVswXSk7Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotICAg
IH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6IHsKLSAgICAgICAgR0MzRGludCB2
YWx1ZVs0XSA9IHswfTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQot
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQo
b2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFs
dWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihv
YmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5n
dGggPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3Ro
KSk7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKLSAgICAgICAg
R0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3Vw
cG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlm
b3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNE
aW50KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldFVu
aWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAg
IGlmIChsZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCi0gICAg
ICAgICAgICAgICAgYm9vbFZhbHVlW2pdID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbal0pOwot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29sVmFsdWUsIGxlbmd0aCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1
ZVswXSkpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIH0KLQotICAgIC8vIElmIHdlIGdldCBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiBv
dXIgdW5mb3J0dW5hdGVseSBjb21wbGV4IGxvZ2ljIGFib3ZlCi0gICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVua25v
d24gZXJyb3IiKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm1Mb2NhdGlv
biIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZhbGlkYXRl
TG9jYXRpb25MZW5ndGgoImdldFVuaWZvcm1Mb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRVbmlmb3JtTG9jYXRpb24i
LCBuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2
ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghcHJvZ3JhbS0+Z2V0
TGlua1N0YXR1cygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm1Mb2NhdGlvbiIsICJwcm9ncmFtIG5v
dCBsaW5rZWQiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIEdDM0RpbnQg
dW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBuYW1lKTsKLSAgICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwot
ICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVu
aWZvcm1zKTsKLSAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsr
KSB7Ci0gICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdl
dEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1l
IGlmIGl0J3MgYW4gYXJyYXkuCi0gICAgICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIp
KQotICAgICAgICAgICAgaW5mby5uYW1lID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0
aCgpIC0gMyk7Ci0gICAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0
ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCwgYXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4K
LSAgICAgICAgZm9yIChHQzNEaW50IGluZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5k
ZXgpIHsKLSAgICAgICAgICAgIFN0cmluZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSArICJbIiAr
IFN0cmluZzo6bnVtYmVyKGluZGV4KSArICJdIjsKLQotICAgICAgICAgICAgaWYgKG5hbWUgPT0g
dW5pZm9ybU5hbWUgfHwgbmFtZSA9PSBpbmZvLm5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9uLCBp
bmZvLnR5cGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1X
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVp
bnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotCi0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotCi0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4
QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImdldFZlcnRleEF0dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgaWYg
KG1fYW5nbGVJbnN0YW5jZWRBcnJheXMgJiYgcG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZF
UlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhzdGF0ZS5kaXZpc29yKTsKLQotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAg
ICAgICBpZiAoKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgIWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCkuYnVmZmVyQmluZGluZyA9PSBtX3Zl
cnRleEF0dHJpYjBCdWZmZXIpCi0gICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZwot
ICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBh
c3NSZWZQdHI8V2ViR0xCdWZmZXI+KHN0YXRlLmJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGUuZW5hYmxlZCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRlLm5vcm1hbGl6ZWQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhz
dGF0ZS5zaXplKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FS
UkFZX1NUUklERToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5vcmlnaW5hbFN0
cmlkZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9U
WVBFOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLnR5cGUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjoKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2lu
ZGV4XS52YWx1ZSwgNCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0g
ICAgfQotfQotCi1sb25nIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRy
aWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIEdDM0RzaXplaXB0
ciByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHJlc3VsdCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9k
ZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgYm9vbCBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICAgICAgaXNW
YWxpZCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFH
TUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzCi0gICAgICAgIGlmIChtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMpCi0gICAgICAgICAgICBp
c1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICghaXNWYWxpZCkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiaGludCIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1fY29udGV4dC0+aGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAg
aWYgKCFidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGlmICghYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNCdWZmZXIoYnVmZmVyLT5vYmplY3QoKSk7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9jb250ZXh0TG9zdDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmlzQ29udGV4dExvc3RPclBlbmRpbmcoKQotewotICAgIGlmIChtX2lzUGVuZGluZ1Bv
bGljeVJlc29sdXRpb24gJiYgIW1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbikgewotICAg
ICAgICBMT0coV2ViR0wsICJDb250ZXh0IGlzIGJlaW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2
ZSB0aGUgcG9saWN5LiIpOwotICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+
ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgpOwotICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQu
cGFnZSgpOwotICAgICAgICBpZiAocGFnZSAmJiAhZG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUo
KSkKLSAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLnJlc29s
dmVXZWJHTFBvbGljeUZvclVSTChkb2N1bWVudC51cmwoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBX
ZSBkb24ndCBjdXJyZW50bHkgZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0IGZyb20gcmVzb2x1
dGlvbi4gQSBtb3JlCi0gICAgICAgIC8vIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG1pZ2h0IHRy
eSB0byBjb25zdHJ1Y3QgYSByZWFsIGNvbnRleHQsIGV0YyBhbmQgcHJvY2VlZAotICAgICAgICAv
LyB3aXRoIG5vcm1hbCBvcGVyYXRpb24uCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkxMjIKLSAgICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lS
ZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0TG9zdCB8fCBt
X2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb247Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIsIGNhcCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfVEVTVCkKLSAgICAgICAgcmV0dXJuIG1fc3RlbmNpbEVuYWJsZWQ7Ci0gICAgcmV0dXJu
IG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikK
LXsKLSAgICBpZiAoIWZyYW1lYnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWZyYW1lYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5k
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1
ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCi17Ci0gICAgaWYg
KCFwcm9ncmFtIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc1Byb2dyYW0ocHJvZ3JhbS0+b2JqZWN0KCkpOwot
fQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdl
YkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIg
fHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
ICghcmVuZGVyYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLT5vYmpl
Y3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIo
V2ViR0xTaGFkZXIqIHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+
aXNTaGFkZXIoc2hhZGVyLT5vYmplY3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAo
IXRleHR1cmUgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGlmICghdGV4dHVyZS0+aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdp
ZHRoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2NvbnRleHQtPmxpbmVXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgibGlua1Byb2dyYW0iLCBwcm9n
cmFtKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0g
ICAgICAgIFdlYkdMU2hhZGVyKiB2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNo
YWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7Ci0gICAgICAgIFdlYkdMU2hh
ZGVyKiBmcmFnbWVudFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOwotICAgICAgICBpZiAoIXZlcnRleFNoYWRlciB8
fCAhdmVydGV4U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVu
dFNoYWRlci0+aXNWYWxpZCgpIHx8ICFtX2NvbnRleHQtPnByZWNpc2lvbnNNYXRjaChvYmplY3RP
clplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkgfHwgIW1f
Y29udGV4dC0+Y2hlY2tWYXJ5aW5nc1BhY2tpbmcob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciks
IG9iamVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpKSB7Ci0gICAgICAgICAgICBwcm9ncmFtLT5z
ZXRMaW5rU3RhdHVzKGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsK
LSAgICBwcm9ncmFtLT5pbmNyZWFzZUxpbmtDb3VudCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJ
UF9ZX1dFQkdMOgotICAgICAgICBtX3VucGFja0ZsaXBZID0gcGFyYW07Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9X
RUJHTDoKLSAgICAgICAgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhID0gcGFyYW07Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NP
TlZFUlNJT05fV0VCR0w6Ci0gICAgICAgIGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
QlJPV1NFUl9ERUZBVUxUX1dFQkdMIHx8IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05F
KQotICAgICAgICAgICAgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9IHN0YXRpY19jYXN0
PEdDM0RlbnVtPihwYXJhbSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIs
ICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJH
TCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQ6Ci0gICAgICAgIGlmIChwYXJhbSA9PSAxIHx8
IHBhcmFtID09IDIgfHwgcGFyYW0gPT0gNCB8fCBwYXJhbSA9PSA4KSB7Ci0gICAgICAgICAgICBp
ZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UKQotICAgICAgICAg
ICAgICAgIG1fcGFja0FsaWdubWVudCA9IHBhcmFtOwotICAgICAgICAgICAgZWxzZSAvLyBHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKLSAgICAgICAgICAgICAgICBtX3VucGFj
a0FsaWdubWVudCA9IHBhcmFtOwotICAgICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShw
bmFtZSwgcGFyYW0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJp
bnZhbGlkIHBhcmFtZXRlciBmb3IgYWxpZ25tZW50Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInBpeGVsU3RvcmVpIiwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3Rv
ciwgR0MzRGZsb2F0IHVuaXRzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1
bml0cyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2Vw
dGlvbkNvZGUmKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAvLyBEdWUgdG8gV2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMs
IGl0IGlzIG5vdCBwb3NzaWJsZSB0bwotICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhl
IFdlYkdMIEFQSS4KLSAgICBBU1NFUlQoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOwotICAgIC8v
IFZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMuCi0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFk
UGl4ZWxzIiwgIm5vIGRlc3RpbmF0aW9uIEFycmF5QnVmZmVyVmlldyIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZf
NToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgfHwgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJ
R05FRF9CWVRFIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVmFsaWRhdGUgYXJy
YXkgdHlwZSBhZ2FpbnN0IHBpeGVsIHR5cGUuCi0gICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9
IEpTQzo6VHlwZVVpbnQ4KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3
IG5vdCBVaW50OEFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hh
ciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29u
dGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04sICJyZWFkUGl4ZWxzIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAv
LyBDYWxjdWxhdGUgYXJyYXkgc2l6ZSwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNL
X0FMSUdOTUVOVC4KLSAgICB1bnNpZ25lZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkID0gMDsKLSAg
ICB1bnNpZ25lZCBpbnQgcGFkZGluZyA9IDA7Ci0gICAgaWYgKCFtX2lzUm9idXN0bmVzc0VYVFN1
cHBvcnRlZCkgewotICAgICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUlt
YWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1l
bnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsICZwYWRkaW5nKTsKLSAgICAgICAgaWYgKGVycm9yICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoZXJyb3IsICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZGltZW5zaW9ucyIpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgo
KSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJh
eUJ1ZmZlclZpZXcgbm90IGxhcmdlIGVub3VnaCBmb3IgZGltZW5zaW9ucyIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsK
LSAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOwotCi0gICAgewotICAgICAg
ICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCks
IG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNz
RVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJl
YWRuUGl4ZWxzRVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5i
eXRlTGVuZ3RoKCksIGRhdGEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQt
PnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAg
ICB9Ci0KLSNpZiBPUyhEQVJXSU4pCi0gICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVk
KSAvLyB3ZSBoYXZlbid0IGNvbXB1dGVkIHBhZGRpbmcKLSAgICAgICAgbV9jb250ZXh0LT5jb21w
dXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0Fs
aWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRpbmcpOwotICAgIC8vIEZJWE1FOiBy
ZW1vdmUgdGhpcyBzZWN0aW9uIHdoZW4gR0wgZHJpdmVyIGJ1ZyBvbiBNYWMgQU5EIHRoZSBHTEVT
IGRyaXZlciBidWcKLSAgICAvLyBvbiBRQyBpcyBmaXhlZCwgaS5lLiwgd2hlbiBhbHBoYSBpcyBv
ZmYsIHJlYWRQaXhlbHMgc2hvdWxkCi0gICAgLy8gc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9m
IDAuCi0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9jb250ZXh0LT5nZXRDb250
ZXh0QXR0cmlidXRlcygpLmFscGhhKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpOwotICAgICAgICBmb3IgKEdD
M0RzaXplaSBpeSA9IDA7IGl5IDwgaGVpZ2h0OyArK2l5KSB7Ci0gICAgICAgICAgICBmb3IgKEdD
M0RzaXplaSBpeCA9IDA7IGl4IDwgd2lkdGg7ICsraXgpIHsKLSAgICAgICAgICAgICAgICBwaXhl
bHNbM10gPSAyNTU7Ci0gICAgICAgICAgICAgICAgcGl4ZWxzICs9IDQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBwaXhlbHMgKz0gcGFkZGluZzsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp
ZgotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVy
KCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9jb250ZXh0LT5yZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
InJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5v
IGJvdW5kIHJlbmRlcmJ1ZmZlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgh
dmFsaWRhdGVTaXplKCJyZW5kZXJidWZmZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9JTkRFWDg6Ci0gICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFn
ZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgbV9yZW5k
ZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAg
ICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0cnVlKTsKLSAgICAgICAgbV9y
ZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBp
ZiAoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5y
ZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgRXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5DSUw4
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgfQotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRp
bmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+c2V0SXNWYWxpZChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKTsKLSAgICAgICAgbV9yZW5k
ZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFs
aWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhcHBseVN0
ZW5jaWxUZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVDb3Zl
cmFnZShHQzNEZmxvYXQgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKLXsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5z
YW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoInNjaXNzb3IiLCB3aWR0aCwgaGVp
Z2h0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJj
ZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFkZXIp
KQotICAgICAgICByZXR1cm47Ci0gICAgU3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9IFN0
cmlwQ29tbWVudHMoc3RyaW5nKS5yZXN1bHQoKTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJz
aGFkZXJTb3VyY2UiLCBzdHJpbmdXaXRob3V0Q29tbWVudHMpKQotICAgICAgICByZXR1cm47Ci0g
ICAgc2hhZGVyLT5zZXRTb3VyY2Uoc3RyaW5nKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJj
ZShvYmplY3RPclplcm8oc2hhZGVyKSwgc3RyaW5nV2l0aG91dENvbW1lbnRzKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0Rp
bnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5j
aWxGdW5jIiwgZnVuYykpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmID0g
cmVmOwotICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgIG1fc3RlbmNpbEZ1bmNN
YXNrID0gbWFzazsKLSAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgIG1fY29u
dGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0g
ZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTdGVuY2ls
RnVuYygic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsIGZ1bmMpKQotICAgICAgICByZXR1cm47Ci0gICAg
c3dpdGNoIChmYWNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JB
Q0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNpbEZ1
bmNSZWZCYWNrID0gcmVmOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAg
ICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UOgotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0g
cmVmOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNS
ZWZCYWNrID0gcmVmOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZh
bGlkIGZhY2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnN0ZW5j
aWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc3RlbmNpbE1h
c2sgPSBtYXNrOwotICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKLSAgICBtX2NvbnRleHQt
PnN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQotewotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2gg
KGZhY2UpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKLSAg
ICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7Ci0gICAgICAgIG1fc3RlbmNpbE1hc2tCYWNrID0g
bWFzazsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6
Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgotICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1h
c2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1NlcGFyYXRl
IiwgImludmFsaWQgZmFjZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4
dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0Mz
RGVudW0genBhc3MpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNE
ZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3Mp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNz
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5l
ZC4KLSAgICBlYyA9IDA7Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVC
aW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBBU1NFUlQodmFsaWRhdGVU
ZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSkpOwotICAgIEFTU0VSVCh0ZXgpOwotICAgIEFTU0VSVCghbGV2ZWwgfHwgIVdlYkdMVGV4dHVy
ZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKTsKLSAgICBpZiAoIXBpeGVscykgewotICAgICAgICAv
LyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5HTCBpbXBsZW1lbnRhdGlvbiBjbGVhcnMgdGV4dHVyZXMg
YW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMgdGhlcmVmb3JlIHRydWUuCi0gICAgICAgIC8vIEZvciBv
dGhlciBpbXBsZW1lbnRhdGlvbnMsIGlmIHRoZXkgYXJlIHVzaW5nIEFOR0xFX2RlcHRoX3RleHR1
cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVzCi0gICAgICAgIC8vIGNhbiBub3QgYmUgY2xlYXJlZCB3
aXRoIHRleEltYWdlMkQgYW5kIG11c3QgYmUgY2xlYXJlZCBieSBiaW5kaW5nIHRvIGFuIGZibyBh
bmQgY2FsbGluZwotICAgICAgICAvLyBjbGVhci4KLSAgICAgICAgaWYgKGlzUmVzb3VyY2VTYWZl
KCkpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBudWxscHRy
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBib29sIHN1Y2NlZWQgPSBtX2NvbnRleHQt
PnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrQWxpZ25tZW50
KTsKLSAgICAgICAgICAgIGlmICghc3VjY2VlZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRl
eEZvcm1hdCgidGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSk7Ci0gICAgICAgIG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOwotICAgICAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKSkgewotICAgICAgICAgICAgLy8gVGhlIHRleEltYWdlMkQgZnVuY3Rpb24gZmFpbGVkLiBU
ZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGZvciB0aGlzIGxl
dmVsLgotICAgICAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdl
SHRtbERvbVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIFZlY3Rvcjx1aW50OF90
PiBkYXRhOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJh
Y3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsKLSAgICBpZiAoIWltYWdl
RXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGlt
YWdlIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3Vy
Y2VGb3JtYXQoKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1h
Z2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7Ci0gICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERh
dGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVsRGF0YSgpOwotCi0gICAgYm9vbCBuZWVkQ29u
dmVyc2lvbiA9IHRydWU7Ci0gICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9w
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCi0gICAgICAg
IG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9jb250
ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBm
bGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0
aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNv
dXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInBh
Y2tJbWFnZSBlcnJvciIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRl
eEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgo
KSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0
YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVu
dCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Ci19Ci0KLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxp
ZGF0aW9uU291cmNlVHlwZSBzb3VyY2VUeXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0KQotewotICAgIGlmICghdmFsaWRhdGVUZXhG
dW5jUGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uVHlwZSwgdGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRh
dGVUZXh0dXJlQmluZGluZyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0
ZXh0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZnVuY3Rpb25UeXBlID09
IE5vdFRleFN1YkltYWdlMkQpIHsKLSAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6
aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAw
IG5vdCBwb3dlciBvZiAyIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gRm9yIFNvdXJjZUFycmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVU
ZXhGdW5jRGF0YSgpIHdvdWxkIGhhbmRsZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJs
ZVRleEZvcm1hdAotICAgICAgICAvLyBieSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3
IGlzIG51bGwgb3Igbm90LgotICAgICAgICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1
ZmZlclZpZXcpIHsKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChm
dW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9y
bWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCF2YWxpZGF0ZVNpemUoZnVuY3Rpb25OYW1lLCB4b2Zmc2V0LCB5b2Zmc2V0KSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlm
IGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KLSAg
ICAgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJiYWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0
dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVy
ZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGlt
ZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAodGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCkgIT0gZm9ybWF0IHx8IHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNo
IHRleHR1cmUiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
QXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleEltYWdl
MkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxBbGxv
d2VkKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3Vi
SW1hZ2UyRCwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAg
ICByZXR1cm47Ci0gICAgdm9pZCogZGF0YSA9IHBpeGVscyA/IHBpeGVscy0+YmFzZUFkZHJlc3Mo
KSA6IDA7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOwotICAgIGJvb2wgY2hhbmdlVW5w
YWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0gICAgaWYgKGRhdGEgJiYgKG1fdW5wYWNrRmxpcFkgfHwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0
cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGEgPSB0ZW1wRGF0
YS5kYXRhKCk7Ci0gICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9IHRydWU7Ci0gICAgfQot
ICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleElt
YWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsCi0gICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7Ci0gICAg
aWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3Jl
aShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAw
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRh
dGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRh
LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMt
PmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0gICAg
VmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0g
ICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4K
LSAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQgaXMg
UkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlwbHkg
b3BlcmF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmICghbV91bnBhY2tGbGlwWSAmJiAhbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAm
JiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKQotICAgICAgICBuZWVk
Q29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+
ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJh
ZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleElt
YWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCks
IHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRh
LmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tB
bGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0Nv
bnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi1QYXNz
UmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdJbWFnZUludG9CdWZmZXIo
SW1hZ2UqIGltYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3Rv
cikKLXsKLSAgICBJbnRTaXplIHNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgc2l6ZS5zY2FsZShk
ZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1h
Z2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKLSAgICBpZiAoIWJ1ZikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdl
MkQiLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLT5zaXplKCkpOwotICAg
IEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCksIHNpemUpOwotICAgIGJ1Zi0+Y29udGV4
dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNS
ZWN0KTsKLSAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1h
Z2VNb2RlKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlSFRNTEltYWdlRWxlbWVudCgidGV4SW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2Fj
aGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYg
KGltYWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdlKCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0g
ZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFnZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCks
IGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0KLSAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxp
ZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1h
Z2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXIt
PndpZHRoKCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAw
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZWMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMp
IHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3Vy
Y2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZh
cy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0
dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgLy8gSWYgcG9zc2li
bGUsIGNvcHkgZnJvbSB0aGUgY2FudmFzIGVsZW1lbnQgZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUK
LSAgICAvLyB2aWEgdGhlIEdQVSwgd2l0aG91dCBhIHJlYWQtYmFjayB0byBzeXN0ZW0gbWVtb3J5
LgotICAgIC8vCi0gICAgLy8gRklYTUU6IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkvVU5T
SUdORURfQllURSBzaG91bGQgYmUgbGlmdGVkIHdoZW4KLSAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29w
eVRvUGxhdGZvcm1UZXh0dXJlIGltcGxlbWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4K
LSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1
cmUgJiYgdHlwZSA9PSB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpCi0gICAgICAgICYm
IChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpIHsKLSAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0g
ICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29u
dGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgo
KSwgY2FudmFzLT5oZWlnaHQoKSwgdHlwZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdl
dEltYWdlRGF0YSgpOwotICAgIGlmIChpbWFnZURhdGEpCi0gICAgICAgIHRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgp
LCBlYyk7Ci0gICAgZWxzZQotICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLVBhc3NSZWZQdHI8SW1h
Z2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxl
bWVudCogdmlkZW8sIEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9u
Q29kZSYpCi17Ci0gICAgSW50U2l6ZSBzaXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52
aWRlb0hlaWdodCgpKTsKLSAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNh
Y2hlLmltYWdlQnVmZmVyKHNpemUpOwotICAgIGlmICghYnVmKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIs
ICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBJ
bnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
Ly8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBv
ZiBDUFUgcmVhZGJhY2suCi0gICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1
Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tp
bmdTdG9yZUNvcHkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4SW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAgICAg
ICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNv
dXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB2aWRl
by0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAw
LCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gR28gdGhyb3VnaCB0aGUgZmFzdCBwYXRo
IGRvaW5nIGEgR1BVLUdQVSB0ZXh0dXJlcyBjb3B5IHdpdGhvdXQgYSByZWFkYmFjayB0byBzeXN0
ZW0gbWVtb3J5IGlmIHBvc3NpYmxlLgotICAgIC8vIE90aGVyd2lzZSwgaXQgd2lsbCBmYWxsIGJh
Y2sgdG8gdGhlIG5vcm1hbCBTVyBwYXRoLgotICAgIC8vIEZJWE1FOiBUaGUgY3VycmVudCByZXN0
cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZvcm1hdCBzaG91ZCBiZSBSR0Igb3IgUkdCQSwKLSAgICAv
LyB0eXBlIHNob3VsZCBiZSBVTlNJR05FRF9CWVRFIGFuZCBsZXZlbCBzaG91bGQgYmUgMC4gSXQg
bWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlLgotICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9
IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAg
IGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQgJiYgdGV4dHVyZQot
ICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKQotICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAgICYmICh0ZXh0dXJlLT5nZXRUeXBlKHRhcmdl
dCwgbGV2ZWwpID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFIHx8ICF0ZXh0dXJl
LT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKQotICAgICAgICAmJiAhbGV2ZWwpIHsKLSAgICAgICAg
aWYgKHZpZGVvLT5jb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUobV9jb250ZXh0Lmdl
dCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwgbGV2ZWwsIHR5cGUsIGludGVybmFsZm9ybWF0LCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0
dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHZpZGVvLT52
aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCB0eXBlKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0g
ICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1
ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAg
IHJldHVybjsKLSAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21W
aWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1mLCBHQzNEaW50IHBhcmFt
aSwgYm9vbCBpc0Zsb2F0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoInRleFBhcmFtZXRlciIsIHRhcmdldCwgZmFsc2UpOwotICAgIGlmICghdGV4KQotICAg
ICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01BR19GSUxURVI6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfV1JBUF9UOgotICAgICAgICBpZiAoKGlzRmxvYXQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlS
Uk9SRURfUkVQRUFUICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKQotICAg
ICAgICAgICAgfHwgKCFpc0Zsb2F0ICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xB
TVBfVE9fRURHRSAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVB
VCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9N
QVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAg
ICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaXNGbG9hdCkgewot
ICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmYocG5hbWUsIHBhcmFtZik7Ci0gICAgICAgIG1fY29u
dGV4dC0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBwYXJhbWYpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRleC0+c2V0UGFyYW1ldGVyaShwbmFtZSwgcGFyYW1pKTsKLSAgICAgICAgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtaSk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pCi17Ci0gICAgdGV4UGFyYW1ldGVy
KHRhcmdldCwgcG5hbWUsIHBhcmFtLCAwLCB0cnVlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCBwYXJhbSkKLXsKLSAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFy
YW0sIGZhbHNlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdl
MkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJl
dHVybmVkCi0gICAgZWMgPSAwOwotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBB
U1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1Yklt
YWdlMkQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0
eXBlKSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQs
IHlvZmZzZXQpKTsKLSAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3Vi
SW1hZ2UyRCIsIGZvcm1hdCkpOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0
dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgp
IHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgQVNTRVJUKCh4b2Zmc2V0ICsgd2lkdGgpID49IDApOwotICAgIEFTU0VSVCgoeW9mZnNl
dCArIGhlaWdodCkgPj0gMCk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZl
bCkgPj0gKHhvZmZzZXQgKyB3aWR0aCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJn
ZXQsIGxldmVsKSA+PSAoeW9mZnNldCArIGhlaWdodCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpID09IGZvcm1hdCk7Ci0gICAgQVNTRVJUKHRleC0+
Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSB0eXBlKTsKLSAgICBtX2NvbnRleHQtPnRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBwaXhlbHMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJ
bWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291
cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGVjID0gMDsKLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJj
ZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9ORSk7ICAKLSAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RT
dWNjZWVkZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNl
RGF0YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxw
aGFPcCgpOwotICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3Iu
aW1hZ2VQaXhlbERhdGEoKTsKLQotICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAg
IGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURh
dGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFEb05vdGhpbmcgJiYgIWZsaXBZKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZh
bHNlOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShp
bWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJj
ZURhdGFGb3JtYXQsIGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3Iu
aW1hZ2VIZWlnaHQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQo
KSwgZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdW5wYWNrQWxp
Z25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0
KCksIGZvcm1hdCwgdHlwZSwgIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBp
eGVsRGF0YSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCBtX3VucGFja0FsaWdubWVudCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhT
dWJJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBO
dWxsTm90QWxsb3dlZCkKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2Uy
RCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwg
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQp
KQotICAgICAgICByZXR1cm47Ci0gICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3Mo
KTsKLSAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7Ci0gICAgYm9vbCBjaGFuZ2VVbnBhY2tB
bGlnbm1lbnQgPSBmYWxzZTsKLSAgICBpZiAoZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEpKSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0
VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
bXBEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRh
dGEoKTsKLSAgICAgICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAg
aWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3Jl
aShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4U3ViSW1h
Z2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkK
LSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURh
dGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0
ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxl
dmVsLCBmb3JtYXQsICBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1h
dCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3Rv
cjx1aW50OF90PiBkYXRhOwotICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIC8v
IFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBvZiBmb3JtYXQgUkdCQTguCi0gICAg
Ly8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEg
YW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJh
dGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgIW1fdW5w
YWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgbmVlZENvbnZl
cnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJh
Y3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQg
aW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJ
bWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRo
KCksIHBpeGVscy0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRh
LmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tB
bGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0Nv
bnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
SFRNTEltYWdlRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVk
SW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGlt
YWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdlKCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJh
d0ltYWdlSW50b0J1ZmZlcihpbWFnZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGlt
YWdlLT5oZWlnaHQoKSwgMSk7Ci0KLSAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VF
bGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBp
bWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCks
IEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4
U3ViSW1hZ2UyRCIsIGNhbnZhcywgZWMpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRl
eFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFy
Z2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7Ci0g
ICAgaWYgKGltYWdlRGF0YSkKLSAgICAgICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwotICAg
IGVsc2UKLSAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRl
b0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50
KCJ0ZXhTdWJJbWFnZTJEIiwgdmlkZW8sIGVjKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5j
KCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwg
dGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9I
ZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVv
LCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwotICAgIGlmICghaW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLSAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRl
eHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEsIGVjKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
dW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgeCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZv
cm0xZnYiLCBsb2NhdGlvbiwgdiwgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4
dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCksIHYtPmRhdGEo
KSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dy
YW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xaSIsICJsb2NhdGlv
biBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKChsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJE
IHx8IGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkg
JiYgeCA+PSAoaW50KW1fdGV4dHVyZVVuaXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaSIsICJp
bnZhbGlkIHRleHR1cmUgdW5pdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtMWkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCAxKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6U0FNUExFUl9DVUJFKQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdi0+bGVu
Z3RoKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKHYtPmRhdGEoKVtpXSA+PSBzdGF0aWNfY2Fz
dDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNpemUoKSkpIHsKLSAgICAgICAgICAgICAgICBMT0coV2Vi
R0wsICJUZXh0dXJlIHVuaXQgc2l6ZT0lenUsIHZbJWRdPSVkLiBMb2NhdGlvbiB0eXBlID0gJTA0
WC4iLCBtX3RleHR1cmVVbml0cy5zaXplKCksIGksIHYtPmRhdGEoKVtpXSwgbG9jYXRpb24tPnR5
cGUoKSk7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgp
LCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1Q
TEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJf
Q1VCRSkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzaXplKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoKChHQzNEaW50Kil2KVtpXSA+PSBz
dGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNpemUoKSkpIHsKLSAgICAgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVu
aWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFp
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9j
YXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9
IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJmIiwgImxvY2F0aW9uIG5vdCBm
b3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0yZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgMikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9u
LCB2LCBzaXplLCAyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3Jt
MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMiwgdik7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFs
b2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkg
IT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRpb24gbm90
IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
Y29udGV4dC0+dW5pZm9ybTJpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgMikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwg
diwgc2l6ZSwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJp
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0
aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2Yi
LCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4
LCB5LCB6KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNm
diIsIGxvY2F0aW9uLCB2LCAzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51
bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEo
KSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50
IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTNpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaShsb2NhdGlv
bi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJB
cnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgp
IC8gMywgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyAzLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dy
YW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2NhdGlv
biBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbV9jb250ZXh0LT51bmlmb3JtNGYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9j
YXRpb24sIHYsIDQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00
ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00
ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29u
dGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0Mz
RGludCB3LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgInVuaWZvcm00aSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGkobG9j
YXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2LCA0KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5s
ZW5ndGgoKSAvIDQsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gNCwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIs
IGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAv
IDQsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygi
dW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCBzaXplIC8gNCwgdHJhbnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlm
b3JtTWF0cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgOSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmxlbmd0aCgpIC8gOSwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwg
c2l6ZSwgOSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgz
ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA5LCB0cmFuc3Bvc2UsIHYpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMTYsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDE2LCB0cmFu
c3Bvc2UsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91
bmQoInVzZVByb2dyYW0iLCBwcm9ncmFtLCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChkZWxldGVkKQotICAgICAgICBwcm9ncmFtID0gMDsKLSAgICBpZiAocHJvZ3JhbSAmJiAh
cHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVzZVByb2dyYW0iLCAicHJvZ3Jh
bSBub3QgdmFsaWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobV9jdXJyZW50
UHJvZ3JhbSAhPSBwcm9ncmFtKSB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtKQotICAg
ICAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgp
KTsKLSAgICAgICAgbV9jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07Ci0gICAgICAgIG1fY29udGV4
dC0+dXNlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOwotICAgICAgICBpZiAocHJvZ3Jh
bSkKLSAgICAgICAgICAgIHByb2dyYW0tPm9uQXR0YWNoZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInZhbGlk
YXRlUHJvZ3JhbSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT52
YWxpZGF0ZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
djApCi17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjFmIiwgaW5kZXgsIDEs
IHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAg
IHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIDEpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2
SW1wbCgidmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIHNpemUsIDEpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhB
dHRyaWIyZiIsIGluZGV4LCAyLCB2MCwgdjEsIDAuMGYsIDEuMGYpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMy
QXJyYXkqIHYpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBp
bmRleCwgdiwgMik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0g
ICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgc2l6ZSwg
Mik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsK
LSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliM2YiLCBpbmRleCwgMywgdjAsIHYx
LCB2MiwgMS4wZik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRy
aWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCAzKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRl
eEF0dHJpYjNmdiIsIGluZGV4LCB2LCBzaXplLCAzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdD
M0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgdmVydGV4QXR0
cmliZkltcGwoInZlcnRleEF0dHJpYjRmIiwgaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYzKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBp
bmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4
QXR0cmliNGZ2IiwgaW5kZXgsIHYsIDQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5k
ZXgsIHYsIHNpemUsIDQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBl
LCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUg
PCAwIHx8IHN0cmlkZSA+IDI1NSB8fCBvZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9p
bnRlciIsICJiYWQgc2l6ZSwgc3RyaWRlIG9yIG9mZnNldCIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJp
YlBvaW50ZXIiLCAibm8gYm91bmQgQVJSQVlfQlVGRkVSIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1
ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhlIG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCi0g
ICAgdW5zaWduZWQgaW50IHR5cGVTaXplID0gc2l6ZUluQnl0ZXModHlwZSk7Ci0gICAgaWYgKCF0
eXBlU2l6ZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAoc3Rh
dGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSAlIHR5cGVTaXplKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0
ZXhBdHRyaWJQb2ludGVyIiwgInN0cmlkZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBlIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9
IHNpemUgKiB0eXBlU2l6ZTsKLQotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVy
dGV4QXR0cmliU3RhdGUoaW5kZXgsIGJ5dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFs
aXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJy
YXlCdWZmZXIpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6
ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
dmFsaWRhdGVTaXplKCJ2aWV3cG9ydCIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHRHcm91cC0+bG9zZUNv
bnRleHRHcm91cChtb2RlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VD
b250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29u
dGV4dExvc3QgPSB0cnVlOwotICAgIG1fY29udGV4dExvc3RNb2RlID0gbW9kZTsKLQotICAgIGlm
IChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgewotICAgICAgICAvLyBJbmZvcm0gdGhlIGVtYmVk
ZGVyIHRoYXQgYSBsb3N0IGNvbnRleHQgd2FzIHJlY2VpdmVkLiBJbiByZXNwb25zZSwgdGhlIGVt
YmVkZGVyIG1pZ2h0Ci0gICAgICAgIC8vIGRlY2lkZSB0byB0YWtlIGFjdGlvbiBzdWNoIGFzIGFz
a2luZyB0aGUgdXNlciBmb3IgcGVybWlzc2lvbiB0byB1c2UgV2ViR0wgYWdhaW4uCi0gICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmRpZExvc2VXZWJHTENvbnRleHQobV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSk7Ci0gICAg
fQotCi0gICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwotCi0gICAgaWYgKG1fZHJhd2lu
Z0J1ZmZlcikgewotICAgICAgICAvLyBNYWtlIGFic29sdXRlbHkgc3VyZSB3ZSBkbyBub3QgcmVm
ZXIgdG8gYW4gYWxyZWFkeS1kZWxldGVkIHRleHR1cmUgb3IgZnJhbWVidWZmZXIuCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZygwKTsKLSAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7Ci0gICAgfQotCi0gICAgLy8gVGhl
cmUgaXMgbm8gZGlyZWN0IHdheSB0byBjbGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0
aW9uIGFuZAotICAgIC8vIGxvb3BpbmcgdW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9S
IG1pZ2h0IGNhdXNlIGFuIGluZmluaXRlIGxvb3AgaWYKLSAgICAvLyB0aGUgZHJpdmVyIG9yIGNv
bnRleHQgaW1wbGVtZW50YXRpb24gaGFkIGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKLSAg
ICAvLyBsYXJnZSBudW1iZXIgb2YgdGltZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRl
eHQtPmdldEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0g
KG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5
SW5Db25zb2xlOwotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05U
RVhUX0xPU1RfV0VCR0wsICJsb3NlQ29udGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsK
LQotICAgIC8vIERvbid0IGFsbG93IHJlc3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0
IGV2ZW50IGhhcyBib3RoIGJlZW4KLSAgICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBi
ZWhhdmlvciBwcmV2ZW50ZWQuCi0gICAgbV9yZXN0b3JlQWxsb3dlZCA9IGZhbHNlOwotCi0gICAg
Ly8gQWx3YXlzIGRlZmVyIHRoZSBkaXNwYXRjaCBvZiB0aGUgY29udGV4dCBsb3N0IGV2ZW50LCB0
byBpbXBsZW1lbnQKLSAgICAvLyB0aGUgc3BlYyBiZWhhdmlvciBvZiBxdWV1ZWluZyBhIHRhc2su
Ci0gICAgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZVJlc3RvcmVDb250ZXh0KCkKLXsK
LSAgICBpZiAoIWlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29u
dGV4dCIsICJjb250ZXh0IG5vdCBsb3N0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2Rl
ID09IFN5bnRoZXRpY0xvc3RDb250ZXh0KQotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAi
Y29udGV4dCByZXN0b3JhdGlvbiBub3QgYWxsb3dlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFtX3Jlc3RvcmVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Jlc3Rv
cmVUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICghaXNDb250
ZXh0TG9zdCgpICYmICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pID8gbV9jb250ZXh0LT5w
bGF0Zm9ybUxheWVyKCkgOiAwOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVt
b3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1f
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250
ZXh0R3JvdXAtPnJlbW92ZU9iamVjdChvYmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YWRkU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCi17Ci0g
ICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRPYmpl
Y3Qob2JqZWN0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRl
eHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0T2Jq
ZWN0cy5yZW1vdmUob2JqZWN0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFk
ZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1f
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KCFpc0NvbnRleHRMb3N0KCkpOwotICAgIG1fY29udGV4dE9iamVjdHMuYWRkKG9iamVjdCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3Rz
KCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICB3aGlsZSAobV9jb250ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7Ci0gICAgICAg
IEhhc2hTZXQ8V2ViR0xDb250ZXh0T2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2Jq
ZWN0cy5iZWdpbigpOwotICAgICAgICAoKml0KS0+ZGV0YWNoQ29udGV4dCgpOwotICAgIH0KLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c3RvcCgpCi17Ci0gICAgaWYgKCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbikgewotICAgICAgICBmb3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250
ZXh0KTsKLSAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgfQotfQotCi1X
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFuUGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQotewotICAgIEdDM0Rib29sZWFuIHZhbHVlID0gMDsKLSAgICBtX2NvbnRl
eHQtPmdldEJvb2xlYW52KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8o
c3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewot
ICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLKSB7Ci0g
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oMCwg
MCk7Ci0gICAgfQotICAgIEdDM0Rib29sZWFuIHZhbHVlWzRdID0gezB9OwotICAgIG1fY29udGV4
dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKLSAgICBib29sIGJvb2xWYWx1ZVs0XTsKLSAg
ICBmb3IgKGludCBpaSA9IDA7IGlpIDwgNDsgKytpaSkKLSAgICAgICAgYm9vbFZhbHVlW2lpXSA9
IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2lpXSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhi
b29sVmFsdWUsIDQpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEZmxvYXQgdmFsdWUg
PSAwOwotICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2
YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17
Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFt
ZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4odmFsdWUpKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdDM0Rm
bG9hdCB2YWx1ZVs0XSA9IHswfTsKLSAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFs
dWUpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICBs
ZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIH0KLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6
Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAg
ICBHQzNEaW50IHZhbHVlWzRdID0gezB9OwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5h
bWUsIHZhbHVlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIHN3aXRjaCAocG5hbWUp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKLSAgICAg
ICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9CT1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6Ci0g
ICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJB
cnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGJvb2wgcHJlcGFyZVRvRHJhdykKLXsKLSAgICBib29sIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNl
OwotICAgIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHN0
YXRpY19jYXN0PFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsYWc+KChtX29lc1RleHR1
cmVGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFy
RW5hYmxlZCA6IDApIHwgKG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVy
ZTo6VGV4dHVyZUV4dGVuc2lvbkhhbGZGbG9hdExpbmVhckVuYWJsZWQgOiAwKSk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGlpID0gMDsgaWkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraWkpIHsK
LSAgICAgICAgaWYgKChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3Rl
eHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4
dGVuc2lvbnMpKQotICAgICAgICAgICAgfHwgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3Vi
ZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+
bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKSkgewotICAgICAgICAgICAgaWYgKGlp
ICE9IG1fYWN0aXZlVGV4dHVyZVVuaXQpIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFj
dGl2ZVRleHR1cmUoaWkpOwotICAgICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IHRydWU7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc2V0QWN0aXZlVW5pdCkgewotICAgICAgICAgICAg
ICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShpaSk7Ci0gICAgICAgICAgICAgICAgcmVzZXRB
Y3RpdmVVbml0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBXZWJHTFRleHR1
cmUqIHRleDJEOwotICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXhDdWJlTWFwOwotICAgICAg
ICAgICAgaWYgKHByZXBhcmVUb0RyYXcpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbXNnKFN0
cmluZygidGV4dHVyZSBib3VuZCB0byB0ZXh0dXJlIHVuaXQgIikgKyBTdHJpbmc6Om51bWJlcihp
aSkKLSAgICAgICAgICAgICAgICAgICAgKyAiIGlzIG5vdCByZW5kZXJhYmxlLiBJdCBtYXliZSBu
b24tcG93ZXItb2YtMiBhbmQgaGF2ZSBpbmNvbXBhdGlibGUgdGV4dHVyZSBmaWx0ZXJpbmcgb3Ig
aXMgbm90ICd0ZXh0dXJlIGNvbXBsZXRlJywiCi0gICAgICAgICAgICAgICAgICAgICsgIiBvciBp
dCBpcyBhIGZsb2F0L2hhbGYtZmxvYXQgdHlwZSB3aXRoIGxpbmVhciBmaWx0ZXJpbmcgYW5kIHdp
dGhvdXQgdGhlIHJlbGV2YW50IGZsb2F0L2hhbGYtZmxvYXQgbGluZWFyIGV4dGVuc2lvbiBlbmFi
bGVkLiIpOwotICAgICAgICAgICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGZ1bmN0aW9u
TmFtZSwgbXNnLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIHRleDJEID0gbV9ibGFj
a1RleHR1cmUyRC5nZXQoKTsKLSAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV9ibGFja1Rl
eHR1cmVDdWJlTWFwLmdldCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICB0ZXgyRCA9IG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOwotICAg
ICAgICAgICAgICAgIHRleEN1YmVNYXAgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVN
YXBCaW5kaW5nLmdldCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fdGV4dHVy
ZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJl
MkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgb2JqZWN0T3JaZXJvKHRleDJEKSk7Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNb
aWldLnRleHR1cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1
YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUCwgb2JqZWN0T3JaZXJvKHRleEN1YmVNYXApKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAocmVzZXRBY3RpdmVVbml0KQotICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1
cmUobV9hY3RpdmVUZXh0dXJlVW5pdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKQotewotICAgIHVuc2lnbmVkIGNoYXIg
YmxhY2tbXSA9IHswLCAwLCAwLCAyNTV9OwotICAgIG1fYmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVU
ZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV9ibGFja1RleHR1cmUyRC0+b2JqZWN0KCkpOwotICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2sp
OwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDApOwotICAgIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcCA9IGNyZWF0ZVRleHR1cmUoKTsKLSAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQLCBtX2JsYWNrVGV4dHVyZUN1YmVNYXAtPm9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPnRl
eEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAg
bV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwg
YmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwg
MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1osIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCAwKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQo
R0MzRGVudW0gdGV4SW50ZXJuYWxGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBj
b2xvckJ1ZmZlckZvcm1hdCkKLXsKLSAgICB1bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0
M0Q6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQodGV4SW50ZXJuYWxGb3JtYXQpOwotICAgIHVuc2ln
bmVkIGhhdmUgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChjb2xv
ckJ1ZmZlckZvcm1hdCk7Ci0gICAgcmV0dXJuIChuZWVkICYgaGF2ZSkgPT0gbmVlZDsKLX0KLQot
R0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JG
b3JtYXQoKQotewotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+b2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+
Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKLSAgICBpZiAobV9hdHRyaWJ1dGVzLmFscGhhKQotICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5k
RnJhbWVidWZmZXJXaWR0aCgpCi17Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlcldpZHRoKCk7Ci0gICAgcmV0dXJuIG1fZHJhd2luZ0J1
ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkgOiBtX2NvbnRleHQtPmdldElu
dGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpCi17Ci0gICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAg
cmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlckhlaWdodCgpOwotICAg
IHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQo
KSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0K
LQotV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNl
U2l4RW51bXNGb3JDdWJlTWFwKQotewotICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IG51bGxw
dHI7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJEOgotICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0g
ICAgICAgIGlmICghdXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgfQotICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQOgotICAgICAgICBpZiAo
dXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4
dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAibm8gdGV4dHVyZSIpOwotICAgIHJldHVybiB0ZXh0dXJlOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIGNvbnN0IHVuc2lnbmVkIG1heFdl
YkdMTG9jYXRpb25MZW5ndGggPSAyNTY7Ci0gICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IG1heFdl
YkdMTG9jYXRpb25MZW5ndGgpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGxlbmd0aCA+
IDI1NiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTaXplKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpCi17Ci0gICAgaWYgKHggPCAwIHx8
IHkgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzaXplIDwgMCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBT
dHJpbmcmIHN0cmluZykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInN0cmluZyBub3QgQVNDSUkiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFO
Q0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAg
ICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRleHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiZGVwdGggdGV4dHVyZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIGlmIChtX29lc1Rl
eHR1cmVGbG9hdCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIGlmIChtX29lc1RleHR1cmVIYWxm
RmxvYXQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0
dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9JTlRfMjRfODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoK
LSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRleHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBl
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBWZXJpZnkgdGhhdCB0
aGUgY29tYmluYXRpb24gb2YgZm9ybWF0IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KLSAgICBzd2l0
Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFM
Rl9GTE9BVF9PRVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZv
ciBmb3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgICAgIGlmICh0
eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0
eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAg
ICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCIGZvcm1hdCIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF80XzRfNF80Ci0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xCi0gICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB0eXBlIGZvciBSR0JBIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBl
bmFibGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCi0gICAgICAgICAg
ICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxl
dmVsID4gMCkgewotICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgbXVzdCBiZSAwIGZvciBE
RVBUSF9DT01QT05FTlQgZm9ybWF0Iik7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NU
RU5DSUw6Ci0gICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERFUFRIX1NURU5DSUwgbm90IGVuYWJsZWQiKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0XzgpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZXZlbCA+IDApIHsK
LSAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfU1RFTkNJ
TCBmb3JtYXQiKTsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVRleEZ1bmNMZXZlbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBpZiAobGV2ZWwgPCAwKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJsZXZlbCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBz
d2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6
Ci0gICAgICAgIGlmIChsZXZlbCA+PSBtX21heFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBpZiAobGV2ZWwgPj0g
bV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBjaGVja3MgaWYg
bGV2ZWwgaXMgbGVnYWwsIHNvIHdlIHJldHVybiB0cnVlIGFuZCBkb24ndAotICAgIC8vIGdlbmVy
YXRlIElOVkFMSURfRU5VTSBpZiB0YXJnZXQgaXMgaWxsZWdhbC4KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRl
cnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUg
ZnVuY3Rpb25UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKQotewotICAgIC8vIFdlIGFic29sdXRlbHkg
aGF2ZSB0byB2YWxpZGF0ZSB0aGUgZm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgotICAgIC8v
IFRoZSB0ZXhJbWFnZTJEIGVudHJ5IHBvaW50cyB0YWtpbmcgSFRNTEltYWdlLCBldGMuIHdpbGwg
cHJvZHVjZQotICAgIC8vIHRlbXBvcmFyeSBkYXRhIGJhc2VkIG9uIHRoaXMgY29tYmluYXRpb24s
IHNvIGl0IG11c3QgYmUgbGVnYWwuCi0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRU
eXBlKGZ1bmN0aW9uTmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkgfHwgIXZhbGlkYXRlVGV4RnVu
Y0xldmVsKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgR0MzRGludCBtYXhUZXh0dXJlU2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0
dXJlTGV2ZWwgLSAxIC0gbGV2ZWwpOwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4
dHVyZVNpemVGb3JMZXZlbCB8fCBoZWlnaHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgot
ICAgICAgICBpZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVp
Z2h0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1h
cCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIE5v
IG5lZWQgdG8gY2hlY2sgaGVpZ2h0IGhlcmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQu
Ci0gICAgICAgIC8vIEZvciB0ZXhTdWJJbWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNo
ZWNraW5nIHlvZmZzZXQgKyBoZWlnaHQgaXMgaW4gcmFuZ2UuCi0gICAgICAgIGlmICh3aWR0aCA+
IG1heFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBv
ciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpZiAoZm9ybWF0ICE9IGludGVybmFsZm9ybWF0KSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAiZm9ybWF0ICE9IGludGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAoYm9yZGVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3JkZXIgIT0g
MCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVsbERpc3Bvc2l0aW9uIGRp
c3Bvc2l0aW9uKQotewotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIGlmIChkaXNwb3NpdGlv
biA9PSBOdWxsQWxsb3dlZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAibm8gcGl4ZWxzIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5
cGUsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVTZXR0
YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEU6Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVV
aW50OCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0
IEFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6
VHlwZVVpbnQxNikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX1NI
T1JUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQxNkFycmF5Iik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgIGlmIChwaXhl
bHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVGbG9hdDMyKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgInR5cGUgRkxPQVQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJl
X2hhbGZfZmxvYXQKLSAgICAgICAgLy8gQXMgcGVyIHRoZSBzcGVjaWZpY2F0aW9uLCBBcnJheUJ1
ZmZlclZpZXcgc2hvdWxkIGJlIG51bGwgd2hlbgotICAgICAgICAvLyBPRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0IGlzIGVuYWJsZWQuCi0gICAgICAgIGlmIChwaXhlbHMpIHsKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAidHlwZSBIQUxGX0ZMT0FUX09FUyBidXQgQXJyYXlCdWZmZXJWaWV3IGlzIG5v
dCBOVUxMIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZDsKLSAgICBHQzNEZW51bSBl
cnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3
aWR0aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7
Ci0gICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJl
IGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAocGl4
ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgaWYgKG1f
dW5wYWNrQWxpZ25tZW50ICE9IDEpIHsKLSAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+Y29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmdG90
YWxCeXRlc1JlcXVpcmVkLCAwKTsKLSAgICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkg
PT0gdG90YWxCeXRlc1JlcXVpcmVkKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5
QnVmZmVyVmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElHTk1F
TlQgPiAxIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdo
IGZvciByZXF1ZXN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNz
ZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQotewotICAgIHJldHVybiBtX2NvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKQotewotICAgIGlmICghcGl4ZWxzKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
IndpZHRoIG9yIGhlaWdodCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHVuc2lnbmVkIGludCBieXRlc1JlcXVpcmVkID0gMDsKLQotICAgIHN3aXRjaCAoZm9ybWF0
KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EOgotICAgICAgICB7
Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAgICBjb25z
dCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdo
dCA9IDQ7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2Nr
V2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOwotICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24g
PSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAg
ICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICogbnVtQmxvY2tzRG93biAqIGtCbG9j
a1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVEX0FMUEhBX0FNRDoKLSAgICAgICAg
ewotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSAxNjsKLSAgICAgICAgICAgIGNv
bnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVp
Z2h0ID0gNDsKLSAgICAgICAgICAgIGludCBudW1CbG9ja3NBY3Jvc3MgPSAod2lkdGggKyBrQmxv
Y2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lkdGg7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzRG93
biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAvIGtCbG9ja0hlaWdodDsKLSAgICAgICAg
ICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Js
b2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxv
Y2tXaWR0aCA9IDg7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKLSAg
ICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dpZHRoKSAq
IHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDQgKyA3KSAvIGtCbG9ja1NpemU7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBp
bnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSAx
NjsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA4OwotICAgICAgICAgICAg
Ynl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgo
aGVpZ2h0LCBrQmxvY2tIZWlnaHQpICogMiArIDcpIC8ga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZv
cm1hdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHBpeGVscy0+
Ynl0ZUxlbmd0aCgpICE9IGJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxlbmd0
aCBvZiBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGNvcnJlY3QgZm9yIGRpbWVuc2lvbnMiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpCi17Ci0g
ICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0VYVDogewotICAgICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0Owot
ICAgICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgY29uc3Qg
R0MzRGludCBtYXhUZXh0dXJlU2l6ZSA9IHRhcmdldCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21h
eEN1YmVNYXBUZXh0dXJlU2l6ZTsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIG1heENvbXByZXNz
ZWREaW1lbnNpb24gPSBtYXhUZXh0dXJlU2l6ZSA+PiBsZXZlbDsKLSAgICAgICAgYm9vbCB3aWR0
aFZhbGlkID0gKGxldmVsICYmIHdpZHRoID09IDEpIHx8IChsZXZlbCAmJiB3aWR0aCA9PSAyKSB8
fCAoISh3aWR0aCAlIGtCbG9ja1dpZHRoKSAmJiB3aWR0aCA8PSBtYXhDb21wcmVzc2VkRGltZW5z
aW9uKTsKLSAgICAgICAgYm9vbCBoZWlnaHRWYWxpZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0gMSkg
fHwgKGxldmVsICYmIGhlaWdodCA9PSAyKSB8fCAoIShoZWlnaHQgJSBrQmxvY2tIZWlnaHQpICYm
IGhlaWdodCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKLSAgICAgICAgaWYgKCF3aWR0aFZh
bGlkIHx8ICFoZWlnaHRWYWxpZCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBv
ciBoZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKLSAgICAgICAgLy8gSGVp
Z2h0IGFuZCB3aWR0aCBtdXN0IGJlIHBvd2VycyBvZiAyLgotICAgICAgICBpZiAoKHdpZHRoICYg
KHdpZHRoIC0gMSkpIHx8IChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqIHRleCkKLXsKLSAg
ICBpZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDApIHsKLSAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ4b2Zm
c2V0IG9yIHlvZmZzZXQgPCAwIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
c3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0VYVDogewotICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICBj
b25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgaWYgKCh4b2Zmc2V0ICUga0Jsb2Nr
V2lkdGgpIHx8ICh5b2Zmc2V0ICUga0Jsb2NrSGVpZ2h0KSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgbm90IG11bHRpcGxlIG9mIDQiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAod2lkdGggLSB4b2Zmc2V0
ID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKQotICAgICAgICAgICAgfHwgaGVpZ2h0IC0g
eW9mZnNldCA+IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRl
eERpbWVuc2lvbnMoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQpOwotICAgIH0KLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZS
VENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZS
VENfMkJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BW
UlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9Q
VlJUQ18yQlBQVjFfSU1HOiB7Ci0gICAgICAgIGlmICh4b2Zmc2V0IHx8IHlvZmZzZXQpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBhbmQgeW9mZnNldCBtdXN0IGJlIHplcm8i
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAod2lk
dGggIT0gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKQotICAgICAgICAgICAgfHwgaGVpZ2h0
ICE9IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImRpbWVuc2lvbnMgbXVzdCBtYXRjaCBleGlzdGluZyBsZXZlbCIpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0KTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01v
ZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQotewotICAgIHN3aXRj
aCAobW9kZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX1NUUklQOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVfTE9PUDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FUzoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpUUklBTkdMRV9GQU46Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIGRyYXcgbW9kZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3Mo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIGlmIChtX3N0ZW5jaWxNYXNrICE9IG1f
c3RlbmNpbE1hc2tCYWNrIHx8IG1fc3RlbmNpbEZ1bmNSZWYgIT0gbV9zdGVuY2lsRnVuY1JlZkJh
Y2sgfHwgbV9zdGVuY2lsRnVuY01hc2sgIT0gbV9zdGVuY2lsRnVuY01hc2tCYWNrKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3RlbmNpbHMgc2V0dGluZ3MgZG8gbm90
IG1hdGNoIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZnVuYykKLXsKLSAgICBzd2l0Y2ggKGZ1
bmMpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpMRVNTOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFUVVBTDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHUkVBVEVSOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkdFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOT1RFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBTFdBWVM6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgZnVuY3Rpb24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50R0xFcnJvclRvQ29u
c29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFtX251bUdMRXJyb3JzVG9D
b25zb2xlQWxsb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLS1tX251bUdMRXJyb3JzVG9D
b25zb2xlQWxsb3dlZDsKLSAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUobWVzc2FnZSk7Ci0KLSAg
ICBpZiAoIW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKQotICAgICAgICBwcmludFdhcm5p
bmdUb0NvbnNvbGUoIldlYkdMOiB0b28gbWFueSBlcnJvcnMsIG5vIG1vcmUgZXJyb3JzIHdpbGwg
YmUgcmVwb3J0ZWQgdG8gdGhlIGNvbnNvbGUgZm9yIHRoaXMgY29udGV4dC4iKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFjYW52YXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhbnZhcygpLT5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlJl
bmRlcmluZywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBtZXNzYWdlKTsKLX0KLQotYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVu
dCkKLXsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9B
VFRBQ0hNRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRU
QUNITUVOVDoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKG1fd2Vi
Z2xEcmF3QnVmZmVycwotICAgICAgICAgICAgJiYgYXR0YWNobWVudCA+IEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMAotICAgICAgICAgICAgJiYgYXR0YWNobWVudCA8IHN0YXRp
Y19jYXN0PEdDM0RlbnVtPihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBn
ZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgYXR0YWNobWVudCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
VU5DX0FERDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1NVQlRSQUNUOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2Rl
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKLXsKLSAgICBpZiAoKChzcmMgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQotICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpP
TkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKQotICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfQ09OU1RBTlRfQ09MT1IpCi0gICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9N
SU5VU19DT05TVEFOVF9BTFBIQSkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRp
YmxlIHNyYyBhbmQgZHN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFi
aWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCi17Ci0gICAgc3dp
dGNoIChjYXApIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RF
U1Q6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgY2FwYWJpbGl0eSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAg
IGlmICghdikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVy
cyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwg
cmVxdWlyZWRNaW5TaXplKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1
aXJlZE1pblNpemUpCi17Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJh
eSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVu
aWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwg
R0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgcmV0dXJu
IHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwg
ZmFsc2UsIHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6
ZSkKLXsKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJp
eFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCks
IHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVk
TWluU2l6ZSkKLXsKLSAgICBpZiAoIWxvY2F0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghdikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAo
dHJhbnNwb3NlKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNp
emUgfHwgKHNpemUgJSByZXF1aXJlZE1pblNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZm
ZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7Ci0gICAg
c3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUjoKLSAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgotICAgICAgICBidWZmZXIgPSBtX2JvdW5k
QXJyYXlCdWZmZXIuZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgc3dpdGNoICh1c2FnZSkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZ
TkFNSUNfRFJBVzoKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKLSAgICB9Ci0gICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB1c2FnZSIpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJubyBpbWFnZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0
IFVSTCYgdXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7Ci0gICAg
aWYgKHVybC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7Ci0gICAgICAgIGVjID0g
U0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFz
RWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1
ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7Ci0gICAg
ICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBp
ZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQo
KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKLSAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0Rz
aXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQg
djIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVl
cy4KLSAgICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIHN3aXRj
aCAoZXhwZWN0ZWRTaXplKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIDI6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2
MCwgdjEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotICAgIFZlcnRleEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVy
dGV4QXR0cmliVmFsdWVbaW5kZXhdOwotICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7Ci0g
ICAgYXR0cmliVmFsdWUudmFsdWVbMV0gPSB2MTsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9
IHYyOwotICAgIGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXpl
KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgs
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNp
emVpIGV4cGVjdGVkU2l6ZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJh
eSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXpl
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlm
IChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3Rl
ZFNpemUpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhB
dHRyaWIxZnYoaW5kZXgsIHYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoK
LSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjNmdihpbmRleCwgdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSA0OgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmliVmFs
dWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0cmli
VmFsdWUuaW5pdFZhbHVlKCk7Ci0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6
ZTsgKytpaSkKLSAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWldID0gdltpaV07Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCi17Ci0gICAgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKLSAgICAKLSAgICBt
X3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJp
bmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyLT5vYmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcp
OwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKLSAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92
ZXJ0ZXhBdHRyaWIwQnVmZmVyOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KDApOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwotICAgIG1f
dmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKLSAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVsxXSA9IDAuMGY7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0g
PSAwLjBmOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKLSAgICBt
X2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgIG1fdmVydGV4QXR0cmliMFVz
ZWRCZWZvcmUgPSBmYWxzZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVs
YXRlVmVydGV4QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KQotewotICAgIGNvbnN0IFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7Ci0gICAgY29uc3QgVmVy
dGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKLSAg
ICBpZiAoIW1fY3VycmVudFByb2dyYW0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29s
IHVzaW5nVmVydGV4QXR0cmliMCA9IG1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRy
aWIwKCk7Ci0gICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMCkKLSAgICAgICAgbV92ZXJ0ZXhBdHRy
aWIwVXNlZEJlZm9yZSA9IHRydWU7Ci0gICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0
ZXhBdHRyaWIwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF1c2luZ1ZlcnRleEF0
dHJpYjAgJiYgIW1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyLT5vYmplY3QoKSk7Ci0gICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0g
KG51bVZlcnRleCArIDEpICogNCAqIHNpemVvZihHQzNEZmxvYXQpOwotICAgIGlmIChidWZmZXJE
YXRhU2l6ZSA+IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0
LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFT
aXplLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAgbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFTaXplOwotICAgICAgICBtX2ZvcmNlQXR0
cmliMEJ1ZmZlclJlZmlsbCA9IHRydWU7Ci0gICAgfQotICAgIGlmICh1c2luZ1ZlcnRleEF0dHJp
YjAKLSAgICAgICAgJiYgKG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsCi0gICAgICAgICAgICB8
fCBhdHRyaWJWYWx1ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQot
ICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyVmFsdWVbMV0KLSAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1
ZVszXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKLSAgICAgICAgYXV0byBi
dWZmZXJEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEp
ICogNCk7Ci0gICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAx
OyArK2lpKSB7Ci0gICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52
YWx1ZVswXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1
ZS52YWx1ZVsxXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJW
YWx1ZS52YWx1ZVsyXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRy
aWJWYWx1ZS52YWx1ZVszXTsKLSAgICAgICAgfQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVswXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOwotICAgICAgICBtX3ZlcnRleEF0dHJp
YjBCdWZmZXJWYWx1ZVsxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOwotICAgICAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwotICAgICAgICBt
X3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwotICAg
ICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgICAgICBtX2NvbnRl
eHQtPmJ1ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVm
ZmVyRGF0YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAw
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
c3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKLXsKLSAgICBjb25zdCBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIGlmIChz
dGF0ZS5idWZmZXJCaW5kaW5nICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgewotICAgICAgICBt
X2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2Jq
ZWN0T3JaZXJvKHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5v
cm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwotICAgIH0KLSAg
ICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwg
b2JqZWN0T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKLXsKLSAgICBSZWZQ
dHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOwotICAg
IGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKLSAgICBtX3Jlc3RvcmVBbGxvd2VkID0g
ZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLSAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0g
UmVhbExvc3RDb250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCi0gICAgICAgIG1fcmVzdG9yZVRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1h
eWJlUmVzdG9yZUNvbnRleHQoKQotewotICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKLSAgICBp
ZiAoIW1fY29udGV4dExvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSByZW5kZXJp
bmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9m
IHRoZQotICAgIC8vIHdlYmdsY29udGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVy
LgotICAgIC8vCi0gICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNl
dCB1cCBmb3IgcmVhbCB2cy4gc3ludGhldGljIGxvc3QKLSAgICAvLyBjb250ZXh0IGV2ZW50cywg
d2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZwot
ICAgIC8vIHRoZSByZXRyeSBsb29wIGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCi0gICAg
aWYgKCFtX3Jlc3RvcmVBbGxvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgY29udGV4
dExvc3RSZWFzb24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQigpOwotCi0gICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgotICAgICAgICAvLyBUaGUgR3JhcGhpY3ND
b250ZXh0M0QgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5Ci0gICAgICAgIC8vIHN1cHBv
cnQgR0xfQVJCX3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCi0g
ICAgICAgIC8vIFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVz
ZWQgdG8gZm9yY2UKLSAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCi0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6Ci0gICAgICAg
IC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0
IHdhcwotICAgICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCi0g
ICAgICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0
aGUgcGFnZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3Jpbmcg
dGhlIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJ
Tk5PQ0VOVF9DT05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBj
b250ZXh0IHRvIGJlIHJlc3RvcmVkLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6VU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gV2Fybi4gSWRlYWxs
eSwgcHJvbXB0IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCi0gICAgICAgIC8vIGNv
bnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8K
LSAgICAgICAgLy8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRp
bnVlIHJ1bm5pbmcKLSAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInll
cyIgc2hvdWxkIHdlIHN0YXJ0Ci0gICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUg
Y29udGV4dC4KLSAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBj
b250ZW50IG9uIHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRv
IHJlc2V0Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IGNh
bnZhcygpLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFt
ZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZy
YW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICBy
ZXR1cm47Ci0gICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3QoKTsKLSAgICBpZiAoIXJv
b3QpCi0gICAgICAgIHJldHVybjsKLSAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+
aG9zdFdpbmRvdygpOwotICAgIGlmICghaG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUobV9hdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0g
ICAgICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCi0gICAgICAg
ICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0
ZW1wdHMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRu
J3QgaGFwcGVuIGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBh
cHAuCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3
aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikg
ewotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKLSAgICAgICAg
RHJhd2luZ0J1ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1
dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJh
d2luZ0J1ZmZlcjo6RGlzY2FyZDsKLSAgICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJl
bWVudCBhbHBoYSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDog
RHJhd2luZ0J1ZmZlcjo6T3BhcXVlOwotICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5n
QnVmZmVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHBy
ZXNlcnZlLCBhbHBoYSk7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0K
LQotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwot
ICAgIHNldHVwRmxhZ3MoKTsKLSAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwotICAgIGNhbnZh
cygpLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmdsY29udGV4dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOwotfQotCi1TdHJp
bmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4
dCkgY29uc3QKLXsKLSAgICBpZiAodGV4dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6
ZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1cm4gdGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0
eSkKLSAgICA6IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj5bXT4oY2FwYWNpdHkpKQotICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKLXsKLX0K
LQotSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNo
ZTo6aW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpbnQgaTsKLSAgICBm
b3IgKGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBi
dWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghYnVmKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBidWJibGVUb0Zyb250KGkpOwotICAgICAgICByZXR1cm4g
YnVmOwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgMSk7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwotICAgIG1f
YnVmZmVyc1tpXSA9IFdURjo6bW92ZSh0ZW1wKTsKLQotICAgIEltYWdlQnVmZmVyKiBidWYgPSBt
X2J1ZmZlcnNbaV0uZ2V0KCk7Ci0gICAgYnViYmxlVG9Gcm9udChpKTsKLSAgICByZXR1cm4gYnVm
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6
YnViYmxlVG9Gcm9udChpbnQgaWR4KQotewotICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAt
LWkpCi0gICAgICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKLX0KLQotbmFt
ZXNwYWNlIHsKLQotICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgotICAgICAgICAg
ICAgcmV0dXJuICJJTlZBTElEX1ZBTFVFIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT046Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFU
SU9OIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKLSAg
ICAgICAgICAgIHJldHVybiAiT1VUX09GX01FTU9SWSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAgcmV0
dXJuICJJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiI7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKLSAgICAgICAgICAgIHJldHVybiAiQ09O
VEVYVF9MT1NUX1dFQkdMIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiV2ViR0wgRVJST1IoJTA0eCkiLCBlcnJvcik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLX0gLy8gbmFtZXNwYWNlIGFub255bW91cwotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5j
ZSBkaXNwbGF5KQotewotICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRp
c3BsYXkgPT0gRGlzcGxheUluQ29uc29sZSkgewotICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygi
V2ViR0w6ICIpICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rp
b25OYW1lKSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOwotICAgICAgcHJpbnRHTEVycm9y
VG9Db25zb2xlKHN0cik7Ci0gICAgfQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
ZXJyb3IpOwotfQotCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2Fybmlu
Z1RvQ29uc29sZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0
aW9uKQotewotICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7Ci0gICAgICAg
IFN0cmluZyBzdHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsg
IjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7Ci0gICAgICAgIHByaW50R0xFcnJvclRvQ29uc29s
ZShzdHIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3Rl
bmNpbFRlc3QoKQotewotICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKLQotICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1ZmZlcigpOwotICAgIGVsc2UgewotICAg
ICAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRl
eHRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+
c3RlbmNpbCgpOwotICAgIH0KLSAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfVEVTVCwKLSAgICAgICAgICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBo
YXZlU3RlbmNpbEJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFi
bGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCi17Ci0gICAgaWYg
KGVuYWJsZSkKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7Ci19Ci0KLUludFNpemUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2FudmFzU2l6ZSgpCi17Ci0gICAgcmV0dXJu
IEludFNpemUoY2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBd
KSwKLSAgICAgICAgICAgICAgICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4
Vmlld3BvcnREaW1zWzFdKSk7Ci19Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRNYXhEcmF3QnVmZmVycygpCi17Ci0gICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIGlmICghbV9tYXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAm
bV9tYXhEcmF3QnVmZmVycyk7Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAg
ICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNI
TUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKLSAgICAvLyBXRUJHTF9kcmF3X2J1
ZmZlcnMgcmVxdWlyZXMgTUFYX0NPTE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMu
Ci0gICAgcmV0dXJuIHN0ZDo6bWluKG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2ht
ZW50cyk7Ci19Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0
dGFjaG1lbnRzKCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhU
LCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKLSAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1l
bnRzOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIo
R0MzRGVudW0gYnVmKQotewotICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKLXsKLSAg
ICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCi17Ci0g
ICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJE
QmluZGluZy5nZXQoKSwgZWMpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Vw
cG9ydHNEcmF3QnVmZmVycygpCi17Ci0gICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJl
bWVudHNDaGVja2VkKSB7Ci0gICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0No
ZWNrZWQgPSB0cnVlOwotICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3
QnVmZmVyczo6c3VwcG9ydGVkKHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gbV9kcmF3QnVmZmVy
c1N1cHBvcnRlZDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJ
bnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBH
QzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3
QXJyYXlzSW5zdGFuY2VkIiwgbW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAocHJpbWNvdW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdBcnJheXNJbnN0
YW5jZWQiLCAicHJpbWNvdW50IDwgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCFwcmltY291bnQpIHsKLSAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotCi0gICAgYm9vbCB2
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkpCi0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJp
YjAoZmlyc3QgKyBjb3VudCAtIDEpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAg
ICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgdHJ1
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHByaW1jb3VudCk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJy
YXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKLSAgICBpZiAoIWlz
R0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0
b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVT
Mk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJy
YXlzSW5zdGFuY2VkIiwgZmFsc2UpOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwg
R0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7Ci0g
ICAgaWYgKCF2YWxpZGF0ZURyYXdFbGVtZW50cygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgbW9k
ZSwgY291bnQsIHR5cGUsIG9mZnNldCwgbnVtRWxlbWVudHMpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAocHJpbWNvdW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdFbGVtZW50c0luc3RhbmNlZCIsICJw
cmltY291bnQgPCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXByaW1j
b3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAgICBib29sIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAg
ICAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJl
Y2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxl
bWVudHMpOwotICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhB
dHRyaWIwKG51bUVsZW1lbnRzKTsKLSAgICB9Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgp
KQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNl
ZCIsIHRydWUpOwotICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNv
dW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBwcmltY291bnQpOwot
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCi0g
ICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAg
aWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5l
c3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIGZhbHNlKTsKLSAgICBtYXJrQ29udGV4dENoYW5n
ZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYkRpdmlz
b3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGluZGV4ID49IG1f
bWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlzb3IiLCAiaW5kZXggb3V0
IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwotICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7Ci19Ci0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgwOSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
V2ViR0xSZW5kZXJpbmdDb250ZXh0X2gKLSNkZWZpbmUgV2ViR0xSZW5kZXJpbmdDb250ZXh0X2gK
LQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaCIKLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlRpbWVy
LmgiCi0jaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1
ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9JbnQzMkFycmF5
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQU5HTEVJbnN0YW5jZWRBcnJheXM7Ci1jbGFzcyBFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWM7Ci1jbGFzcyBFWFRTaGFkZXJUZXh0dXJlTE9EOwotY2xhc3MgSFRNTEltYWdl
RWxlbWVudDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsKLWNs
YXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBPRVNTdGFuZGFyZERlcml2YXRp
dmVzOwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0OwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0TGluZWFy
OwotY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdDsKLWNsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXI7Ci1jbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKLWNsYXNzIE9FU0VsZW1lbnRJbmRl
eFVpbnQ7Ci1jbGFzcyBXZWJHTEFjdGl2ZUluZm87Ci1jbGFzcyBXZWJHTEJ1ZmZlcjsKLWNsYXNz
IFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xDb250ZXh0T2JqZWN0OwotY2xhc3MgV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJU
QzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOwotY2xhc3MgV2ViR0xDb250ZXh0
QXR0cmlidXRlczsKLWNsYXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87Ci1jbGFzcyBXZWJHTERl
YnVnU2hhZGVyczsKLWNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlOwotY2xhc3MgV2ViR0xEcmF3QnVm
ZmVyczsKLWNsYXNzIFdlYkdMRXh0ZW5zaW9uOwotY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsKLWNs
YXNzIFdlYkdMTG9zZUNvbnRleHQ7Ci1jbGFzcyBXZWJHTE9iamVjdDsKLWNsYXNzIFdlYkdMUHJv
Z3JhbTsKLWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwotY2xhc3MgV2ViR0xTaGFkZXI7Ci1jbGFz
cyBXZWJHTFNoYXJlZE9iamVjdDsKLWNsYXNzIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0Owot
Y2xhc3MgV2ViR0xUZXh0dXJlOwotY2xhc3MgV2ViR0xVbmlmb3JtTG9jYXRpb247Ci1jbGFzcyBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwot
Ci1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShIVE1MQ2FudmFz
RWxlbWVudCosIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqKTsKLSAgICB2aXJ0dWFsIH5XZWJHTFJl
bmRlcmluZ0NvbnRleHQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGFjY2VsZXJhdGVkIDNkIGNhbnZhcyBvbiBXaW5kb3dzLgotICAgIHZpcnR1YWwgYm9v
bCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSNlbHNl
Ci0gICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9Ci0jZW5kaWYKLQotICAgIGludCBkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdDsK
LSAgICBpbnQgZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0OwotCi0gICAgdm9pZCBhY3RpdmVU
ZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGF0dGFj
aFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBiaW5kQnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZFRleHR1
cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0
IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSk7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9uKEdDM0RlbnVt
IG1vZGUpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0Is
IEdDM0RlbnVtIG1vZGVBbHBoYSk7Ci0gICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3Rv
ciwgR0MzRGVudW0gZGZhY3Rvcik7Ci0gICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51
bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRz
dEFscGhhKTsKLQotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9u
ZyBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYnVmZmVy
RGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBHQzNEZW51bSB1c2FnZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFy
cmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBB
cnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYnVmZmVyU3ViRGF0
YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0
YSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhHQzNEZW51bSB0YXJnZXQpOwotICAgIHZvaWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spOwot
ICAgIHZvaWQgY2xlYXJDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0Rm
bG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgY2xlYXJEZXB0aChHQzNEZmxv
YXQpOwotICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQpOwotICAgIHZvaWQgY29sb3JNYXNr
KEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdD
M0Rib29sZWFuIGFscGhhKTsKLSAgICB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwotICAgIHZvaWQgY29tcHJl
c3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBB
cnJheUJ1ZmZlclZpZXcqIGRhdGEpOwotCi0gICAgdm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlcik7Ci0gICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLQotICAgIFBh
c3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZUJ1ZmZlcigpOwotICAgIFBhc3NSZWZQdHI8V2Vi
R0xGcmFtZWJ1ZmZlcj4gY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdM
UHJvZ3JhbT4gY3JlYXRlUHJvZ3JhbSgpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZm
ZXI+IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IGNy
ZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0
cjxXZWJHTFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHZvaWQgY3VsbEZhY2UoR0Mz
RGVudW0gbW9kZSk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciopOwotICAg
IHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwotICAgIHZvaWQgZGVs
ZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKLSAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihX
ZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgIHZvaWQgZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKik7
Ci0gICAgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSopOwotCi0gICAgdm9pZCBkZXB0
aEZ1bmMoR0MzRGVudW0pOwotICAgIHZvaWQgZGVwdGhNYXNrKEdDM0Rib29sZWFuKTsKLSAgICB2
b2lkIGRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQgekZhcik7Ci0gICAgdm9p
ZCBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCBkaXNhYmxlKEdDM0RlbnVtIGNhcCk7Ci0gICAgdm9pZCBkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwg
R0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOwotICAgIHZvaWQgZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIGZpbmlzaCgpOwotICAgIHZvaWQgZmx1c2goKTsKLSAgICB2b2lkIGZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVu
dW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBHQzNEaW50
IGxldmVsLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9k
ZSk7Ci0gICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpOwotCi0gICAgUGFz
c1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qLCBH
QzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xBY3Rp
dmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGluZGV4LCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFt
KiwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIEdD
M0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKLSAgICBXZWJHTEdldEluZm8gZ2V0QnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXM+IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgR0MzRGVudW0gZ2V0
RXJyb3IoKTsKLSAgICBXZWJHTEV4dGVuc2lvbiogZ2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFBhcmFtZXRlcihHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRQcm9ncmFtUGFyYW1l
dGVyKFdlYkdMUHJvZ3JhbSosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
U3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBXZWJHTEdldEluZm8gZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0
U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciosIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0PiBnZXRT
aGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lz
aW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoV2Vi
R0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgVmVjdG9yPFN0cmluZz4gZ2V0U3VwcG9y
dGVkRXh0ZW5zaW9ucygpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRUZXhQYXJhbWV0ZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0
SW5mbyBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+
IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFZlcnRleEF0dHJpYihHQzNEdWludCBpbmRl
eCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBsb25nIGxvbmcgZ2V0VmVy
dGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSk7Ci0KLSAgICB2
b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKTsKLSAgICBHQzNEYm9vbGVh
biBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOwotICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpIGNvbnN0
OwotICAgIEdDM0Rib29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXApOwotICAgIEdDM0Rib29s
ZWFuIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwotICAgIEdDM0Rib29sZWFuIGlz
UHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKLSAgICBHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihX
ZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgIEdDM0Rib29sZWFuIGlzU2hhZGVyKFdlYkdMU2hhZGVy
Kik7Ci0gICAgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFdlYkdMVGV4dHVyZSopOwotCi0gICAgdm9p
ZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50IHBhcmFtKTsKLSAgICB2b2lkIHBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3Rv
ciwgR0MzRGZsb2F0IHVuaXRzKTsKLSAgICB2b2lkIHJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci0gICAgdm9pZCByZW5kZXJidWZm
ZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShH
QzNEZmxvYXQgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7Ci0gICAgdm9pZCBzY2lzc29yKEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwot
ICAgIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCBy
ZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51
bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7Ci0gICAg
dm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCk7Ci0gICAgdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE9wKEdDM0Rl
bnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7Ci0gICAgdm9pZCBzdGVu
Y2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFp
bCwgR0MzRGVudW0genBhc3MpOwotCi0gICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
Ci0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJy
YXlCdWZmZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0
YSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhj
ZXB0aW9uQ29kZSYpOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlk
ZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAgICB2b2lkIHRleFBhcmFt
ZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKTsK
LSAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCBwYXJhbSk7Ci0KLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5
QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsK
LSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZp
ZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNlbmRpZgotCi0gICAgdm9pZCB1bmlmb3Jt
MWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZv
cm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50
KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJm
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yaXYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0z
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2koY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RGludCB6LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCB1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxv
YXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9y
bTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTRp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0
KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZv
cm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBz
aXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4
NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYp
OwotCi0gICAgdm9pZCB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7
Ci0KLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCk7
Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSog
dmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpOwotICAgIHZvaWQgdmVydGV4
QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNE
c2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAgICB2b2lkIHZl
cnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXpl
aSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdyk7Ci0gICAgdm9pZCB2
ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAg
ICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMs
IEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQg
aW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXpl
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHN0cmlkZSwgbG9uZyBs
b25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB2aWV3cG9ydChHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLQotICAg
IC8vIFdFQktJVF9sb3NlX2NvbnRleHQgc3VwcG9ydAotICAgIGVudW0gTG9zdENvbnRleHRNb2Rl
IHsKLSAgICAgICAgLy8gTG9zdCBjb250ZXh0IG9jY3VycmVkIGF0IHRoZSBncmFwaGljcyBzeXN0
ZW0gbGV2ZWwuCi0gICAgICAgIFJlYWxMb3N0Q29udGV4dCwKLQotICAgICAgICAvLyBMb3N0IGNv
bnRleHQgcHJvdm9rZWQgYnkgV0VCS0lUX2xvc2VfY29udGV4dC4KLSAgICAgICAgU3ludGhldGlj
TG9zdENvbnRleHQKLSAgICB9OwotICAgIHZvaWQgZm9yY2VMb3N0Q29udGV4dChMb3N0Q29udGV4
dE1vZGUpOwotICAgIHZvaWQgZm9yY2VSZXN0b3JlQ29udGV4dCgpOwotICAgIHZvaWQgbG9zZUNv
bnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogZ3Jh
cGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KLSAgICBX
ZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
R3JvdXAuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpOwotCi0gICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci0gICAgdmlydHVhbCB2b2lk
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgb3ZlcnJpZGU7Ci0gICAgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7Ci0KLSAgICB2
b2lkIHJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOwotICAgIHZvaWQgcmVt
b3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKLSAgICAKLSAgICB1bnNpZ25l
ZCBnZXRNYXhWZXJ0ZXhBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gbV9tYXhWZXJ0ZXhBdHRyaWJz
OyB9Ci0KLSAgICAvLyBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIGV4dGVuc2lvbiBmdW5jdGlvbnMu
Ci0gICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7Ci0gICAgdm9pZCBkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKLSAgICB2b2lk
IHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpOwot
Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJHTERyYXdCdWZmZXJzOwotICAgIGZyaWVu
ZCBjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsK
LSAgICBmcmllbmQgY2xhc3MgT0VTVmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgZnJpZW5kIGNsYXNz
IFdlYkdMRGVidWdTaGFkZXJzOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0
dXJlQVRDOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM7Ci0g
ICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOwotICAgIGZyaWVuZCBj
bGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjazsKLSAgICBmcmll
bmQgY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKLQotICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
KTsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOwot
ICAgIHZvaWQgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKLSAgICB2b2lkIHNldHVwRmxhZ3MoKTsK
LQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBhZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKLSAgICB2
b2lkIGFkZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0Kik7Ci0gICAgdm9pZCBkZXRh
Y2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7Ci0KLSAgICB2b2lkIGRlc3Ryb3lHcmFwaGljc0NvbnRl
eHQzRCgpOwotICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICAvLyBRdWVyeSB3
aGV0aGVyIGl0IGlzIGJ1aWx0IG9uIHRvcCBvZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRp
b24uCi0gICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgeyByZXR1cm4gbV9pc0dMRVMyQ29tcGxp
YW50OyB9Ci0gICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGlzIE5QT1Qgc3Ry
aWN0LgotICAgIGJvb2wgaXNHTEVTMk5QT1RTdHJpY3QoKSB7IHJldHVybiBtX2lzR0xFUzJOUE9U
U3RyaWN0OyB9Ci0gICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGdlbmVyYXRl
cyBlcnJvcnMgb24gb3V0LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzZXMuCi0gICAgYm9vbCBpc0Vy
cm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgeyByZXR1cm4gbV9pc0Vycm9yR2Vu
ZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzOyB9Ci0gICAgLy8gUXVlcnkgaWYgdGhlIEdMIGlt
cGxlbWVudGF0aW9uIGluaXRpYWxpemVzIHRleHR1cmVzL3JlbmRlcmJ1ZmZlcnMgdG8gMC4KLSAg
ICBib29sIGlzUmVzb3VyY2VTYWZlKCkgeyByZXR1cm4gbV9pc1Jlc291cmNlU2FmZTsgfQotICAg
IC8vIFF1ZXJ5IGlmIGRlcHRoX3N0ZW5jaWwgYnVmZmVyIGlzIHN1cHBvcnRlZC4KLSAgICBib29s
IGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkgeyByZXR1cm4gbV9pc0RlcHRoU3RlbmNpbFN1cHBv
cnRlZDsgfQotCi0gICAgLy8gSGVscGVyIHRvIHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBP
cGVuR0wgZGF0YSB0eXBlcwotICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgotICAg
IHVuc2lnbmVkIGludCBzaXplSW5CeXRlcyhHQzNEZW51bSB0eXBlKTsKLQotICAgIC8vIEJhc2lj
IHZhbGlkYXRpb24gb2YgY291bnQgYW5kIG9mZnNldCBhZ2FpbnN0IG51bWJlciBvZiBlbGVtZW50
cyBpbiBlbGVtZW50IGFycmF5IGJ1ZmZlcgotICAgIGJvb2wgdmFsaWRhdGVFbGVtZW50QXJyYXlT
aXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpOwot
Ci0gICAgLy8gQ29uc2VydmF0aXZlIGJ1dCBxdWljayBpbmRleCB2YWxpZGF0aW9uCi0gICAgYm9v
bCB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQm
IG51bUVsZW1lbnRzUmVxdWlyZWQpOwotCi0gICAgLy8gUHJlY2lzZSBidXQgc2xvdyBpbmRleCB2
YWxpZGF0aW9uIC0tIG9ubHkgZG9uZSBpZiBjb25zZXJ2YXRpdmUgY2hlY2tzIGZhaWwKLSAgICBi
b29sIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0
eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpOwot
ICAgIGJvb2wgdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwg
dW5zaWduZWQgcHJpbWl0aXZlQ291bnQgPSAwKTsKLQotICAgIGJvb2wgdmFsaWRhdGVXZWJHTE9i
amVjdChjb25zdCBjaGFyKiwgV2ViR0xPYmplY3QqKTsKLQotICAgIGJvb2wgdmFsaWRhdGVEcmF3
QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRGludCBm
aXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKLSAgICBib29sIHZh
bGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNp
Z25lZCYgbnVtRWxlbWVudHMpOwotCi0gICAgLy8gQWRkcyBhIGNvbXByZXNzZWQgdGV4dHVyZSBm
b3JtYXQuCi0gICAgdm9pZCBhZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChHQzNEZW51bSk7Ci0K
LSAgICBQYXNzUmVmUHRyPEltYWdlPiBkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0jaWYgRU5BQkxFKFZJ
REVPKQotICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0Vs
ZW1lbnQqLCBCYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJik7Ci0jZW5kaWYKLQotICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwotICAgIFJlZlB0cjxXZWJHTENv
bnRleHRHcm91cD4gbV9jb250ZXh0R3JvdXA7Ci0KLSAgICAvLyBPcHRpb25hbCBzdHJ1Y3R1cmUg
Zm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQgb2YgZGlyZWN0bHkKLSAg
ICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0LgotICAgIFJlZlB0cjxEcmF3aW5n
QnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7Ci0KLSAgICAvLyBEaXNwYXRjaGVzIGEgY29udGV4dCBs
b3N0IGV2ZW50IG9uY2UgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IG9uZSBpcyBuZWVkZWQuCi0gICAg
Ly8gVGhpcyBpcyB1c2VkIGJvdGggZm9yIHN5bnRoZXRpYyBhbmQgcmVhbCBjb250ZXh0IGxvc3Nl
cy4gRm9yIHJlYWwgb25lcywgaXQncwotICAgIC8vIGxpa2VseSB0aGF0IHRoZXJlJ3Mgbm8gSmF2
YVNjcmlwdCBvbiB0aGUgc3RhY2ssIGJ1dCB0aGF0IG1pZ2h0IGJlIGRlcGVuZGVudAotICAgIC8v
IG9uIGhvdyBleGFjdGx5IHRoZSBwbGF0Zm9ybSBkaXNjb3ZlcnMgdGhhdCB0aGUgY29udGV4dCB3
YXMgbG9zdC4gRm9yIGJldHRlcgotICAgIC8vIHBvcnRhYmlsaXR5IHdlIGFsd2F5cyBkZWZlciB0
aGUgZGlzcGF0Y2ggb2YgdGhlIGV2ZW50LgotICAgIFRpbWVyIG1fZGlzcGF0Y2hDb250ZXh0TG9z
dEV2ZW50VGltZXI7Ci0gICAgYm9vbCBtX3Jlc3RvcmVBbGxvd2VkOwotICAgIFRpbWVyIG1fcmVz
dG9yZVRpbWVyOwotCi0gICAgYm9vbCBtX25lZWRzVXBkYXRlOwotICAgIGJvb2wgbV9tYXJrZWRD
YW52YXNEaXJ0eTsKLSAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+IG1fY29udGV4dE9i
amVjdHM7Ci0KLSAgICAvLyBMaXN0IG9mIGJvdW5kIFZCTydzLiBVc2VkIHRvIG1haW50YWluIGlu
Zm8gYWJvdXQgc2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBhbmQgc3RvcmVkIHZhbHVlcyBmb3IgRUxF
TUVOVF9BUlJBWV9CVUZGRVIKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG1fYm91bmRBcnJheUJ1
ZmZlcjsKLSAgICAKLSAgICBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gbV9kZWZh
dWx0VmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVM+IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdDsKLSAgICB2b2lkIHNldEJvdW5kVmVydGV4QXJy
YXlPYmplY3QoUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBhcnJheU9iamVj
dCkKLSAgICB7Ci0gICAgICAgIGlmIChhcnJheU9iamVjdCkKLSAgICAgICAgICAgIG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdCA9IGFycmF5T2JqZWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsK
LSAgICB9Ci0gICAgCi0gICAgY2xhc3MgVmVydGV4QXR0cmliVmFsdWUgewotICAgIHB1YmxpYzoK
LSAgICAgICAgVmVydGV4QXR0cmliVmFsdWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbml0
VmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBpbml0VmFsdWUoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB2YWx1ZVswXSA9IDAuMGY7Ci0gICAgICAgICAgICB2YWx1
ZVsxXSA9IDAuMGY7Ci0gICAgICAgICAgICB2YWx1ZVsyXSA9IDAuMGY7Ci0gICAgICAgICAgICB2
YWx1ZVszXSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEdDM0RmbG9hdCB2
YWx1ZVs0XTsKLSAgICB9OwotICAgIFZlY3RvcjxWZXJ0ZXhBdHRyaWJWYWx1ZT4gbV92ZXJ0ZXhB
dHRyaWJWYWx1ZTsKLSAgICB1bnNpZ25lZCBtX21heFZlcnRleEF0dHJpYnM7Ci0gICAgUmVmUHRy
PFdlYkdMQnVmZmVyPiBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7Ci0gICAgbG9uZyBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJTaXplOwotICAgIEdDM0RmbG9hdCBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVs0XTsKLSAgICBib29sIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsOwotICAgIGJvb2wgbV92
ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZTsKLQotICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG1fY3Vy
cmVudFByb2dyYW07Ci0gICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG1fZnJhbWVidWZmZXJC
aW5kaW5nOwotICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbV9yZW5kZXJidWZmZXJCaW5k
aW5nOwotICAgIHN0cnVjdCBUZXh0dXJlVW5pdFN0YXRlIHsKLSAgICAgICAgUmVmUHRyPFdlYkdM
VGV4dHVyZT4gdGV4dHVyZTJEQmluZGluZzsKLSAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4g
dGV4dHVyZUN1YmVNYXBCaW5kaW5nOwotICAgIH07Ci0gICAgVmVjdG9yPFRleHR1cmVVbml0U3Rh
dGU+IG1fdGV4dHVyZVVuaXRzOwotICAgIHVuc2lnbmVkIGxvbmcgbV9hY3RpdmVUZXh0dXJlVW5p
dDsKLQotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxhY2tUZXh0dXJlMkQ7Ci0gICAgUmVm
UHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFja1RleHR1cmVDdWJlTWFwOwotCi0gICAgVmVjdG9yPEdD
M0RlbnVtPiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKLQotICAgIC8vIEZpeGVkLXNpemUg
Y2FjaGUgb2YgcmV1c2FibGUgaW1hZ2UgYnVmZmVycyBmb3IgdmlkZW8gdGV4SW1hZ2UyRCBjYWxs
cy4KLSAgICBjbGFzcyBMUlVJbWFnZUJ1ZmZlckNhY2hlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IExSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5KTsKLSAgICAgICAgLy8gVGhlIHBvaW50
ZXIgcmV0dXJuZWQgaXMgb3duZWQgYnkgdGhlIGltYWdlIGJ1ZmZlciBtYXAuCi0gICAgICAgIElt
YWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKTsKLSAgICBwcml2YXRl
OgotICAgICAgICB2b2lkIGJ1YmJsZVRvRnJvbnQoaW50IGlkeCk7Ci0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+W10+IG1fYnVmZmVyczsKLSAgICAg
ICAgaW50IG1fY2FwYWNpdHk7Ci0gICAgfTsKLSAgICBMUlVJbWFnZUJ1ZmZlckNhY2hlIG1fZ2Vu
ZXJhdGVkSW1hZ2VDYWNoZTsKLQotICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKLSAgICBH
QzNEaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOwotICAgIEdDM0RpbnQgbV9tYXhSZW5kZXJi
dWZmZXJTaXplOwotICAgIEdDM0RpbnQgbV9tYXhWaWV3cG9ydERpbXNbMl07Ci0gICAgR0MzRGlu
dCBtX21heFRleHR1cmVMZXZlbDsKLSAgICBHQzNEaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZl
bDsKLQotICAgIEdDM0RpbnQgbV9tYXhEcmF3QnVmZmVyczsKLSAgICBHQzNEaW50IG1fbWF4Q29s
b3JBdHRhY2htZW50czsKLSAgICBHQzNEZW51bSBtX2JhY2tEcmF3QnVmZmVyOwotICAgIGJvb2wg
bV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZDsKLSAgICBib29sIG1fZHJhd0J1
ZmZlcnNTdXBwb3J0ZWQ7Ci0KLSAgICBHQzNEaW50IG1fcGFja0FsaWdubWVudDsKLSAgICBHQzNE
aW50IG1fdW5wYWNrQWxpZ25tZW50OwotICAgIGJvb2wgbV91bnBhY2tGbGlwWTsKLSAgICBib29s
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYTsKLSAgICBHQzNEZW51bSBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uOwotICAgIGJvb2wgbV9jb250ZXh0TG9zdDsKLSAgICBMb3N0Q29udGV4dE1v
ZGUgbV9jb250ZXh0TG9zdE1vZGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
bV9hdHRyaWJ1dGVzOwotCi0gICAgYm9vbCBtX2xheWVyQ2xlYXJlZDsKLSAgICBHQzNEZmxvYXQg
bV9jbGVhckNvbG9yWzRdOwotICAgIGJvb2wgbV9zY2lzc29yRW5hYmxlZDsKLSAgICBHQzNEZmxv
YXQgbV9jbGVhckRlcHRoOwotICAgIEdDM0RpbnQgbV9jbGVhclN0ZW5jaWw7Ci0gICAgR0MzRGJv
b2xlYW4gbV9jb2xvck1hc2tbNF07Ci0gICAgR0MzRGJvb2xlYW4gbV9kZXB0aE1hc2s7Ci0KLSAg
ICBib29sIG1fc3RlbmNpbEVuYWJsZWQ7Ci0gICAgR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywgbV9z
dGVuY2lsTWFza0JhY2s7Ci0gICAgR0MzRGludCBtX3N0ZW5jaWxGdW5jUmVmLCBtX3N0ZW5jaWxG
dW5jUmVmQmFjazsgLy8gTm90ZSB0aGF0IHRoZXNlIGFyZSB0aGUgdXNlciBzcGVjaWZpZWQgdmFs
dWVzLCBub3QgdGhlIGludGVybmFsIGNsYW1wZWQgdmFsdWUuCi0gICAgR0MzRHVpbnQgbV9zdGVu
Y2lsRnVuY01hc2ssIG1fc3RlbmNpbEZ1bmNNYXNrQmFjazsKLQotICAgIGJvb2wgbV9pc0dMRVMy
Q29tcGxpYW50OwotICAgIGJvb2wgbV9pc0dMRVMyTlBPVFN0cmljdDsKLSAgICBib29sIG1faXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlczsKLSAgICBib29sIG1faXNSZXNvdXJj
ZVNhZmU7Ci0gICAgYm9vbCBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkOwotICAgIGJvb2wgbV9p
c1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQ7Ci0KLSAgICBib29sIG1fc3ludGhlc2l6ZWRFcnJvcnNU
b0NvbnNvbGU7Ci0gICAgaW50IG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkOwotCi0gICAg
Ly8gQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgY2FuIGJlIGNyZWF0ZWQgaW4gYSBzdGF0ZSB3aGVy
ZSBpdCBhcHBlYXJzIGFzCi0gICAgLy8gYSB2YWxpZCBhbmQgYWN0aXZlIGNvbnRleHQsIGJ1dCB3
aWxsIG5vdCBleGVjdXRlIGFueSBpbXBvcnRhbnQgb3BlcmF0aW9ucwotICAgIC8vIHVudGlsIGl0
cyBsb2FkIHBvbGljeSBpcyBjb21wbGV0ZWx5IHJlc29sdmVkLgotICAgIGJvb2wgbV9pc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uOwotICAgIGJvb2wgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0
aW9uOwotICAgIGJvb2wgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpOwotCi0gICAgLy8gRW5hYmxl
ZCBleHRlbnNpb24gb2JqZWN0cy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljPiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8RVhUU2hhZGVyVGV4dHVyZUxPRD4gbV9leHRTaGFkZXJUZXh0dXJlTE9EOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlRmxvYXQ+IG1fb2VzVGV4dHVyZUZsb2F0OwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlRmxvYXRMaW5lYXI+IG1fb2VzVGV4dHVyZUZsb2F0
TGluZWFyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0PiBtX29lc1Rl
eHR1cmVIYWxmRmxvYXQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXI+IG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
T0VTU3RhbmRhcmREZXJpdmF0aXZlcz4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxPRVNWZXJ0ZXhBcnJheU9iamVjdD4gbV9vZXNWZXJ0ZXhBcnJheU9iamVj
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTRWxlbWVudEluZGV4VWludD4gbV9vZXNFbGVtZW50
SW5kZXhVaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTExvc2VDb250ZXh0PiBtX3dlYmds
TG9zZUNvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdSZW5kZXJlckluZm8+
IG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEZWJ1
Z1NoYWRlcnM+IG1fd2ViZ2xEZWJ1Z1NoYWRlcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVBVEM+IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPiBtX3dlYmdsQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEM+IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEM7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkdMRGVwdGhUZXh0dXJlPiBtX3dlYmdsRGVwdGhUZXh0dXJlOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJHTERyYXdCdWZmZXJzPiBtX3dlYmdsRHJhd0J1ZmZlcnM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEFOR0xFSW5zdGFuY2VkQXJyYXlzPiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzOwot
Ci0gICAgLy8gSGVscGVycyBmb3IgZ2V0UGFyYW1ldGVyIGFuZCBvdGhlcnMKLSAgICBXZWJHTEdl
dEluZm8gZ2V0Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdl
dEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEZs
b2F0UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0SW50UGFyYW1ldGVy
KEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdDM0Rl
bnVtKTsKLQotICAgIC8vIENsZWFyIHRoZSBiYWNrYnVmZmVyIGlmIGl0IHdhcyBjb21wb3NpdGVk
IHNpbmNlIHRoZSBsYXN0IG9wZXJhdGlvbi4KLSAgICAvLyBjbGVhck1hc2sgaXMgc2V0IHRvIHRo
ZSBiaXRmaWVsZCBvZiBhbnkgY2xlYXIgdGhhdCB3b3VsZCBoYXBwZW4gYW55d2F5IGF0IHRoaXMg
dGltZQotICAgIC8vIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoYXQgY2xlYXIg
aXMgbm93IHVubmVjZXNzYXJ5LgotICAgIGJvb2wgY2xlYXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZp
ZWxkIGNsZWFyTWFzayA9IDApOwotCi0gICAgLy8gSGVscGVyIHRvIHJlc3RvcmUgc3RhdGUgdGhh
dCBjbGVhcmluZyB0aGUgZnJhbWVidWZmZXIgbWF5IGRlc3Ryb3kuCi0gICAgdm9pZCByZXN0b3Jl
U3RhdGVBZnRlckNsZWFyKCk7Ci0KLSAgICB2b2lkIHRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCB0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFn
ZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERv
bVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2Rl
Jik7Ci0KLSAgICB2b2lkIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9v
bCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwotCi0gICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIGZvciBjb3B5VGV4e1N1Yn1JbWFnZSwgY2hlY2sgd2hldGhlciB0
aGUgaW50ZXJuYWxmb3JtYXQKLSAgICAvLyBhbmQgdGhlIGNvbG9yIGJ1ZmZlciBmb3JtYXQgb2Yg
dGhlIGN1cnJlbnQgYm91bmQgZnJhbWVidWZmZXIgY29tYmluYXRpb24KLSAgICAvLyBpcyB2YWxp
ZC4KLSAgICBib29sIGlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFs
aWQoR0MzRGVudW0gdGV4SW50ZXJuYWxGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0
KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVy
J3MgY29sb3IgYnVmZmVyIGZvcm1hdC4KLSAgICBHQzNEZW51bSBnZXRCb3VuZEZyYW1lYnVmZmVy
Q29sb3JGb3JtYXQoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5k
IGZyYW1lYnVmZmVyJ3Mgd2lkdGguCi0gICAgaW50IGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgp
OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIn
cyBoZWlnaHQuCi0gICAgaW50IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKTsKLQotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byB2ZXJpZnkgbGltaXRzIG9uIHRoZSBsZW5ndGggb2YgdW5pZm9y
bSBhbmQgYXR0cmlidXRlIGxvY2F0aW9ucy4KLSAgICBib29sIHZhbGlkYXRlTG9jYXRpb25MZW5n
dGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmKTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBzaXplIGlzIG5vbi1uZWdhdGl2ZS4KLSAgICAvLyBH
ZW5lcmF0ZSBHTCBlcnJvciBhbmQgcmV0dXJuIGZhbHNlIGZvciBuZWdhdGl2ZSBpbnB1dHM7IG90
aGVyd2lzZSwgcmV0dXJuIHRydWUuCi0gICAgYm9vbCB2YWxpZGF0ZVNpemUoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdG8gY2hlY2sgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBiZWxvbmcgdG8g
dGhlCi0gICAgLy8gQVNDSUkgc3Vic2V0IGFzIGRlZmluZWQgaW4gR0xTTCBFUyAxLjAgc3BlYyBz
ZWN0aW9uIDMuMS4KLSAgICBib29sIHZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sg
dGFyZ2V0IGFuZCB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQuCi0gICAgLy8gR2VuZXJhdGUg
R0wgZXJyb3JzIGFuZCByZXR1cm4gMCBpZiB0YXJnZXQgaXMgaW52YWxpZCBvciB0ZXh0dXJlIGJv
dW5kIGlzCi0gICAgLy8gbnVsbC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSB0ZXh0dXJlIGJvdW5k
IHRvIHRoZSB0YXJnZXQuCi0gICAgV2ViR0xUZXh0dXJlKiB2YWxpZGF0ZVRleHR1cmVCaW5kaW5n
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVu
dW1zRm9yQ3ViZU1hcCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQg
Zm9ybWF0L3R5cGUgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgotICAgIC8vIEdl
bmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZh
bGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZl
bCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgbGV2ZWwgZm9yIGZ1
bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgotICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBh
bmQgcmV0dXJucyBmYWxzZSBpZiBsZXZlbCBpcyBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVU
ZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwpOwotCi0gICAgZW51bSBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSB7
Ci0gICAgICAgIE5vdFRleFN1YkltYWdlMkQsCi0gICAgICAgIFRleFN1YkltYWdlMkQsCi0gICAg
fTsKLQotICAgIGVudW0gVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHsKLSAgICAgICAgU291
cmNlQXJyYXlCdWZmZXJWaWV3LAotICAgICAgICBTb3VyY2VJbWFnZURhdGEsCi0gICAgICAgIFNv
dXJjZUhUTUxJbWFnZUVsZW1lbnQsCi0gICAgICAgIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LAot
ICAgICAgICBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LAotICAgIH07Ci0KLSAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBjaGVjayBpZiB0aGUgaW5wdXQgZm9ybWF0
L3R5cGUvbGV2ZWwvdGFyZ2V0L3dpZHRoL2hlaWdodC9ib3JkZXIveG9mZnNldC95b2Zmc2V0IGFy
ZSB2YWxpZC4KLSAgICAvLyBPdGhlcndpc2UsIGl0IHdvdWxkIHJldHVybiBxdWlja2x5IHdpdGhv
dXQgZG9pbmcgb3RoZXIgd29yay4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuYyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFs
aWRhdGlvblNvdXJjZVR5cGUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKLSAgICAgICAgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUlt
YWdlLgotICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJh
bWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpOwotCi0gICAgZW51bSBOdWxsRGlzcG9z
aXRpb24gewotICAgICAgICBOdWxsQWxsb3dlZCwKLSAgICAgICAgTnVsbE5vdEFsbG93ZWQKLSAg
ICB9OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGdpdmVu
IEFycmF5QnVmZmVyVmlldwotICAgIC8vIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUgYW5kIGNvbnRh
aW5zIGVub3VnaCBkYXRhIGZvciB0aGUgdGV4SW1hZ2UgY2FsbC4KLSAgICAvLyBHZW5lcmF0ZXMg
R0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAg
ICBib29sIHZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
aW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJy
YXlCdWZmZXJWaWV3KiBwaXhlbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGxE
aXNwb3NpdGlvbik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBnaXZl
biB0ZXh0dXJlIGZvcm1hdCBpcyBzZXR0YWJsZSBhcyBpbgotICAgIC8vIHlvdSBjYW4gc3VwcGx5
IGRhdGEgdG8gdGV4SW1hZ2UyRCwgb3IgY2FsbCB0ZXhJbWFnZTJELCBjb3B5VGV4SW1hZ2UyRCBh
bmQKLSAgICAvLyBjb3B5VGV4U3ViSW1hZ2UyRC4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3Ig
YW5kIHJldHVybnMgZmFsc2UgaWYgdGhlIGZvcm1hdCBpcyBub3Qgc2V0dGFibGUuCi0gICAgYm9v
bCB2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gZm9ybWF0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21w
cmVzc2VkIHRleHR1cmUgZGF0YSBpcyBjb3JyZWN0IHNpemUKLSAgICAvLyBmb3IgdGhlIGdpdmVu
IGZvcm1hdCBhbmQgZGltZW5zaW9ucy4KLSAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1
bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlC
dWZmZXJWaWV3KiBwaXhlbHMpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB2YWxpZGF0
aW5nIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzLgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVz
c2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIHZhbGlkIGZvcgot
ICAgIC8vIHRoZSBnaXZlbiBmb3JtYXQuCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhE
aW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0
ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIHZhbGlkIGZvcgotICAgIC8vIHRoZSBnaXZlbiBmb3JtYXQu
Ci0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIFdlYkdMVGV4dHVyZSopOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlk
YXRlIG1vZGUgZm9yIGRyYXd7QXJyYXlzL0VsZW1lbnRzfS4KLSAgICBib29sIHZhbGlkYXRlRHJh
d01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7Ci0KLSAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaWYgZnJvbnQvYmFjayBzdGVuY2lsTWFzayBhbmQgc3Rl
bmNpbEZ1bmMgc2V0dGluZ3MgYXJlIHRoZSBzYW1lLgotICAgIGJvb2wgdmFsaWRhdGVTdGVuY2ls
U2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLQotICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byB2YWxpZGF0ZSBzdGVuY2lsIGZ1bmMuCi0gICAgYm9vbCB2YWxpZGF0ZVN0ZW5jaWxG
dW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIGZvciB0ZXhQYXJhbWV0ZXJmIGFuZCB0ZXhQYXJhbWV0ZXJpLgotICAgIHZvaWQg
dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBw
YXJhbWksIEdDM0RpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHByaW50IEdMIGVycm9ycyB0byBjb25zb2xlLgotICAgIHZvaWQgcHJpbnRHTEVy
cm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcHJpbnRHTFdhcm5pbmdUb0Nv
bnNvbGUoY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLSAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJpbnQgd2FybmluZ3MgdG8gY29uc29sZS4gQ3VycmVudGx5
Ci0gICAgLy8gdXNlZCBvbmx5IHRvIHdhcm4gYWJvdXQgdXNlIG9mIG9ic29sZXRlIGZ1bmN0aW9u
cy4KLSAgICB2b2lkIHByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmKTsKLQotICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmcmFt
ZWJ1ZmZlciBmdW5jdGlvbnMuCi0gICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgaWYgcGFyYW1ldGVy
cyBhcmUgaWxsZWdhbC4KLSAgICBib29sIHZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVy
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZXF1
YXRpb24gbW9kZS4KLSAgICBib29sIHZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxp
ZGF0ZSBibGVuZCBmdW5jIGZhY3RvcnMuCi0gICAgYm9vbCB2YWxpZGF0ZUJsZW5kRnVuY0ZhY3Rv
cnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCk7
Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBHTCBjYXBhYmlsaXR5Lgot
ICAgIGJvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFt
ZXRlcnMgZm9yIHVuaWZvcm0gZnVuY3Rpb25zLgotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qLCBJbnQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKLSAg
ICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqLCBHQzNEc2l6ZWks
IEdDM0RzaXplaSBtb2QpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHBh
cmFtZXRlcnMgZm9yIGJ1ZmZlckRhdGEuCi0gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGJvdW5k
IGJ1ZmZlciB0byB0YXJnZXQsIG9yIDAgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBX
ZWJHTEJ1ZmZlciogdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIGltYWdlIGlzIHJl
YWR5IGFuZCB3b3VsZG4ndCB0YWludCBPcmlnaW4uCi0gICAgYm9vbCB2YWxpZGF0ZUhUTUxJbWFn
ZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhj
ZXB0aW9uQ29kZSYpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdl
MkQgdG8gbWFrZSBzdXJlIGNhbnZhcyBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2lu
LgotICAgIGJvb2wgdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotCi0jaWYgRU5BQkxF
KFZJREVPKQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1h
a2Ugc3VyZSB2aWRlbyBpcyByZWFkeSB3b3VsZG4ndCB0YWludCBPcmlnaW4uCi0gICAgYm9vbCB2
YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MVmlk
ZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb25zIGZvciB2ZXJ0ZXhBdHRyaWJOZnt2fS4KLSAgICB2b2lkIHZlcnRleEF0dHJpYmZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBl
Y3RlZFNpemUsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCk7Ci0g
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Ci0gICAg
dm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0KiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsK
LQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgZGVsZXRlKiAoZGVsZXRlQnVmZmVyLCBkZWxl
dGVQcm9ncmFtLCBldGMpIGZ1bmN0aW9ucy4KLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVy
IHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCi0gICAgYm9vbCBkZWxl
dGVPYmplY3QoV2ViR0xPYmplY3QqKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgYmlu
ZCogKGJpbmRCdWZmZXIsIGJpbmRUZXh0dXJlLCBldGMpIGFuZCB1c2VQcm9ncmFtLgotICAgIC8v
IElmIHRoZSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBzZXQgZGVsZXRlZCB0byB0
cnVlIHVwb24gcmV0dXJuLgotICAgIC8vIFJldHVybiBmYWxzZSBpZiBjYWxsZXIgc2hvdWxkIHJl
dHVybiB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4KLSAgICBib29sIGNoZWNrT2JqZWN0VG9C
ZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqLCBib29sJiBkZWxl
dGVkKTsKLQotICAgIC8vIEhlbHBlcnMgZm9yIHNpbXVsYXRpbmcgdmVydGV4QXR0cmliMAotICAg
IHZvaWQgaW5pdFZlcnRleEF0dHJpYjAoKTsKLSAgICBib29sIHNpbXVsYXRlVmVydGV4QXR0cmli
MChHQzNEc2l6ZWkgbnVtVmVydGV4KTsKLSAgICB2b2lkIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRl
eEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0KLSAgICB2b2lkIGRpc3BhdGNoQ29udGV4dExvc3RFdmVu
dCgpOwotICAgIC8vIEhlbHBlciBmb3IgcmVzdG9yYXRpb24gYWZ0ZXIgY29udGV4dCBsb3N0Lgot
ICAgIHZvaWQgbWF5YmVSZXN0b3JlQ29udGV4dCgpOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHdl
IGFyZSBydW5uaW5nIHByaXZpbGVnZWQgY29kZSBpbiB0aGUgYnJvd3NlciwgZm9yIGV4YW1wbGUs
Ci0gICAgLy8gYSBTYWZhcmkgb3IgQ2hyb21lIGV4dGVuc2lvbi4KLSAgICBib29sIGFsbG93UHJp
dmlsZWdlZEV4dGVuc2lvbnMoKSBjb25zdDsKLQotICAgIGVudW0gQ29uc29sZURpc3BsYXlQcmVm
ZXJlbmNlIHsKLSAgICAgICAgRGlzcGxheUluQ29uc29sZSwKLSAgICAgICAgRG9udERpc3BsYXlJ
bkNvbnNvbGUKLSAgICB9OwotCi0gICAgLy8gV3JhcHBlciBmb3IgR3JhcGhpY3NDb250ZXh0M0Q6
OnN5bnRoZXNpemVHTEVycm9yIHRoYXQgc2VuZHMgYSBtZXNzYWdlCi0gICAgLy8gdG8gdGhlIEph
dmFTY3JpcHQgY29uc29sZS4KLSAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCBDb25zb2xl
RGlzcGxheVByZWZlcmVuY2UgPSBEaXNwbGF5SW5Db25zb2xlKTsKLQotICAgIFN0cmluZyBlbnN1
cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotCi0gICAgLy8gRW5hYmxlIG9yIGRpc2Fi
bGUgc3RlbmNpbCB0ZXN0IGJhc2VkIG9uIHVzZXIgc2V0dGluZyBhbmQKLSAgICAvLyB3aGV0aGVy
IHRoZSBjdXJyZW50IEZCTyBoYXMgYSBzdGVuY2lsIGJ1ZmZlci4KLSAgICB2b2lkIGFwcGx5U3Rl
bmNpbFRlc3QoKTsKLQotICAgIC8vIEhlbHBlciBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEg
Y2FwYWJpbGl0eS4KLSAgICB2b2lkIGVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5
LCBib29sIGVuYWJsZSk7Ci0KLSAgICAvLyBDbGFtcCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byBH
TF9NQVhfVklFV1BPUlRfRElNUy4KLSAgICBJbnRTaXplIGNsYW1wZWRDYW52YXNTaXplKCk7Ci0K
LSAgICAvLyBGaXJzdCB0aW1lIGNhbGxlZCwgaWYgRVhUX2RyYXdfYnVmZmVycyBpcyBzdXBwb3J0
ZWQsIHF1ZXJ5IHRoZSB2YWx1ZTsgb3RoZXJ3aXNlIHJldHVybiAwLgotICAgIC8vIExhdGVyLCBy
ZXR1cm4gdGhlIGNhY2hlZCB2YWx1ZS4KLSAgICBHQzNEaW50IGdldE1heERyYXdCdWZmZXJzKCk7
Ci0gICAgR0MzRGludCBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCk7Ci0KLSAgICB2b2lkIHNldEJh
Y2tEcmF3QnVmZmVyKEdDM0RlbnVtKTsKLQotICAgIHZvaWQgcmVzdG9yZUN1cnJlbnRGcmFtZWJ1
ZmZlcigpOwotICAgIHZvaWQgcmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQoKTsKLQotICAgIC8vIENo
ZWNrIGlmIEVYVF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCBhbmQgaWYgaXQg
c2F0aXNmaWVzIHRoZSBXZWJHTCByZXF1aXJlbWVudHMuCi0gICAgYm9vbCBzdXBwb3J0c0RyYXdC
dWZmZXJzKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaWRsCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLXR5cGVkZWYg
dW5zaWduZWQgbG9uZyAgR0xlbnVtOwotdHlwZWRlZiBib29sZWFuICAgICAgICBHTGJvb2xlYW47
Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMYml0ZmllbGQ7Ci10eXBlZGVmIGJ5dGUgICAgICAg
ICAgIEdMYnl0ZTsgICAgICAgICAvKiAnYnl0ZScgc2hvdWxkIGJlIGEgc2lnbmVkIDggYml0IHR5
cGUuICovCi10eXBlZGVmIHNob3J0ICAgICAgICAgIEdMc2hvcnQ7Ci10eXBlZGVmIGxvbmcgICAg
ICAgICAgIEdMaW50OwotdHlwZWRlZiBsb25nICAgICAgICAgICBHTHNpemVpOwotdHlwZWRlZiBs
b25nIGxvbmcgICAgICBHTGludHB0cjsKLXR5cGVkZWYgbG9uZyBsb25nICAgICAgR0xzaXplaXB0
cjsKLXR5cGVkZWYgb2N0ZXQgICAgICAgICAgR0x1Ynl0ZTsgICAgICAgIC8qICdvY3RldCcgc2hv
dWxkIGJlIGFuIHVuc2lnbmVkIDggYml0IHR5cGUuICovCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0
IEdMdXNob3J0OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTHVpbnQ7Ci10eXBlZGVmIHVucmVz
dHJpY3RlZCBmbG9hdCBHTGZsb2F0OwotdHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xjbGFt
cGY7Ci0KLVsKLSAgICBDb25kaXRpb25hbD1XRUJHTCwKLSAgICBKU0N1c3RvbU1hcmtGdW5jdGlv
biwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotXSBpbnRlcmZhY2UgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7Ci0KLSAgICAvKiBDbGVhckJ1ZmZlck1h
c2sgKi8KLSAgICBjb25zdCBHTGVudW0gREVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgID0g
MHgwMDAwMDEwMDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAg
ICAgID0gMHgwMDAwMDQwMDsKLSAgICBjb25zdCBHTGVudW0gQ09MT1JfQlVGRkVSX0JJVCAgICAg
ICAgICAgICAgID0gMHgwMDAwNDAwMDsKLQotICAgIC8qIEJlZ2luTW9kZSAqLwotICAgIGNvbnN0
IEdMZW51bSBQT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA7Ci0gICAgY29u
c3QgR0xlbnVtIExJTkVTICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTsKLSAgICBj
b25zdCBHTGVudW0gTElORV9MT09QICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAyOwotICAg
IGNvbnN0IEdMZW51bSBMSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDM7Ci0g
ICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFUyAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwNDsK
LSAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAgID0gMHgwMDA1
OwotICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgPSAweDAw
MDY7Ci0KLSAgICAvKiBBbHBoYUZ1bmN0aW9uIChub3Qgc3VwcG9ydGVkIGluIEVTMjApICovCi0g
ICAgLyogICAgICBORVZFUiAqLwotICAgIC8qICAgICAgTEVTUyAqLwotICAgIC8qICAgICAgRVFV
QUwgKi8KLSAgICAvKiAgICAgIExFUVVBTCAqLwotICAgIC8qICAgICAgR1JFQVRFUiAqLwotICAg
IC8qICAgICAgTk9URVFVQUwgKi8KLSAgICAvKiAgICAgIEdFUVVBTCAqLwotICAgIC8qICAgICAg
QUxXQVlTICovCi0KLSAgICAvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi8KLSAgICBjb25zdCBHTGVu
dW0gWkVSTyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLSAgICBjb25zdCBHTGVudW0g
T05FICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTsKLSAgICBjb25zdCBHTGVudW0gU1JD
X0NPTE9SICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzAwOwotICAgIGNvbnN0IEdMZW51bSBP
TkVfTUlOVVNfU1JDX0NPTE9SICAgICAgICAgICAgPSAweDAzMDE7Ci0gICAgY29uc3QgR0xlbnVt
IFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMjsKLSAgICBjb25zdCBHTGVu
dW0gT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgID0gMHgwMzAzOwotICAgIGNvbnN0IEdM
ZW51bSBEU1RfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDQ7Ci0gICAgY29uc3Qg
R0xlbnVtIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA9IDB4MDMwNTsKLQotICAgIC8q
IEJsZW5kaW5nRmFjdG9yU3JjICovCi0gICAgLyogICAgICBaRVJPICovCi0gICAgLyogICAgICBP
TkUgKi8KLSAgICBjb25zdCBHTGVudW0gRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMzA2OwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAg
PSAweDAzMDc7Ci0gICAgY29uc3QgR0xlbnVtIFNSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAg
ICA9IDB4MDMwODsKLSAgICAvKiAgICAgIFNSQ19BTFBIQSAqLwotICAgIC8qICAgICAgT05FX01J
TlVTX1NSQ19BTFBIQSAqLwotICAgIC8qICAgICAgRFNUX0FMUEhBICovCi0gICAgLyogICAgICBP
TkVfTUlOVVNfRFNUX0FMUEhBICovCi0KLSAgICAvKiBCbGVuZEVxdWF0aW9uU2VwYXJhdGUgKi8K
LSAgICBjb25zdCBHTGVudW0gRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA2
OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTiAgICAgICAgICAgICAgICAgPSAweDgw
MDk7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OX1JHQiAgICAgICAgICAgICA9IDB4
ODAwOTsgICAvKiBzYW1lIGFzIEJMRU5EX0VRVUFUSU9OICovCi0gICAgY29uc3QgR0xlbnVtIEJM
RU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA9IDB4ODgzRDsKLQotICAgIC8qIEJsZW5kU3Vi
dHJhY3QgKi8KLSAgICBjb25zdCBHTGVudW0gRlVOQ19TVUJUUkFDVCAgICAgICAgICAgICAgICAg
ID0gMHg4MDBBOwotICAgIGNvbnN0IEdMZW51bSBGVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAg
ICAgPSAweDgwMEI7Ci0KLSAgICAvKiBTZXBhcmF0ZSBCbGVuZCBGdW5jdGlvbnMgKi8KLSAgICBj
b25zdCBHTGVudW0gQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgID0gMHg4MEM4OwotICAg
IGNvbnN0IEdMZW51bSBCTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgPSAweDgwQzk7Ci0g
ICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9BTFBIQSAgICAgICAgICAgICAgICA9IDB4ODBDQTsK
LSAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX0FMUEhBICAgICAgICAgICAgICAgID0gMHg4MENC
OwotICAgIGNvbnN0IEdMZW51bSBDT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgPSAweDgw
MDE7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19DT05TVEFOVF9DT0xPUiAgICAgICA9IDB4
ODAwMjsKLSAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgID0g
MHg4MDAzOwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAg
PSAweDgwMDQ7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX0NPTE9SICAgICAgICAgICAgICAgICAg
ICA9IDB4ODAwNTsKLQotICAgIC8qIEJ1ZmZlciBPYmplY3RzICovCi0gICAgY29uc3QgR0xlbnVt
IEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4ODg5MjsKLSAgICBjb25zdCBHTGVu
dW0gRUxFTUVOVF9BUlJBWV9CVUZGRVIgICAgICAgICAgID0gMHg4ODkzOwotICAgIGNvbnN0IEdM
ZW51bSBBUlJBWV9CVUZGRVJfQklORElORyAgICAgICAgICAgPSAweDg4OTQ7Ci0gICAgY29uc3Qg
R0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA9IDB4ODg5NTsKLQotICAgIGNv
bnN0IEdMZW51bSBTVFJFQU1fRFJBVyAgICAgICAgICAgICAgICAgICAgPSAweDg4RTA7Ci0gICAg
Y29uc3QgR0xlbnVtIFNUQVRJQ19EUkFXICAgICAgICAgICAgICAgICAgICA9IDB4ODhFNDsKLSAg
ICBjb25zdCBHTGVudW0gRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgID0gMHg4OEU4Owot
Ci0gICAgY29uc3QgR0xlbnVtIEJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICA9IDB4ODc2
NDsKLSAgICBjb25zdCBHTGVudW0gQlVGRkVSX1VTQUdFICAgICAgICAgICAgICAgICAgID0gMHg4
NzY1OwotCi0gICAgY29uc3QgR0xlbnVtIENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA9
IDB4ODYyNjsKLQotICAgIC8qIEN1bGxGYWNlTW9kZSAqLwotICAgIGNvbnN0IEdMZW51bSBGUk9O
VCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0MDQ7Ci0gICAgY29uc3QgR0xlbnVtIEJB
Q0sgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNTsKLSAgICBjb25zdCBHTGVudW0g
RlJPTlRfQU5EX0JBQ0sgICAgICAgICAgICAgICAgID0gMHgwNDA4OwotCi0gICAgLyogRGVwdGhG
dW5jdGlvbiAqLwotICAgIC8qICAgICAgTkVWRVIgKi8KLSAgICAvKiAgICAgIExFU1MgKi8KLSAg
ICAvKiAgICAgIEVRVUFMICovCi0gICAgLyogICAgICBMRVFVQUwgKi8KLSAgICAvKiAgICAgIEdS
RUFURVIgKi8KLSAgICAvKiAgICAgIE5PVEVRVUFMICovCi0gICAgLyogICAgICBHRVFVQUwgKi8K
LSAgICAvKiAgICAgIEFMV0FZUyAqLwotCi0gICAgLyogRW5hYmxlQ2FwICovCi0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4MERFMTsKLSAgICBjb25z
dCBHTGVudW0gQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgID0gMHgwQjQ0OwotICAgIGNv
bnN0IEdMZW51bSBCTEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDBCRTI7Ci0gICAg
Y29uc3QgR0xlbnVtIERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJEMDsKLSAg
ICBjb25zdCBHTGVudW0gU1RFTkNJTF9URVNUICAgICAgICAgICAgICAgICAgID0gMHgwQjkwOwot
ICAgIGNvbnN0IEdMZW51bSBERVBUSF9URVNUICAgICAgICAgICAgICAgICAgICAgPSAweDBCNzE7
Ci0gICAgY29uc3QgR0xlbnVtIFNDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA9IDB4MEMx
MTsKLSAgICBjb25zdCBHTGVudW0gUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgID0gMHg4
MDM3OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgICAgICAgPSAw
eDgwOUU7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICA9
IDB4ODBBMDsKLQotICAgIC8qIEVycm9yQ29kZSAqLwotICAgIGNvbnN0IEdMZW51bSBOT19FUlJP
UiAgICAgICAgICAgICAgICAgICAgICAgPSAwOwotICAgIGNvbnN0IEdMZW51bSBJTlZBTElEX0VO
VU0gICAgICAgICAgICAgICAgICAgPSAweDA1MDA7Ci0gICAgY29uc3QgR0xlbnVtIElOVkFMSURf
VkFMVUUgICAgICAgICAgICAgICAgICA9IDB4MDUwMTsKLSAgICBjb25zdCBHTGVudW0gSU5WQUxJ
RF9PUEVSQVRJT04gICAgICAgICAgICAgID0gMHgwNTAyOwotICAgIGNvbnN0IEdMZW51bSBPVVRf
T0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgPSAweDA1MDU7Ci0KLSAgICAvKiBGcm9udEZhY2VE
aXJlY3Rpb24gKi8KLSAgICBjb25zdCBHTGVudW0gQ1cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwOTAwOwotICAgIGNvbnN0IEdMZW51bSBDQ1cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDA5MDE7Ci0KLSAgICAvKiBHZXRQTmFtZSAqLwotICAgIGNvbnN0IEdMZW51bSBM
SU5FX1dJRFRIICAgICAgICAgICAgICAgICAgICAgPSAweDBCMjE7Ci0gICAgY29uc3QgR0xlbnVt
IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA9IDB4ODQ2RDsKLSAgICBjb25zdCBHTGVu
dW0gQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgID0gMHg4NDZFOwotICAgIGNvbnN0IEdM
ZW51bSBDVUxMX0ZBQ0VfTU9ERSAgICAgICAgICAgICAgICAgPSAweDBCNDU7Ci0gICAgY29uc3Qg
R0xlbnVtIEZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICA9IDB4MEI0NjsKLSAgICBjb25z
dCBHTGVudW0gREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgID0gMHgwQjcwOwotICAgIGNv
bnN0IEdMZW51bSBERVBUSF9XUklURU1BU0sgICAgICAgICAgICAgICAgPSAweDBCNzI7Ci0gICAg
Y29uc3QgR0xlbnVtIERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4MEI3MzsKLSAg
ICBjb25zdCBHTGVudW0gREVQVEhfRlVOQyAgICAgICAgICAgICAgICAgICAgID0gMHgwQjc0Owot
ICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0NMRUFSX1ZBTFVFICAgICAgICAgICAgPSAweDBCOTE7
Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA9IDB4MEI5
MjsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAgID0gMHgw
Qjk0OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCAgICAgICAgPSAw
eDBCOTU7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA9
IDB4MEI5NjsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAg
ID0gMHgwQjk3OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1ZBTFVFX01BU0sgICAgICAgICAg
ICAgPSAweDBCOTM7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfV1JJVEVNQVNLICAgICAgICAg
ICAgICA9IDB4MEI5ODsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAg
ICAgICAgID0gMHg4ODAwOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfRkFJTCAgICAg
ICAgICAgICAgPSAweDg4MDE7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19QQVNTX0RF
UFRIX0ZBSUwgICA9IDB4ODgwMjsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1BBU1Nf
REVQVEhfUEFTUyAgID0gMHg4ODAzOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUkVG
ICAgICAgICAgICAgICAgPSAweDhDQTM7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19W
QUxVRV9NQVNLICAgICAgICA9IDB4OENBNDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNL
X1dSSVRFTUFTSyAgICAgICAgID0gMHg4Q0E1OwotICAgIGNvbnN0IEdMZW51bSBWSUVXUE9SVCAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDBCQTI7Ci0gICAgY29uc3QgR0xlbnVtIFNDSVNTT1Jf
Qk9YICAgICAgICAgICAgICAgICAgICA9IDB4MEMxMDsKLSAgICAvKiAgICAgIFNDSVNTT1JfVEVT
VCAqLwotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9DTEVBUl9WQUxVRSAgICAgICAgICAgICAgPSAw
eDBDMjI7Ci0gICAgY29uc3QgR0xlbnVtIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9
IDB4MEMyMzsKLSAgICBjb25zdCBHTGVudW0gVU5QQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAg
ID0gMHgwQ0Y1OwotICAgIGNvbnN0IEdMZW51bSBQQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAg
ICAgPSAweDBEMDU7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAg
ICAgICA9IDB4MEQzMzsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZJRVdQT1JUX0RJTVMgICAgICAg
ICAgICAgID0gMHgwRDNBOwotICAgIGNvbnN0IEdMZW51bSBTVUJQSVhFTF9CSVRTICAgICAgICAg
ICAgICAgICAgPSAweDBENTA7Ci0gICAgY29uc3QgR0xlbnVtIFJFRF9CSVRTICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEQ1MjsKLSAgICBjb25zdCBHTGVudW0gR1JFRU5fQklUUyAgICAgICAg
ICAgICAgICAgICAgID0gMHgwRDUzOwotICAgIGNvbnN0IEdMZW51bSBCTFVFX0JJVFMgICAgICAg
ICAgICAgICAgICAgICAgPSAweDBENTQ7Ci0gICAgY29uc3QgR0xlbnVtIEFMUEhBX0JJVFMgICAg
ICAgICAgICAgICAgICAgICA9IDB4MEQ1NTsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfQklUUyAg
ICAgICAgICAgICAgICAgICAgID0gMHgwRDU2OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JJ
VFMgICAgICAgICAgICAgICAgICAgPSAweDBENTc7Ci0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05f
T0ZGU0VUX1VOSVRTICAgICAgICAgICA9IDB4MkEwMDsKLSAgICAvKiAgICAgIFBPTFlHT05fT0ZG
U0VUX0ZJTEwgKi8KLSAgICBjb25zdCBHTGVudW0gUE9MWUdPTl9PRkZTRVRfRkFDVE9SICAgICAg
ICAgID0gMHg4MDM4OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0JJTkRJTkdfMkQgICAgICAg
ICAgICAgPSAweDgwNjk7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9CVUZGRVJTICAgICAgICAg
ICAgICAgICA9IDB4ODBBODsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFUyAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4MEE5OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0VfVkFM
VUUgICAgICAgICAgPSAweDgwQUE7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRV9J
TlZFUlQgICAgICAgICA9IDB4ODBBQjsKLQotICAgIC8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi8K
LSAgICAvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqLwotICAgIC8qICAgICAgVEVYVFVSRV9N
SU5fRklMVEVSICovCi0gICAgLyogICAgICBURVhUVVJFX1dSQVBfUyAqLwotICAgIC8qICAgICAg
VEVYVFVSRV9XUkFQX1QgKi8KLQotICAgIGNvbnN0IEdMZW51bSBDT01QUkVTU0VEX1RFWFRVUkVf
Rk9STUFUUyAgICAgPSAweDg2QTM7Ci0KLSAgICAvKiBIaW50TW9kZSAqLwotICAgIGNvbnN0IEdM
ZW51bSBET05UX0NBUkUgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDA7Ci0gICAgY29uc3Qg
R0xlbnVtIEZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMTsKLSAgICBjb25z
dCBHTGVudW0gTklDRVNUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAyOwotCi0gICAg
LyogSGludFRhcmdldCAqLwotICAgIGNvbnN0IEdMZW51bSBHRU5FUkFURV9NSVBNQVBfSElOVCAg
ICAgICAgICAgID0gMHg4MTkyOwotCi0gICAgLyogRGF0YVR5cGUgKi8KLSAgICBjb25zdCBHTGVu
dW0gQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAwOwotICAgIGNvbnN0IEdM
ZW51bSBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgPSAweDE0MDE7Ci0gICAgY29uc3Qg
R0xlbnVtIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMjsKLSAgICBjb25z
dCBHTGVudW0gVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgID0gMHgxNDAzOwotICAgIGNv
bnN0IEdMZW51bSBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDQ7Ci0gICAg
Y29uc3QgR0xlbnVtIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICA9IDB4MTQwNTsKLSAg
ICBjb25zdCBHTGVudW0gRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA2Owot
Ci0gICAgLyogUGl4ZWxGb3JtYXQgKi8KLSAgICBjb25zdCBHTGVudW0gREVQVEhfQ09NUE9ORU5U
ICAgICAgICAgICAgICAgID0gMHgxOTAyOwotICAgIGNvbnN0IEdMZW51bSBBTFBIQSAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDE5MDY7Ci0gICAgY29uc3QgR0xlbnVtIFJHQiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MTkwNzsKLSAgICBjb25zdCBHTGVudW0gUkdCQSAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA4OwotICAgIGNvbnN0IEdMZW51bSBMVU1JTkFO
Q0UgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDk7Ci0gICAgY29uc3QgR0xlbnVtIExVTUlO
QU5DRV9BTFBIQSAgICAgICAgICAgICAgICA9IDB4MTkwQTsKLQotICAgIC8qIFBpeGVsVHlwZSAq
LwotICAgIC8qICAgICAgVU5TSUdORURfQllURSAqLwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05F
RF9TSE9SVF80XzRfNF80ICAgICAgICAgPSAweDgwMzM7Ci0gICAgY29uc3QgR0xlbnVtIFVOU0lH
TkVEX1NIT1JUXzVfNV81XzEgICAgICAgICA9IDB4ODAzNDsKLSAgICBjb25zdCBHTGVudW0gVU5T
SUdORURfU0hPUlRfNV82XzUgICAgICAgICAgID0gMHg4MzYzOwotCi0gICAgLyogU2hhZGVycyAq
LwotICAgIGNvbnN0IEdMZW51bSBGUkFHTUVOVF9TSEFERVIgICAgICAgICAgICAgICAgICA9IDB4
OEIzMDsKLSAgICBjb25zdCBHTGVudW0gVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAgICAg
PSAweDhCMzE7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAg
ICAgID0gMHg4ODY5OwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9S
UyAgICAgICA9IDB4OERGQjsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZBUllJTkdfVkVDVE9SUyAg
ICAgICAgICAgICAgPSAweDhERkM7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTID0gMHg4QjREOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFMgICA9IDB4OEI0QzsKLSAgICBjb25zdCBHTGVudW0gTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFMgICAgICAgICAgPSAweDg4NzI7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9G
UkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgID0gMHg4REZEOwotICAgIGNvbnN0IEdMZW51bSBT
SEFERVJfVFlQRSAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI0RjsKLSAgICBjb25zdCBHTGVu
dW0gREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgPSAweDhCODA7Ci0gICAgY29uc3Qg
R0xlbnVtIExJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjgyOwotICAgIGNv
bnN0IEdMZW51bSBWQUxJREFURV9TVEFUVVMgICAgICAgICAgICAgICAgICA9IDB4OEI4MzsKLSAg
ICBjb25zdCBHTGVudW0gQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgPSAweDhCODU7
Ci0gICAgY29uc3QgR0xlbnVtIEFDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgID0gMHg4
Qjg2OwotICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfQVRUUklCVVRFUyAgICAgICAgICAgICAgICA9
IDB4OEI4OTsKLSAgICBjb25zdCBHTGVudW0gU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAg
ICAgPSAweDhCOEM7Ci0gICAgY29uc3QgR0xlbnVtIENVUlJFTlRfUFJPR1JBTSAgICAgICAgICAg
ICAgICAgID0gMHg4QjhEOwotCi0gICAgLyogU3RlbmNpbEZ1bmN0aW9uICovCi0gICAgY29uc3Qg
R0xlbnVtIE5FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMDsKLSAgICBjb25z
dCBHTGVudW0gTEVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAxOwotICAgIGNv
bnN0IEdMZW51bSBFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDI7Ci0gICAg
Y29uc3QgR0xlbnVtIExFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMzsKLSAg
ICBjb25zdCBHTGVudW0gR1JFQVRFUiAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjA0Owot
ICAgIGNvbnN0IEdMZW51bSBOT1RFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDU7
Ci0gICAgY29uc3QgR0xlbnVtIEdFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIw
NjsKLSAgICBjb25zdCBHTGVudW0gQUxXQVlTICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MjA3OwotCi0gICAgLyogU3RlbmNpbE9wICovCi0gICAgLyogICAgICBaRVJPICovCi0gICAgY29u
c3QgR0xlbnVtIEtFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMDsKLSAgICBj
b25zdCBHTGVudW0gUkVQTEFDRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAxOwotICAg
IGNvbnN0IEdMZW51bSBJTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDI7Ci0g
ICAgY29uc3QgR0xlbnVtIERFQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMzsK
LSAgICBjb25zdCBHTGVudW0gSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNTBB
OwotICAgIGNvbnN0IEdMZW51bSBJTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgPSAweDg1
MDc7Ci0gICAgY29uc3QgR0xlbnVtIERFQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODUwODsKLQotICAgIC8qIFN0cmluZ05hbWUgKi8KLSAgICBjb25zdCBHTGVudW0gVkVORE9SICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAwOwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJF
UiAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDE7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlNJ
T04gICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMjsKLQotICAgIC8qIFRleHR1cmVNYWdG
aWx0ZXIgKi8KLSAgICBjb25zdCBHTGVudW0gTkVBUkVTVCAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgyNjAwOwotICAgIGNvbnN0IEdMZW51bSBMSU5FQVIgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDI2MDE7Ci0KLSAgICAvKiBUZXh0dXJlTWluRmlsdGVyICovCi0gICAgLyogICAgICBO
RUFSRVNUICovCi0gICAgLyogICAgICBMSU5FQVIgKi8KLSAgICBjb25zdCBHTGVudW0gTkVBUkVT
VF9NSVBNQVBfTkVBUkVTVCAgICAgICAgID0gMHgyNzAwOwotICAgIGNvbnN0IEdMZW51bSBMSU5F
QVJfTUlQTUFQX05FQVJFU1QgICAgICAgICAgPSAweDI3MDE7Ci0gICAgY29uc3QgR0xlbnVtIE5F
QVJFU1RfTUlQTUFQX0xJTkVBUiAgICAgICAgICA9IDB4MjcwMjsKLSAgICBjb25zdCBHTGVudW0g
TElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgID0gMHgyNzAzOwotCi0gICAgLyogVGV4dHVy
ZVBhcmFtZXRlck5hbWUgKi8KLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9NQUdfRklMVEVSICAg
ICAgICAgICAgID0gMHgyODAwOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX01JTl9GSUxURVIg
ICAgICAgICAgICAgPSAweDI4MDE7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfV1JBUF9TICAg
ICAgICAgICAgICAgICA9IDB4MjgwMjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9XUkFQX1Qg
ICAgICAgICAgICAgICAgID0gMHgyODAzOwotCi0gICAgLyogVGV4dHVyZVRhcmdldCAqLwotICAg
IC8qICAgICAgVEVYVFVSRV8yRCAqLwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDE3MDI7Ci0KLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJF
X01BUCAgICAgICAgICAgICAgID0gMHg4NTEzOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0JJ
TkRJTkdfQ1VCRV9NQVAgICAgICAgPSAweDg1MTQ7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCAgICA9IDB4ODUxNTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YICAgID0gMHg4NTE2OwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgICAgPSAweDg1MTc7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAgICA9IDB4ODUxODsKLSAgICBjb25zdCBHTGVudW0g
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgID0gMHg4NTE5OwotICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogICAgPSAweDg1MUE7Ci0gICAgY29uc3QgR0xl
bnVtIE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgICAgICA9IDB4ODUxQzsKLQotICAgIC8qIFRl
eHR1cmVVbml0ICovCi0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUwICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRDMDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTEgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEMxOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMiAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0QzI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUzICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODRDMzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTQgICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEM0OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFNSAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0QzU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU2ICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODRDNjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTcgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEM3OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFOCAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU5
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDOTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RTEwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENBOwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFMTEgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0I7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkUxMiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQzsKLSAgICBjb25zdCBHTGVudW0g
VEVYVFVSRTEzICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENEOwotICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0U7Ci0gICAgY29uc3QgR0xl
bnVtIFRFWFRVUkUxNSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRjsKLSAgICBjb25zdCBH
TGVudW0gVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQwOwotICAgIGNvbnN0
IEdMZW51bSBURVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDE7Ci0gICAgY29u
c3QgR0xlbnVtIFRFWFRVUkUxOCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMjsKLSAgICBj
b25zdCBHTGVudW0gVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQzOwotICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDQ7Ci0g
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENTsK
LSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ2
OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
RDc7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNCAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODREODsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NEQ5OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0REE7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNyAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODREQjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NERDOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjkgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0REQ7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUzMCAgICAgICAgICAgICAg
ICAgICAgICA9IDB4ODRERTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTMxICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NERGOwotICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVEVYVFVSRSAgICAg
ICAgICAgICAgICAgPSAweDg0RTA7Ci0KLSAgICAvKiBUZXh0dXJlV3JhcE1vZGUgKi8KLSAgICBj
b25zdCBHTGVudW0gUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyOTAxOwotICAg
IGNvbnN0IEdMZW51bSBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgPSAweDgxMkY7Ci0g
ICAgY29uc3QgR0xlbnVtIE1JUlJPUkVEX1JFUEVBVCAgICAgICAgICAgICAgICA9IDB4ODM3MDsK
LQotICAgIC8qIFVuaWZvcm0gVHlwZXMgKi8KLSAgICBjb25zdCBHTGVudW0gRkxPQVRfVkVDMiAg
ICAgICAgICAgICAgICAgICAgID0gMHg4QjUwOwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9WRUMz
ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTE7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX1ZF
QzQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MjsKLSAgICBjb25zdCBHTGVudW0gSU5UX1ZF
QzIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUzOwotICAgIGNvbnN0IEdMZW51bSBJTlRf
VkVDMyAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTQ7Ci0gICAgY29uc3QgR0xlbnVtIElO
VF9WRUM0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NTsKLSAgICBjb25zdCBHTGVudW0g
Qk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU2OwotICAgIGNvbnN0IEdMZW51
bSBCT09MX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTc7Ci0gICAgY29uc3QgR0xl
bnVtIEJPT0xfVkVDMyAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1ODsKLSAgICBjb25zdCBH
TGVudW0gQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU5OwotICAgIGNvbnN0
IEdMZW51bSBGTE9BVF9NQVQyICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUE7Ci0gICAgY29u
c3QgR0xlbnVtIEZMT0FUX01BVDMgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QjsKLSAgICBj
b25zdCBHTGVudW0gRkxPQVRfTUFUNCAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVDOwotICAg
IGNvbnN0IEdMZW51bSBTQU1QTEVSXzJEICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUU7Ci0g
ICAgY29uc3QgR0xlbnVtIFNBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAgICA9IDB4OEI2MDsK
LQotICAgIC8qIFZlcnRleCBBcnJheXMgKi8KLSAgICBjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9FTkFCTEVEICAgICAgICA9IDB4ODYyMjsKLSAgICBjb25zdCBHTGVudW0gVkVSVEVY
X0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAgICA9IDB4ODYyMzsKLSAgICBjb25zdCBHTGVudW0g
VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICA9IDB4ODYyNDsKLSAgICBjb25zdCBH
TGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFICAgICAgICAgICA9IDB4ODYyNTsKLSAgICBj
b25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICA9IDB4ODg2QTsK
LSAgICBjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICA9IDB4
ODY0NTsKLSAgICBjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElO
RyA9IDB4ODg5RjsKLQotICAgIC8qIFNoYWRlciBTb3VyY2UgKi8KLSAgICBjb25zdCBHTGVudW0g
Q09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgID0gMHg4QjgxOwotCi0gICAgLyogU2hhZGVy
IFByZWNpc2lvbi1TcGVjaWZpZWQgVHlwZXMgKi8KLSAgICBjb25zdCBHTGVudW0gTE9XX0ZMT0FU
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4REYwOwotICAgIGNvbnN0IEdMZW51bSBNRURJVU1f
RkxPQVQgICAgICAgICAgICAgICAgICAgPSAweDhERjE7Ci0gICAgY29uc3QgR0xlbnVtIEhJR0hf
RkxPQVQgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMjsKLSAgICBjb25zdCBHTGVudW0gTE9X
X0lOVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REYzOwotICAgIGNvbnN0IEdMZW51bSBN
RURJVU1fSU5UICAgICAgICAgICAgICAgICAgICAgPSAweDhERjQ7Ci0gICAgY29uc3QgR0xlbnVt
IEhJR0hfSU5UICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGNTsKLQotICAgIC8qIEZyYW1l
YnVmZmVyIE9iamVjdC4gKi8KLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVIgICAgICAgICAg
ICAgICAgICAgID0gMHg4RDQwOwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVIgICAgICAg
ICAgICAgICAgICAgPSAweDhENDE7Ci0KLSAgICBjb25zdCBHTGVudW0gUkdCQTQgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4MDU2OwotICAgIGNvbnN0IEdMZW51bSBSR0I1X0ExICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDgwNTc7Ci0gICAgY29uc3QgR0xlbnVtIFJHQjU2NSAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4OEQ2MjsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfQ09N
UE9ORU5UMTYgICAgICAgICAgICAgID0gMHg4MUE1OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X0lOREVYICAgICAgICAgICAgICAgICAgPSAweDE5MDE7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfSU5ERVg4ICAgICAgICAgICAgICAgICA9IDB4OEQ0ODsKLSAgICBjb25zdCBHTGVudW0gREVQ
VEhfU1RFTkNJTCAgICAgICAgICAgICAgICAgID0gMHg4NEY5OwotCi0gICAgY29uc3QgR0xlbnVt
IFJFTkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICA9IDB4OEQ0MjsKLSAgICBjb25zdCBHTGVu
dW0gUkVOREVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgID0gMHg4RDQzOwotICAgIGNvbnN0IEdM
ZW51bSBSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgPSAweDhENDQ7Ci0gICAgY29uc3Qg
R0xlbnVtIFJFTkRFUkJVRkZFUl9SRURfU0laRSAgICAgICAgICA9IDB4OEQ1MDsKLSAgICBjb25z
dCBHTGVudW0gUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgID0gMHg4RDUxOwotICAgIGNv
bnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAgICAgPSAweDhENTI7Ci0gICAg
Y29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFICAgICAgICA9IDB4OEQ1MzsKLSAg
ICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgICAgICAgID0gMHg4RDU0Owot
ICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgPSAweDhENTU7
Ci0KLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAg
ICAgICAgICAgPSAweDhDRDA7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfT0JKRUNUX05BTUUgICAgICAgICAgID0gMHg4Q0QxOwotICAgIGNvbnN0IEdMZW51bSBGUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgICAgICAgICA9IDB4OENEMjsKLSAgICBj
b25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0Ug
PSAweDhDRDM7Ci0KLSAgICBjb25zdCBHTGVudW0gQ09MT1JfQVRUQUNITUVOVDAgICAgICAgICAg
ICAgID0gMHg4Q0UwOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9BVFRBQ0hNRU5UICAgICAgICAg
ICAgICAgPSAweDhEMDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQVRUQUNITUVOVCAgICAg
ICAgICAgICA9IDB4OEQyMDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UICAgICAgID0gMHg4MjFBOwotCi0gICAgY29uc3QgR0xlbnVtIE5PTkUgICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDA7Ci0KLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQ09NUExF
VEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhDRDU7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAgICAgICAgID0gMHg4Q0Q2OwotICAgIGNvbnN0
IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA9IDB4OENE
NzsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TICAg
ICAgICAgPSAweDhDRDk7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
ICAgICAgICAgICAgICAgICAgID0gMHg4Q0REOwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSX0JJTkRJTkcgICAgICAgICAgICA9IDB4OENBNjsKLSAgICBjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4Q0E3OwotICAgIGNvbnN0IEdMZW51bSBNQVhf
UkVOREVSQlVGRkVSX1NJWkUgICAgICAgICAgPSAweDg0RTg7Ci0KLSAgICBjb25zdCBHTGVudW0g
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gID0gMHgwNTA2OwotCi0gICAgLyogV2ViR0wt
c3BlY2lmaWMgZW51bXMgKi8KLSAgICBjb25zdCBHTGVudW0gVU5QQUNLX0ZMSVBfWV9XRUJHTCAg
ICAgICAgICAgICAgICA9IDB4OTI0MDsKLSAgICBjb25zdCBHTGVudW0gVU5QQUNLX1BSRU1VTFRJ
UExZX0FMUEhBX1dFQkdMICAgICA9IDB4OTI0MTsKLSAgICBjb25zdCBHTGVudW0gQ09OVEVYVF9M
T1NUX1dFQkdMICAgICAgICAgICAgICAgICA9IDB4OTI0MjsKLSAgICBjb25zdCBHTGVudW0gVU5Q
QUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCA9IDB4OTI0MzsKLSAgICBjb25zdCBHTGVu
dW0gQlJPV1NFUl9ERUZBVUxUX1dFQkdMICAgICAgICAgICAgICA9IDB4OTI0NDsKLQotICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJXaWR0aDsKLSAgICByZWFkb25s
eSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3aW5nQnVmZmVySGVpZ2h0OwotCi0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYWN0aXZlVGV4dHVyZShH
TGVudW0gdGV4dHVyZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFNo
YWRlciBzaGFkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1
aW50IGluZGV4LCBET01TdHJpbmcgbmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJH
TEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1l
YnVmZmVyIGZyYW1lYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIFdlYkdM
UmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFRleHR1cmUoR0xlbnVtIHRhcmdldCwgV2Vi
R0xUZXh0dXJlIHRleHR1cmUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICBibGVuZENvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUs
IEdMY2xhbXBmIGFscGhhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
YmxlbmRFcXVhdGlvbihHTGVudW0gbW9kZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHTGVudW0gbW9kZVJHQiwgR0xlbnVtIG1v
ZGVBbHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVu
YyhHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBibGVuZEZ1bmNTZXBhcmF0ZShHTGVudW0gc3JjUkdCLCBHTGVudW0g
ZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVu
dW0gdGFyZ2V0LCBBcnJheUJ1ZmZlcj8gZGF0YSwgR0xlbnVtIHVzYWdlKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJEYXRhKEdM
ZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldz8gZGF0YSwgR0xlbnVtIHVzYWdlKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJE
YXRhKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdlKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJT
dWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgQXJyYXlCdWZmZXI/IGRhdGEp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZl
clZpZXc/IGRhdGEpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xlbnVtICAgICAgIGNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xlbnVtIHRhcmdldCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIGNsZWFyKEdMYml0ZmllbGQgbWFzayk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1w
ZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhckRlcHRoKEdMY2xhbXBmIGRlcHRoKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJTdGVuY2lsKEdMaW50IHMpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb2xvck1hc2soR0xib29sZWFu
IHJlZCwgR0xib29sZWFuIGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFuIGFscGhhKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBj
b21waWxlU2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgY29tcHJlc3NlZFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3IGRhdGEpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEFycmF5QnVm
ZmVyVmlldyBkYXRhKTsKLSAgICAKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgY29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMaW50IGJvcmRlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IGNvcHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTEJ1ZmZlciBjcmVh
dGVCdWZmZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTEZyYW1lYnVmZmVyIGNy
ZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xQcm9ncmFt
IGNyZWF0ZVByb2dyYW0oKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFJlbmRlcmJ1
ZmZlciBjcmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyIGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xUZXh0dXJlIGNyZWF0ZVRleHR1cmUoKTsKLQotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjdWxsRmFjZShHTGVudW0gbW9kZSk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVyKFdl
YkdMQnVmZmVyIGJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IGRlbGV0ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRl
UmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciBzaGFk
ZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVUZXh0dXJl
KFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICBkZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBkZXB0aE1hc2soR0xib29sZWFuIGZsYWcpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBkZXB0aFJhbmdlKEdMY2xhbXBmIHpOZWFyLCBHTGNsYW1w
ZiB6RmFyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIFdlYkdMU2hhZGVyIHNo
YWRlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRpc2FibGUoR0xl
bnVtIGNhcCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0FycmF5
cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRyYXdFbGVtZW50cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIEdMaW50cHRyIG9mZnNldCk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZW5hYmxlKEdMZW51bSBj
YXApOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGZpbmlzaCgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBmbHVzaCgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJH
TFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUg
dGV4dHVyZSwgR0xpbnQgbGV2ZWwpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBmcm9udEZhY2UoR0xlbnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBnZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KTsKLSAgICAKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMQWN0aXZlSW5mbyBnZXRBY3Rp
dmVBdHRyaWIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZl
VW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsKLQotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGdldEF0dGFjaGVk
U2hhZGVycyhXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBHTGludCAgICAgICAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtIHByb2dyYW0sIERP
TVN0cmluZyBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdl
dEJ1ZmZlclBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZ10gV2ViR0xDb250ZXh0QXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmli
dXRlcygpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xlbnVtIGdldEVycm9yKCk7Ci0K
LSAgICAvLyBvYmplY3QgZ2V0RXh0ZW5zaW9uKERPTVN0cmluZyBuYW1lKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b21dIGFueSBnZXRFeHRlbnNpb24oRE9NU3RyaW5nIG5hbWUpOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0
dGFjaG1lbnQsIEdMZW51bSBwbmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRQYXJhbWV0ZXIoR0xlbnVtIHBuYW1lKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFByb2dy
YW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMZW51bSBwbmFtZSk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNF
eGNlcHRpb25dIERPTVN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0gcHJvZ3Jh
bSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFu
eSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdl
dFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRlciBzaGFkZXIsIEdMZW51bSBwbmFtZSk7Ci0KLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGwsIFJh
aXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nICAgIGdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIg
c2hhZGVyKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2Vi
R0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdMZW51bSBz
aGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGwsIFJhaXNlc0V4Y2VwdGlvbl0gRE9N
U3RyaW5nICAgIGdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciBzaGFkZXIpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBzZXF1ZW5jZTxET01TdHJpbmc+IGdldFN1cHBvcnRl
ZEV4dGVuc2lvbnMoKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBhbnkgZ2V0VGV4UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0g
YW55IGdldFVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0sIFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
V2ViR0xVbmlmb3JtTG9jYXRpb24gZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtLCBET01TdHJpbmcgbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20s
IFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIEdMZW51
bSBwbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTHNpemVpcHRyIGdldFZlcnRl
eEF0dHJpYk9mZnNldChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSk7Ci0KLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgaGludChHTGVudW0gdGFyZ2V0LCBHTGVudW0gbW9k
ZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzQnVmZmVyKFdlYkdM
QnVmZmVyIGJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlz
Q29udGV4dExvc3QoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNF
bmFibGVkKEdMZW51bSBjYXApOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAg
ICBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dy
YW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc1JlbmRlcmJ1ZmZl
cihXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIEdMYm9vbGVhbiAgICBpc1NoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc1RleHR1cmUoV2ViR0xUZXh0dXJlIHRleHR1
cmUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBsaW5lV2lkdGgoR0xm
bG9hdCB3aWR0aCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBwaXhlbFN0b3JlaShHTGVudW0gcG5hbWUsIEdM
aW50IHBhcmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcG9seWdv
bk9mZnNldChHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cyk7Ci0KLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICByZWFkUGl4ZWxzKEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3IHBpeGVscyk7Ci0gICAgCi0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzYW1wbGVD
b3ZlcmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHNjaXNzb3IoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHNoYWRlclNvdXJjZShXZWJHTFNoYWRlciBzaGFkZXIs
IERPTVN0cmluZyBzdHJpbmcpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICBzdGVuY2lsRnVuYyhHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0xl
bnVtIGZhY2UsIEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE1hc2soR0x1aW50IG1hc2spOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsTWFza1NlcGFyYXRl
KEdMZW51bSBmYWNlLCBHTHVpbnQgbWFzayk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIHN0ZW5jaWxPcChHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBh
c3MpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3BTZXBh
cmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNz
KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJhbWV0ZXJm
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmkoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7Ci0KLSAgICAvLyBTdXBwb3J0ZWQgZm9ybXM6Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTElt
YWdlRWxlbWVudD8gaW1hZ2UpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0Vs
ZW1lbnQ/IGNhbnZhcyk7Ci0jaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURF
TwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudD8gdmlkZW8pOwotI2Vu
ZGlmCi0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudD8gaW1hZ2UpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1Yklt
YWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMp
OwotI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRlbyk7Ci0jZW5k
aWYKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtMWYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFm
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWkoV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xaXYoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yZnYoV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBHTGludCB4LCBHTGludCB5KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0
b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMml2KFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2YoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24s
IEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zZnYoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNpKFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2l2KFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGYoV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybTRmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3Jt
NGkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50
IHosIEdMaW50IHcpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHVuaWZvcm00aXYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIElu
dDMyQXJyYXkgdik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4MmZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0
aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRy
aXgzZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2Us
IEZsb2F0MzJBcnJheSBhcnJheSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHVz
ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dy
YW0gcHJvZ3JhbSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmVy
dGV4QXR0cmliMWYoR0x1aW50IGluZHgsIEdMZmxvYXQgeCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjFmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFy
cmF5IHZhbHVlcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRl
eEF0dHJpYjJmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjJmdihHTHVpbnQgaW5keCwg
RmxvYXQzMkFycmF5IHZhbHVlcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHZlcnRleEF0dHJpYjNmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xm
bG9hdCB6KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0
cmliM2Z2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliNGYoR0x1aW50IGluZHgsIEdMZmxv
YXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjRmdihHTHVpbnQgaW5keCwgRmxvYXQz
MkFycmF5IHZhbHVlcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5keCwgR0xpbnQgc2l6
ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlkZSwg
R0xpbnRwdHIgb2Zmc2V0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICB2aWV3cG9ydChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYyODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisj
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorCisjaW5jbHVkZSAiQU5HTEVJ
bnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRVhUU2hhZGVyVGV4
dHVyZUxPRC5oIgorI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRT
aXplLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5o
IgorI2luY2x1ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0
dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRl
ICJPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExp
bmVhci5oIgorI2luY2x1ZGUgIk9FU1ZlcnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5j
bHVkZSAiV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJH
TEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNpbmNs
dWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIK
KyNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5oIgorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdy
b3VwLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgorI2luY2x1ZGUgIldl
YkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNs
dWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgi
CisjaW5jbHVkZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCIKKyNpbmNsdWRlICJXZWJH
TFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgorCisjaW5jbHVk
ZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5s
aW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25z
dCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMgPSAxLjA7Citjb25zdCBpbnQg
bWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2OworCituYW1lc3BhY2UgeworICAgIAor
ICAgIGNsYXNzIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVy
LCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICA6IG1f
ZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgLCBtX2ZyYW1lYnVmZmVy
QmluZGluZyhmcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENv
bW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisg
ICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikK
KyAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAg
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgIHByaXZhdGU6CisgICAgICAgIERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKKyAg
ICAgICAgV2ViR0xGcmFtZWJ1ZmZlciogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CisgICAgfTsKKyAg
ICAKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkgcmFu
Z2UsIEdDM0RzaXplaSBzb3VyY2VSYW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNEc2l6
ZWkqIGNsaXBwZWRSYW5nZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYg
Y2xpcHBlZFJhbmdlKTsKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCkgeworICAgICAgICAgICAgcmFu
Z2UgKz0gc3RhcnQ7CisgICAgICAgICAgICBzdGFydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
R0MzRGludCBlbmQgPSBzdGFydCArIHJhbmdlOworICAgICAgICBpZiAoZW5kID4gc291cmNlUmFu
Z2UpCisgICAgICAgICAgICByYW5nZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKKyAgICAgICAgKmNs
aXBwZWRTdGFydCA9IHN0YXJ0OworICAgICAgICAqY2xpcHBlZFJhbmdlID0gcmFuZ2U7CisgICAg
fQorICAgIAorICAgIC8vIFJldHVybnMgZmFsc2UgaWYgbm8gY2xpcHBpbmcgaXMgbmVjZXNzYXJ5
LCBpLmUuLCB4LCB5LCB3aWR0aCwgaGVpZ2h0IHN0YXkgdGhlIHNhbWUuCisgICAgYm9vbCBjbGlw
MkQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwKKyAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0
LAorICAgICAgICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGludCogY2xpcHBlZFksIEdDM0RzaXpl
aSogY2xpcHBlZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhlaWdodCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChjbGlwcGVkWCAmJiBjbGlwcGVkWSAmJiBjbGlwcGVkV2lkdGggJiYgY2xpcHBlZEhl
aWdodCk7CisgICAgICAgIGNsaXAxRCh4LCB3aWR0aCwgc291cmNlV2lkdGgsIGNsaXBwZWRYLCBj
bGlwcGVkV2lkdGgpOworICAgICAgICBjbGlwMUQoeSwgaGVpZ2h0LCBzb3VyY2VIZWlnaHQsIGNs
aXBwZWRZLCBjbGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuICgqY2xpcHBlZFggIT0geCB8
fCAqY2xpcHBlZFkgIT0geSB8fCAqY2xpcHBlZFdpZHRoICE9IHdpZHRoIHx8ICpjbGlwcGVkSGVp
Z2h0ICE9IGhlaWdodCk7CisgICAgfQorICAgIAorICAgIEdDM0RpbnQgY2xhbXAoR0MzRGludCB2
YWx1ZSwgR0MzRGludCBtaW4sIEdDM0RpbnQgbWF4KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
IDwgbWluKQorICAgICAgICAgICAgdmFsdWUgPSBtaW47CisgICAgICAgIGlmICh2YWx1ZSA+IG1h
eCkKKyAgICAgICAgICAgIHZhbHVlID0gbWF4OworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
fQorICAgIAorICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhl
IEFTQ0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCisgICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0
aW9uIDMuMS4KKyAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKKyAg
ICB7CisgICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQg
YCBAIFwgJyBERUwuCisgICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2CisgICAgICAgICAg
ICAmJiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9
ICdcXCcgJiYgYyAhPSAnXCcnKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8v
IEhvcml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJy
aWFnZSByZXR1cm4KKyAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCisgICAgICAgIGlmIChjID49
IDkgJiYgYyA8PSAxMykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNQcmVmaXhSZXNlcnZlZChjb25zdCBTdHJp
bmcmIG5hbWUpCisgICAgeworICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJnbF8iKSB8fCBu
YW1lLnN0YXJ0c1dpdGgoIndlYmdsXyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiX3dlYmdsXyIpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgLy8gU3RyaXBzIGNvbW1lbnRzIGZyb20gc2hhZGVyIHRleHQuIFRoaXMgYWxsb3dz
IG5vbi1BU0NJSSBjaGFyYWN0ZXJzCisgICAgLy8gdG8gYmUgdXNlZCBpbiBjb21tZW50cyB3aXRo
b3V0IHBvdGVudGlhbGx5IGJyZWFraW5nIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9ucyBu
b3QgZXhwZWN0aW5nIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgR0xTTCBFUyBzZXQuCisgICAgY2xh
c3MgU3RyaXBDb21tZW50cyB7CisgICAgcHVibGljOgorICAgICAgICBTdHJpcENvbW1lbnRzKGNv
bnN0IFN0cmluZyYgc3RyKQorICAgICAgICAgICAgOiBtX3BhcnNlU3RhdGUoQmVnaW5uaW5nT2ZM
aW5lKQorICAgICAgICAgICAgLCBtX3NvdXJjZVN0cmluZyhzdHIpCisgICAgICAgICAgICAsIG1f
bGVuZ3RoKHN0ci5sZW5ndGgoKSkKKyAgICAgICAgICAgICwgbV9wb3NpdGlvbigwKQorICAgICAg
ICB7CisgICAgICAgICAgICBwYXJzZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBT
dHJpbmcgcmVzdWx0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50
b1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGJv
b2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZvaWQgcGFyc2UoKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaGFzTW9yZUNoYXJh
Y3RlcnMoKSkgeworICAgICAgICAgICAgICAgIHByb2Nlc3MoY3VycmVudCgpKTsKKyAgICAgICAg
ICAgICAgICAvLyBwcm9jZXNzKCkgbWlnaHQgYWR2YW5jZSB0aGUgcG9zaXRpb24uCisgICAgICAg
ICAgICAgICAgaWYgKGhhc01vcmVDaGFyYWN0ZXJzKCkpCisgICAgICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9p
ZCBwcm9jZXNzKFVDaGFyKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgcGVlayhVQ2hhciYgY2hh
cmFjdGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9wb3NpdGlvbiArIDEg
Pj0gbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
Y2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFVDaGFyIGN1cnJlbnQo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihtX3Bvc2l0aW9uIDwgbV9sZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIG1fc291
cmNlU3RyaW5nW21fcG9zaXRpb25dOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lk
IGFkdmFuY2UoKQorICAgICAgICB7CisgICAgICAgICAgICArK21fcG9zaXRpb247CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxp
emUgbmV3bGluZSByZWxhdGVkIGNoYXJhY3RlcnMuCisgICAgICAgICAgICByZXR1cm4gKGNoYXJh
Y3RlciA9PSAnXG4nIHx8IGNoYXJhY3RlciA9PSAnXHInKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBlbWl0KFVDaGFyIGNoYXJhY3RlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9idWlsZGVyLmFwcGVuZChjaGFyYWN0ZXIpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBlbnVtIFBhcnNlU3RhdGUgeworICAgICAgICAgICAgLy8gSGF2ZSBub3Qgc2VlbiBhbiBB
U0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgeWV0IG9uCisgICAgICAgICAgICAvLyB0aGlz
IGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgc2VlIGEgcHJlcHJvY2Vzc29yCisgICAgICAg
ICAgICAvLyBkaXJlY3RpdmUuCisgICAgICAgICAgICBCZWdpbm5pbmdPZkxpbmUsCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEhhdmUgc2VlbiBhdCBsZWFzdCBvbmUgQVNDSUkgbm9uLXdo
aXRlc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICAgICAvLyBvbiB0aGlzIGxpbmUuCisgICAgICAg
ICAgICBNaWRkbGVPZkxpbmUsCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEhhbmRsaW5n
IGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gUGFzc2VzIHRocm91Z2ggYWxsCisgICAgICAgICAg
ICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIERpc2FibGVzIGNvbW1l
bnQKKyAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcuCisgICAgICAgICAgICBJblByZXByb2Nlc3Nv
ckRpcmVjdGl2ZSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBzaW5n
bGUtbGluZSBjb21tZW50LiBUaGUgY29tbWVudCB0ZXh0IGlzCisgICAgICAgICAgICAvLyByZXBs
YWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLgorICAgICAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVu
dCwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBtdWx0aS1saW5lIGNv
bW1lbnQuIE5ld2xpbmVzIGFyZSBwYXNzZWQKKyAgICAgICAgICAgIC8vIHRocm91Z2ggdG8gcHJl
c2VydmUgbGluZSBudW1iZXJzLgorICAgICAgICAgICAgSW5NdWx0aUxpbmVDb21tZW50CisgICAg
ICAgIH07CisgICAgICAgIAorICAgICAgICBQYXJzZVN0YXRlIG1fcGFyc2VTdGF0ZTsKKyAgICAg
ICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOworICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAg
ICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBtX2J1aWxk
ZXI7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIFN0cmlwQ29tbWVudHM6OnByb2Nlc3MoVUNoYXIg
YykKKyAgICB7CisgICAgICAgIGlmIChpc05ld2xpbmUoYykpIHsKKyAgICAgICAgICAgIC8vIE5v
IG1hdHRlciB3aGF0IHN0YXRlIHdlIGFyZSBpbiwgcGFzcyB0aHJvdWdoIG5ld2xpbmVzCisgICAg
ICAgICAgICAvLyBzbyB3ZSBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisgICAgICAgICAgICBlbWl0
KGMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9wYXJzZVN0YXRlICE9IEluTXVs
dGlMaW5lQ29tbWVudCkKKyAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBCZWdpbm5pbmdP
ZkxpbmU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgVUNoYXIgdGVtcCA9IDA7CisgICAgICAgIHN3aXRjaCAobV9wYXJzZVN0
YXRlKSB7CisgICAgICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgorICAgICAgICAgICAgaWYgKFdU
Rjo6aXNBU0NJSVNwYWNlKGMpKSB7CisgICAgICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGMgPT0gJyMnKSB7CisgICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9j
ZXNzb3JEaXJlY3RpdmU7CisgICAgICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVHJh
bnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhhbmRsZSBjaGFyYWN0ZXIuCisgICAgICAg
ICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7CisgICAgICAgICAgICBwcm9jZXNzKGMp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBNaWRkbGVP
ZkxpbmU6CisgICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1wKSkgeworICAgICAg
ICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICBtX3BhcnNl
U3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OworICAgICAgICAgICAgICAgICAgICBlbWl0KCcg
Jyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICh0ZW1wID09ICcqJykgeworICAgICAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUg
PSBJbk11bHRpTGluZUNvbW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNv
bW1lbnQgc3RhcnQgaW4gY2FzZSB0aGUgdXNlciBoYXMKKyAgICAgICAgICAgICAgICAgICAgLy8g
YW4gdW5jbG9zZWQgY29tbWVudCBhbmQgd2Ugd2FudCB0byBsYXRlcgorICAgICAgICAgICAgICAg
ICAgICAvLyBzaWduYWwgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdCgnKicpOworICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW5QcmVwcm9jZXNzb3JEaXJl
Y3RpdmU6CisgICAgICAgICAgICAvLyBObyBtYXR0ZXIgd2hhdCB0aGUgY2hhcmFjdGVyIGlzLCBq
dXN0IHBhc3MgaXQKKyAgICAgICAgICAgIC8vIHRocm91Z2guIERvIG5vdCBwYXJzZSBjb21tZW50
cyBpbiB0aGlzIHN0YXRlLiBUaGlzCisgICAgICAgICAgICAvLyBtaWdodCBub3QgYmUgdGhlIHJp
Z2h0IHRoaW5nIHRvIGRvIGxvbmcgdGVybSwgYnV0IGl0CisgICAgICAgICAgICAvLyBzaG91bGQg
aGFuZGxlIHRoZSAjZXJyb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4KKyAgICAgICAgICAgIGVt
aXQoYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIElu
U2luZ2xlTGluZUNvbW1lbnQ6CisgICAgICAgICAgICAvLyBUaGUgbmV3bGluZSBjb2RlIGF0IHRo
ZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlCisgICAgICAgICAgICAvLyBvZiByZXNl
dHRpbmcgb3VyIHN0YXRlIHdoZW4gd2UgZ2V0IG91dCBvZiB0aGUKKyAgICAgICAgICAgIC8vIHNp
bmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEluTXVsdGlMaW5lQ29tbWVu
dDoKKyAgICAgICAgICAgIGlmIChjID09ICcqJyAmJiBwZWVrKHRlbXApICYmIHRlbXAgPT0gJy8n
KSB7CisgICAgICAgICAgICAgICAgZW1pdCgnKicpOworICAgICAgICAgICAgICAgIGVtaXQoJy8n
KTsKKyAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7CisgICAgICAg
ICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0
ZXJzLiBVbmNsZWFyIHdoZXRoZXIgd2UgbWF5CisgICAgICAgICAgICAvLyB3YW50IG9yIG5lZWQg
dG8ganVzdCBlbWl0IGEgc3BhY2UgcGVyIGNoYXJhY3RlciB0byB0cnkKKyAgICAgICAgICAgIC8v
IHRvIHByZXNlcnZlIGNvbHVtbiBudW1iZXJzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30gLy8gbmFtZXNwYWNlIGFub255bW91
cworCitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2sgOiBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2sgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dExv
c3RDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjYikKKyAgICA6IG1fY29udGV4
dChjYikgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX2NvbnRleHQtPmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6UmVhbExvc3RDb250ZXh0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5XZWJH
TFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogbV9jb250ZXh0OworfTsKKworY2xhc3MgV2ViR0xSZW5kZXJp
bmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0M0Q6
OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxs
YmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjYikKKyAgICA6IG1fY29udGV4dChjYikg
eyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgR0MzRGludCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQt
Pm1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUpCisgICAgICAgICAgICBtX2NvbnRleHQtPnBy
aW50R0xFcnJvclRvQ29uc29sZShtZXNzYWdlKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+
V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6
CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogbV9jb250ZXh0OworfTsKKworc3RkOjp1
bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBXZWJHTENvbnRleHRBdHRy
aWJ1dGVzKiBhdHRycywgY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIERvY3VtZW50JiBkb2N1
bWVudCA9IGNhbnZhcy0+ZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAor
ICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlvbiBvZiBhIG5l
dyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCisgICAgLy8gcGFy
dGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3JlIHRpbWVzIHZp
YSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgorICAgIGlmICghZnJhbWUtPmxvYWRl
cigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xFbmFibGVkKCkp
KSB7CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZhbHNlLCB0
cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQu
IikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1Bl
bmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gZmFsc2U7CisgICAgRG9jdW1lbnQmIHRvcERvY3VtZW50
ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKTsKKyAgICBQYWdlKiBwYWdlID0gdG9wRG9jdW1lbnQu
cGFnZSgpOworICAgIGlmIChwYWdlICYmICF0b3BEb2N1bWVudC51cmwoKS5pc0xvY2FsRmlsZSgp
KSB7CisgICAgICAgIFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5tYWluRnJhbWUoKS5s
b2FkZXIoKS5jbGllbnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVudC51cmwoKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikgeworICAg
ICAgICAgICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBpcyB0byBi
bG9jayBXZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHBvbGljeSA9PSBXZWJHTFBlbmRpbmdDcmVhdGlvbikgeworICAgICAgICAgICAgTE9HKFdl
YkdMLCAiV2ViR0wgcG9saWN5IGlzIHBlbmRpbmcuIE1heSBuZWVkIHRvIGJlIHJlc29sdmVkIGxh
dGVyLiIpOworICAgICAgICAgICAgaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
YXR0cmlidXRlcyA9IGF0dHJzID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzKCk7CisgICAgCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7
CisgICAgICAgIGlmICghZnJhbWUtPnNldHRpbmdzKCkub3BlbkdMTXVsdGlzYW1wbGluZ0VuYWJs
ZWQoKSkKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKKyAgICBhdHRyaWJ1dGVz
LnNoYXJlUmVzb3VyY2VzID0gZmFsc2U7CisgICAgYXR0cmlidXRlcy5wcmVmZXJEaXNjcmV0ZUdQ
VSA9IHRydWU7CisgICAgCisgICAgaWYgKGZyYW1lLT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVX
ZWJHTFJlbmRlcmluZygpKQorICAgICAgICBhdHRyaWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5kZXJl
ciA9IHRydWU7CisgICAgCisgICAgaWYgKHBhZ2UpCisgICAgICAgIGF0dHJpYnV0ZXMuZGV2aWNl
UGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgCisgICAgaWYgKGlz
UGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiQ3JlYXRlIGEg
V2ViR0wgY29udGV4dCB0aGF0IGxvb2tzIHJlYWwsIGJ1dCB3aWxsIHJlcXVpcmUgYSBwb2xpY3kg
cmVzb2x1dGlvbiBpZiB1c2VkLiIpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZT4gcmVuZGVyaW5nQ29udGV4dCA9IG5pbDsKKyAgICAgICAgaWYgKHR5
cGUgPT0gImV4cGVyaW1lbnRhbC13ZWJnbDIiKQorICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4
dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihuZXcgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDFSZW5kZXJpbmdD
b250ZXh0PihuZXcgV2ViR0wxUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsK
KyAgICB9CisgICAgCisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50LnZpZXco
KS0+cm9vdCgpLT5ob3N0V2luZG93KCk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRvdykp
OworICAgIAorICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpIHsKKyAgICAgICAgY2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2Us
IHRydWUsICJDb3VsZCBub3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMg
PSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CisgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRz
KCJHTF9FWFRfZGVidWdfbWFya2VyIikpCisgICAgICAgIGV4dGVuc2lvbnMtPnB1c2hHcm91cE1h
cmtlckVYVCgiV2ViR0xSZW5kZXJpbmdDb250ZXh0Iik7CisgICAgCisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IHJlbmRlcmluZ0NvbnRleHQgPSBuaWw7Cisg
ICAgaWYgKHR5cGUgPT0gImV4cGVyaW1lbnRhbC13ZWJnbDIiKQorICAgICAgICByZW5kZXJpbmdD
b250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KG5ldyBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOworICAgIGVs
c2UKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0PihuZXcgV2ViR0wxUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQs
IGF0dHJpYnV0ZXMpKTsKKyAgICByZW5kZXJpbmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsK
KyAgICAKKyAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKK30KKworV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShIVE1MQ2FudmFzRWxlbWVudCog
cGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQor
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3RpdmVE
T01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dCgwKQor
ICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVu
dFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50KQorICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKKyAgICAsIG1fcmVzdG9y
ZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVSZXN0b3JlQ29u
dGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQorICAgICwgbV9jb250ZXh0TG9z
dChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQor
ICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZChtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24odHJ1ZSkKKyAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKK3sK
K30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZShIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVz
KQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3Rp
dmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dChj
b250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4
dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KQorICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKKyAgICAs
IG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVS
ZXN0b3JlQ29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSg0KQorICAgICwgbV9j
b250ZXh0TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RD
b250ZXh0KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRoZXNp
emVkRXJyb3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxs
b3dlZChtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24oZmFsc2UpCisgICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24o
ZmFsc2UpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgbV9jb250ZXh0R3JvdXAgPSBX
ZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKCk7CisgICAgbV9jb250ZXh0R3JvdXAtPmFkZENvbnRl
eHQodGhpcyk7CisgICAgCisgICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0
RGltc1sxXSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1ZJRVdQT1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKKyAgICAKKyAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAK
KyAgICBzZXR1cEZsYWdzKCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCgpCit7Cisg
ICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0KTsKKyAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKKyAg
ICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9
IDA7CisgICAgbV9wYWNrQWxpZ25tZW50ID0gNDsKKyAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7
CisgICAgbV91bnBhY2tGbGlwWSA9IGZhbHNlOworICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBo
YSA9IGZhbHNlOworICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0Nv
bnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMOworICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9
IDA7CisgICAgbV9jdXJyZW50UHJvZ3JhbSA9IDA7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
PSAwOworICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7CisgICAgbV9kZXB0aE1hc2sgPSB0
cnVlOworICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICBtX3N0ZW5jaWxNYXNrID0g
MHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7CisgICAgbV9z
dGVuY2lsRnVuY1JlZiA9IDA7CisgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOworICAgIG1f
c3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sg
PSAweEZGRkZGRkZGOworICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CisgICAgbV9udW1HTEVy
cm9yc1RvQ29uc29sZUFsbG93ZWQgPSBtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7CisgICAg
CisgICAgbV9jbGVhckNvbG9yWzBdID0gbV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJd
ID0gbV9jbGVhckNvbG9yWzNdID0gMDsKKyAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Cisg
ICAgbV9jbGVhckRlcHRoID0gMTsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9jb2xv
ck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tb
M10gPSB0cnVlOworICAgIAorICAgIEdDM0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBtX3RleHR1cmVVbml0cy5jbGVhcigpOworICAgIG1fdGV4dHVyZVVuaXRzLnJl
c2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAKKyAgICBHQzNEaW50IG51
bVZlcnRleEF0dHJpYnMgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJm51bVZlcnRleEF0dHJpYnMpOworICAgIG1f
bWF4VmVydGV4QXR0cmlicyA9IG51bVZlcnRleEF0dHJpYnM7CisgICAgCisgICAgbV9tYXhUZXh0
dXJlU2l6ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpOworICAgIG1fbWF4VGV4dHVy
ZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heFRleHR1cmVTaXpl
LCBtX21heFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSA9IDA7Cisg
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRSwgJm1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1YmVN
YXBUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4Q3Vi
ZU1hcFRleHR1cmVTaXplLCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhSZW5k
ZXJidWZmZXJTaXplID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUsICZtX21heFJlbmRlcmJ1ZmZlclNpemUpOwor
ICAgIAorICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRfZHJhd19idWZmZXJzIGFyZSBs
YXppbHkgcXVlcmllZC4KKyAgICBtX21heERyYXdCdWZmZXJzID0gMDsKKyAgICBtX21heENvbG9y
QXR0YWNobWVudHMgPSAwOworICAgIAorICAgIG1fYmFja0RyYXdCdWZmZXIgPSBHcmFwaGljc0Nv
bnRleHQzRDo6QkFDSzsKKyAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2Vk
ID0gZmFsc2U7CisgICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZCA9IGZhbHNlOworICAgIAorICAg
IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
Y3JlYXRlKHRoaXMsIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0KTsK
KyAgICBhZGRDb250ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgpKTsK
KyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVj
dDsKKyAgICAKKyAgICBtX3ZlcnRleEF0dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0dHJp
YnMpOworICAgIAorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY3JlYXRl
RmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkp
CisgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisgICAgCisgICAgSW50U2l6ZSBjYW52YXNT
aXplID0gY2xhbXBlZENhbnZhc1NpemUoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOworICAgIAorICAgIG1fY29u
dGV4dC0+cmVzaGFwZShjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwor
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNT
aXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQtPnNjaXNzb3IoMCwgMCwgY2FudmFzU2l6ZS53
aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKKyAgICAKKyAgICBtX2NvbnRleHQtPnNldENv
bnRleHRMb3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRM
b3N0Q2FsbGJhY2s+KHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxi
YWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2Fs
bGJhY2s+KHRoaXMpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzZXR1
cEZsYWdzKCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICAKKyAgICBpZiAoUGFnZSog
cGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgbV9zeW50aGVzaXpl
ZEVycm9yc1RvQ29uc29sZSA9IHBhZ2UtPnNldHRpbmdzKCkud2ViR0xFcnJvcnNUb0NvbnNvbGVF
bmFibGVkKCk7CisgICAgCisgICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dM
RVMyQ29tcGxpYW50KCk7CisgICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vz
c2VzID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1f
c3RyaWN0X2F0dHJpYnMiKTsKKyAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOworICAg
IGlmIChtX2lzR0xFUzJDb21wbGlhbnQpIHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9
ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9u
cG90Iik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90
d28iKTsKKyAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwor
ICAgIH0KKyAgICBtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Cit9CisKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNvbnN0
Cit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCisg
ICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnByaXZpbGVnZWRXZWJHTEV4dGVuc2lvbnNF
bmFibGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sK
KyAgICBpZiAoIW1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCkpCisg
ICAgICAgIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmFwcGVuZChmb3JtYXQpOworfQorCitX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSgpCit7
CisgICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0aGV5
IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVmb3Jl
IHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgorICAg
IG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9kZWZhdWx0VmVydGV4QXJyYXlP
YmplY3QgPSBudWxscHRyOworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7
CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRQcm9n
cmFtID0gbnVsbHB0cjsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxwdHI7CisgICAg
bV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fdGV4dHVy
ZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBtX3RleHR1cmVV
bml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICAKKyAg
ICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAg
PSBudWxscHRyOworICAgIAorICAgIGlmICghbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7
CisgICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKyAgICAgICAgZGVzdHJveUdy
YXBoaWNzQ29udGV4dDNEKCk7CisgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVDb250ZXh0
KHRoaXMpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXN0
cm95R3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUaGUgZHJhd2luZyBidWZmZXIg
aG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAorICAg
IC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KKyAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKKyAgICAKKyAg
ICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RDYWxs
YmFjayhudWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxsYmFj
ayhudWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgfQorfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9j
b250ZXh0LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsKKyAg
ICAKKyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOworICAgIFJlbmRlckJveCogcmVuZGVyQm94
ID0gY2FudmFzKCktPnJlbmRlckJveCgpOworICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYgcmVu
ZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7CisgICAg
ICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICBjYW52YXMoKS0+Y2xlYXJD
b3BpZWRJbWFnZSgpOworICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0No
YW5nZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkg
eworICAgICAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7CisgICAgICAgICAgICBj
YW52YXMoKS0+ZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgwLCAwKSwgY2xhbXBlZENhbnZh
c1NpemUoKSkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAoIW1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFyZWQK
KyAgICAgICAgfHwgbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFzayAm
JiBtX2ZyYW1lYnVmZmVyQmluZGluZykpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBjb250ZXh0QXR0cmlidXRlcyA9
IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3Nz
aWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xl
YXIuCisgICAgYm9vbCBjb21iaW5lZENsZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsK
KyAgICAKKyAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1Jf
VEVTVCk7CisgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKAor
ICAgICAgICAgICAgbV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAorICAgICAg
ICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29sb3JbMV0gOiAwLAorICAgICAgICAgICAg
bV9jb2xvck1hc2tbMl0gPyBtX2NsZWFyQ29sb3JbMl0gOiAwLAorICAgICAgICAgICAgbV9jb2xv
ck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9j
b250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNr
KHRydWUsIHRydWUsIHRydWUsIHRydWUpOworICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAoY29udGV4dEF0dHJp
YnV0ZXMtPmRlcHRoKCkpIHsKKyAgICAgICAgaWYgKCFjb21iaW5lZENsZWFyIHx8ICFtX2RlcHRo
TWFzayB8fCAhKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCkpCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMS4wZik7CisgICAgICAgIGNsZWFyTWFz
ayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICAgICAgbV9jb250
ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7CisgICAgfQorICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+
c3RlbmNpbCgpKSB7CisgICAgICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgICAgICBtX2NvbnRleHQt
PmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCAmIG1fc3RlbmNpbE1hc2spOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgY2xl
YXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgICAg
IG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQs
IDB4RkZGRkZGRkYpOworICAgIH0KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmNsZWFyRnJhbWVidWZmZXJzKGNsZWFyTWFzayk7CisgICAgZWxzZSB7
CisgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7Cisg
ICAgICAgIG1fY29udGV4dC0+Y2xlYXIoY2xlYXJNYXNrKTsKKyAgICB9CisgICAgCisgICAgcmVz
dG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAg
ICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBt
X2xheWVyQ2xlYXJlZCA9IHRydWU7CisgICAgCisgICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlQWZ0ZXJDbGVh
cigpCit7CisgICAgLy8gUmVzdG9yZSB0aGUgc3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCisg
ICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvciht
X2NsZWFyQ29sb3JbMF0sIG1fY2xlYXJDb2xvclsxXSwKKyAgICAgICAgbV9jbGVhckNvbG9yWzJd
LCBtX2NsZWFyQ29sb3JbM10pOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JNYXNr
WzBdLCBtX2NvbG9yTWFza1sxXSwKKyAgICAgICAgbV9jb2xvck1hc2tbMl0sIG1fY29sb3JNYXNr
WzNdKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgobV9jbGVhckRlcHRoKTsKKyAgICBtX2Nv
bnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCk7CisgICAgbV9jb250ZXh0LT5zdGVu
Y2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgbV9zdGVuY2lsTWFzayk7
CisgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0aE1hc2spOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQt
Pm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChjYW52YXMo
KS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50
YXRpb25Db3B5KCk7CisgICAgCisgICAgLy8gVW50aWwgdGhlIGNhbnZhcyBpcyB3cml0dGVuIHRv
IGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhlIGNsZWFyIHRoYXQKKyAgICAvLyBoYXBwZW5lZCBhZnRl
ciBpdCB3YXMgY29tcG9zaXRlZCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgY29tcG9zaXRvci4K
KyAgICBpZiAobV9jb250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAmJiAhbV9hdHRyaWJ1dGVzLnBy
ZXNlcnZlRHJhd2luZ0J1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPnBhaW50Q29tcG9zaXRl
ZFJlc3VsdHNUb0NhbnZhcyhjYW52YXMoKS0+YnVmZmVyKCkpOworICAgICAgICAKKyAgICAgICAg
Y2FudmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7CisgICAgfSBlbHNlCisgICAgICAgIGNh
bnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OworICAgIAorICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjYW52YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgp
OworICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIG1fY29u
dGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBt
X2RyYXdpbmdCdWZmZXIuZ2V0KCkpOworICAgIAorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsK
KyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RP
clplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPElt
YWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9JbWFnZURhdGEoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAg
ICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gVGhpcyBp
cyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0IGxldmVs
IHdlIGRvbid0CisgICAgLy8ga25vdyBpZiB0aGUgdW5kZXJseWluZyBGQk8gdXNlcyB0ZXh0dXJl
cyBvciByZW5kZXJidWZmZXJzLgorICAgIEdDM0RpbnQgbWF4U2l6ZSA9IHN0ZDo6bWluKG1fbWF4
VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7CisgICAgLy8gTGltaXQgZHJhd2lu
ZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkgZXhoYXVzdGlvbi4KKyAgICBjb25z
dCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OworICAgIG1heFNpemUgPSBzdGQ6Om1pbihtYXhT
aXplLCBzaXplVXBwZXJMaW1pdCk7CisgICAgR0MzRGludCBtYXhXaWR0aCA9IHN0ZDo6bWluKG1h
eFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKKyAgICBHQzNEaW50IG1heEhlaWdodCA9IHN0
ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFdKTsKKyAgICB3aWR0aCA9IGNsYW1w
KHdpZHRoLCAxLCBtYXhXaWR0aCk7CisgICAgaGVpZ2h0ID0gY2xhbXAoaGVpZ2h0LCAxLCBtYXhI
ZWlnaHQpOworICAgIAorICAgIGlmIChtX25lZWRzVXBkYXRlKSB7CisgICAgICAgIFJlbmRlckJv
eCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOworICAgICAgICBpZiAocmVuZGVy
Qm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgICAgICAg
ICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKKyAgICAgICAgbV9u
ZWVkc1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBkb24ndCBoYXZlIHRv
IG1hcmsgdGhlIGNhbnZhcyBhcyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2Ug
YnVmZmVyIHdpbGwgYWxzbyBzdGFydCBvZmYKKyAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hl
cyB3aGF0IHJlc2hhcGUgd2lsbCBkbykuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgsIGhlaWdodCkpOworICAg
ICAgICByZXN0b3JlU3RhdGVBZnRlckNsZWFyKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29u
dGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAKKyAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8obV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSkpOwor
ICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1l
YnVmZmVyQmluZGluZy5nZXQoKSkpOworfQorCitpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKKyAgICAK
KyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRo
KCk7Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVySGVp
Z2h0KCkgY29uc3QKK3sKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4g
bV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7CisgICAgCisgICAgcmV0dXJuIG1fY29u
dGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKK30KKwordW5zaWdu
ZWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRF
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgICAgIHJldHVybiBzaXpl
b2YoR0MzRHNob3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpJTlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KEdDM0R1aW50KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAg
cmV0dXJuIHNpemVvZihHQzNEZmxvYXQpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
Y3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwID49IG1fdGV4dHVyZVVuaXRzLnNpemUoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0
dXJlIHVuaXQgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9h
Y3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7
CisgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOworICAgIAorICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0QWN0aXZlVGV4dHVy
ZVVuaXQodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YXR0
YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIi
LCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRl
cikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAiYXR0YWNoU2hhZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkg
aGFzIHNoYWRlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YXR0
YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwor
ICAgIHNoYWRlci0+b25BdHRhY2hlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50
IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImJpbmRBdHRyaWJMb2Nh
dGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygi
YmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNQ
cmVmaXhSZXNlcnZlZChuYW1lKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQXR0cmliTG9jYXRpb24iLCAicmVz
ZXJ2ZWQgcHJlZml4Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGluZGV4ID49
IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJpbmRleCBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmJp
bmRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKK30K
KworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja09iamVjdFRvQmVCb3VuZChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QsIGJvb2wmIGRlbGV0
ZWQpCit7CisgICAgZGVsZXRlZCA9IGZhbHNlOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0KSB7CisgICAgICAg
IGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZWQgPSAhb2JqZWN0
LT5vYmplY3QoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVy
KiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRCdWZm
ZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlbGV0ZWQp
CisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmdldFRhcmdl
dCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRCdWZm
ZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB0YXJnZXRzIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBidWZmZXI7Cisg
ICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUikKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRFbGVtZW50QXJyYXlC
dWZmZXIoYnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRCdWZmZXIiLCAiaW52YWxpZCB0YXJn
ZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPmJpbmRC
dWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVyKSk7CisgICAgaWYgKGJ1ZmZlcikKKyAg
ICAgICAgYnVmZmVyLT5zZXRUYXJnZXQodGFyZ2V0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1l
YnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJp
bmRGcmFtZWJ1ZmZlciIsIGJ1ZmZlciwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoZGVsZXRlZCkKKyAgICAgICAgYnVmZmVyID0gMDsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEZyYW1lYnVmZmVyIiwgImludmFs
aWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgPSBidWZmZXI7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcob2JqZWN0T3JaZXJvKG1fZnJhbWVidWZm
ZXJCaW5kaW5nLmdldCgpKSk7CisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Ry
YXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gSW5zdGVhZCBvZiBiaW5kaW5nIGZiIDAsIGJpbmQg
dGhlIGRyYXdpbmcgYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmpl
Y3RPclplcm8oYnVmZmVyKSk7CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgYnVmZmVyLT5zZXRI
YXNFdmVyQmVlbkJvdW5kKCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0
LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNr
T2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVmZmVyLCBkZWxldGVk
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAgICByZW5kZXJCdWZm
ZXIgPSAwOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJlbmRlckJ1ZmZlcjsK
KyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8ocmVu
ZGVyQnVmZmVyKSk7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICAgICAgcmVuZGVyQnVmZmVy
LT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBk
ZWxldGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRUZXh0dXJlIiwgdGV4
dHVyZSwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAg
ICAgdGV4dHVyZSA9IDA7CisgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkg
JiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRUZXh0dXJl
IiwgInRleHR1cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHQzNEaW50IG1heExldmVsID0gMDsKKyAgICBpZiAo
dGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7CisgICAgICAgIG1fdGV4
dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcgPSB0ZXh0dXJl
OworICAgICAgICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOworICAgICAgICAKKyAgICAg
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4
dHVyZSkpOworICAgICAgICAKKyAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgeworICAgICAgICBtX3RleHR1cmVVbml0c1ttX2FjdGl2
ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSB0ZXh0dXJlOworICAgICAgICBt
YXhMZXZlbCA9IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmlu
ZFRleHR1cmUiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgb2JqZWN0T3JaZXJvKHRleHR1cmUpKTsK
KyAgICBpZiAodGV4dHVyZSkKKyAgICAgICAgdGV4dHVyZS0+c2V0VGFyZ2V0KHRhcmdldCwgbWF4
TGV2ZWwpOworICAgIAorICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0
aWNhbGx5IHNldCB0aGUgVEVYVFVSRV9XUkFQX1IKKyAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFN
UF9UT19FREdFIGZvciBjdWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKKyAgICAvLyBF
UyAyLjAgZG9lc24ndCBleHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlv
bikgYW5kCisgICAgLy8gb3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBv
dmVyIHRoZSBzZWFtcyBpbiB0aGlzCisgICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBl
YXJzIHRoYXQgc3VwcG9ydGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAorICAgIC8vIHBsYXRmb3Jt
cyBpcyBmYWlybHkgaW52b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJl
IElECisgICAgLy8gaW4gYWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxh
aW50cywgc28gdGhlIGxvZ2ljIGhhcworICAgIC8vIGJlZW4gcmVtb3ZlZC4KK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0Rm
bG9hdCBncmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSkKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0
LT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJi
bGVuZEVxdWF0aW9uIiwgbW9kZSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJs
ZW5kRXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBo
YSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5k
RXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0
aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZUFscGhhKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
Y29udGV4dC0+YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisK
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEZ1bmMoR0MzRGVudW0gc2Zh
Y3RvciwgR0MzRGVudW0gZGZhY3RvcikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5kRnVuYyIsIHNmYWN0b3IsIGRm
YWN0b3IpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoc2ZhY3Rv
ciwgZGZhY3Rvcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmxlbmRG
dW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNy
Y0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKK3sKKyAgICAvLyBOb3RlOiBBbHBoYSBkb2VzIG5v
dCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBhcyBSR0IuCisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBz
cmNSR0IsIGRzdFJHQikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kRnVu
Y1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBs
b25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRh
dGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CisgICAgaWYgKCFidWZm
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgInNpemUgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFzaXplKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAg
ICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShzdGF0aWNfY2FzdDxHQzNEc2l6
ZWlwdHI+KHNpemUpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgbV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmJ1
ZmZlckRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpLCB1c2FnZSk7
CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsK
KyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZm
ZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgorICAgICAgICBi
dWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVm
ZmVyKiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKKyAgICBpZiAoIWJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuOworICAgIGlmICghZGF0YSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8g
ZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghaXNFcnJvckdlbmVyYXRl
ZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lh
dGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZm
ZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBt
X2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4
dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0YSgpLCB1
c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRo
ZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgorICAg
ICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFy
cmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1
ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJE
YXRhIiwgIm5vIGRhdGEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZl
ci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImlu
dmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAg
ICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEt
PmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9T
eW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlv
biBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhp
bmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwor
ICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFy
Z2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIGlmICghYnVmZmVyKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRh
IiwgIm9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWRhdGEp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0
YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZm
ZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRo
ZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIHN0
YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+
ZGF0YSgpKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyU3ViRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRl
bGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMu
CisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAgIH0KK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0g
dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRhcmdldCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZz
ZXQgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFkYXRhKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2Vz
KCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoc3RhdGlj
X2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0
YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRy
ZXNzKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpKSB7CisgICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVs
bCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4K
KyAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCitH
QzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
OworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7CisgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1l
YnVmZmVyIGluY29tcGxldGUiOworICAgIEdDM0RlbnVtIHJlc3VsdCA9IG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5jaGVja1N0YXR1cygmcmVhc29uKTsKKyAgICBpZiAocmVzdWx0ICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICBwcmludEdMV2Fybmlu
Z1RvQ29uc29sZSgiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIsIHJlYXNvbik7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIHJlc3VsdCA9IG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyh0YXJnZXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtYXNr
ICYgfihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVS
X0JJVCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJjbGVhciIsICJpbnZhbGlkIG1hc2siKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7
CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24p
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNsZWFyIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoIWNsZWFySWZDb21wb3NpdGVkKG1hc2spKQorICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyKG1hc2spOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0Rm
bG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MzRGZsb2F0IGEpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzdGQ6OmlzbmFuKHIpKQor
ICAgICAgICByID0gMDsKKyAgICBpZiAoc3RkOjppc25hbihnKSkKKyAgICAgICAgZyA9IDA7Cisg
ICAgaWYgKHN0ZDo6aXNuYW4oYikpCisgICAgICAgIGIgPSAwOworICAgIGlmIChzdGQ6OmlzbmFu
KGEpKQorICAgICAgICBhID0gMTsKKyAgICBtX2NsZWFyQ29sb3JbMF0gPSByOworICAgIG1fY2xl
YXJDb2xvclsxXSA9IGc7CisgICAgbV9jbGVhckNvbG9yWzJdID0gYjsKKyAgICBtX2NsZWFyQ29s
b3JbM10gPSBhOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhckRlcHRoKEdDM0RmbG9hdCBkZXB0
aCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgbV9jbGVhckRlcHRoID0gZGVwdGg7CisgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGRl
cHRoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhclN0ZW5jaWwo
R0MzRGludCBzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IHM7CisgICAgbV9jb250ZXh0LT5jbGVhclN0
ZW5jaWwocyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29sb3JNYXNr
KEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdD
M0Rib29sZWFuIGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2NvbG9yTWFza1swXSA9IHJlZDsKKyAgICBtX2NvbG9yTWFz
a1sxXSA9IGdyZWVuOworICAgIG1fY29sb3JNYXNrWzJdID0gYmx1ZTsKKyAgICBtX2NvbG9yTWFz
a1szXSA9IGFscGhhOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21waWxlU2hh
ZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgiY29tcGlsZVNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIob2JqZWN0T3JaZXJvKHNoYWRlcikpOworICAg
IEdDM0RpbnQgdmFsdWU7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8o
c2hhZGVyKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTLCAmdmFsdWUpOworICAg
IHNoYWRlci0+c2V0VmFsaWQodmFsdWUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKKyAgICBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQoreworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgbGV2
ZWwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRU
ZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJp
bnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KGJvcmRlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RGlt
ZW5zaW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVp
Z2h0LCBpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRl
Q29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRoLCBoZWln
aHQsIGludGVybmFsZm9ybWF0LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFdl
YkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleElt
YWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7CisgICAgICAgIGlmIChsZXZlbCAmJiBXZWJH
TFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVzc2VkVGV4
SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgIGJvcmRlciwg
ZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICBpZiAobV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUg
Y29tcHJlc3NlZFRleEltYWdlMkQgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1
cmUgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGZvciB0aGlzIGxldmVsLgorICAgICAgICB0ZXgt
Pm1hcmtJbnZhbGlkKHRhcmdldCwgbGV2ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CisgICAgdGV4
LT5zZXRDb21wcmVzc2VkKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRh
cmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNz
ZWRUZXhGb3JtYXQoZm9ybWF0KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52
YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRl
Q29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgZGF0YSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXZWJHTFRl
eHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChmb3JtYXQgIT0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVs
KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJmb3JtYXQgZG9lcyBub3Qg
bWF0Y2ggdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhT
dWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0ZXgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZ3JhcGhpY3NDb250
ZXh0M0QoKS0+Y29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwKKyAgICAgICAgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhLT5ieXRlTGVuZ3Ro
KCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOworICAgIHRleC0+c2V0Q29tcHJlc3NlZCgpOworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3Jt
YXQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYg
KEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpICYgKEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQlVGRkVSX0JJVCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBi
ZSBzZXQsIG9ubHkgcmVuZGVyZWQgdG8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpj
b3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJh
bWV0ZXJzKCJjb3B5VGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGludGVybmFsZm9ybWF0LCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhJbWFnZTJEIiwgaW50ZXJuYWxm
b3JtYXQpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0
ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYg
KCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xv
ckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdldEJvdW5kRnJhbWVidWZm
ZXJDb2xvckZvcm1hdCgpKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2UyRCIsICJmcmFtZWJ1ZmZl
ciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpICYmIGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9U
KHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBw
b3dlciBvZiAyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciogcmVh
c29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNE
KCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJj
b3B5VGV4SW1hZ2UyRCIsIHJlYXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2xl
YXJJZkNvbXBvc2l0ZWQoKTsKKyAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgeworICAgICAgICBT
Y29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVy
IGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgp
KTsKKyAgICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CisgICAgICAgIEdDM0RzaXpl
aSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CisgICAgICAgIGlmIChjbGlwMkQoeCwgeSwg
d2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVi
dWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlw
cGVkSGVpZ2h0KSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VT
YWZlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAgICBpZiAoY2xpcHBlZFdp
ZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgIG1fY29udGV4
dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgY2xpcHBlZFggLSB4LCBjbGlwcGVk
WSAtIHksCisgICAgICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdp
ZHRoLCBjbGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIH0KKyAgICAvLyBGSVhN
RTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cg
c2hvdWxkIGJlIGV4ZWN1dGVkLgorICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29weVRleFN1
YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleFN1YkltYWdlMkQiLCB0
YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2
YWxpZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkgfHwgIXZh
bGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAg
cmV0dXJuOworICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNo
ZWNrIGlmIG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA8
IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJi
YWQgZGltZW5zaW9ucyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh4b2Zmc2V0
ICsgd2lkdGggPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWln
aHQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFn
ZTJEIiwgInJlY3RhbmdsZSBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFy
Z2V0LCBsZXZlbCk7CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4
U3ViSW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZv
cm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlU
ZXhTdWJJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZm
ZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VT
YWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJE
IiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGVhcklmQ29tcG9zaXRl
ZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAgICAgIFNjb3BlZERyYXdpbmdC
dWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOworICAgICAgICBHQzNE
c2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OworICAgICAgICBpZiAoY2xpcDJEKHgs
IHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZy
YW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAm
Y2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleC0+Z2V0
SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICBHQzNEZW51bSB0eXBl
ID0gdGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPHVuc2lnbmVkIGNoYXJbXT4gemVybzsKKyAgICAgICAgICAgIGlmICh3aWR0aCAmJiBoZWln
aHQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplOworICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQs
IHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7CisgICAg
ICAgICAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewor
ICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJ
bWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91bmlx
dWU8dW5zaWduZWQgY2hhcltdPihzaXplKTsKKyAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsK
KyAgICAgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7CisgICAgICAg
ICAgICBpZiAoY2xpcHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAg
ICAgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZl
ci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBw
ZWRYIC0geCwgeW9mZnNldCArIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgY2xp
cHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJp
bmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5n
ZXQoKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9
CisgICAgfQorfQorCitQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbyA9
IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkp
OworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQ
dHI8V2ViR0xGcmFtZWJ1ZmZlcj4gbyA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsK
KyAgICBhZGRDb250ZXh0T2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNz
UmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlVGV4
dHVyZSgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdMVGV4dHVyZTo6
Y3JlYXRlKHRoaXMpOworICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4g
bzsKK30KKworUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBX
ZWJHTFByb2dyYW06OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7
CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVm
UHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBvID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlz
KTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bh
c3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVNo
YWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hB
REVSICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Y3JlYXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIAorICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hh
ZGVyOjpjcmVhdGUodGhpcywgdHlwZSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwor
ICAgIHJldHVybiBvOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmN1bGxG
YWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y3VsbEZhY2UobW9kZSk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBv
YmplY3QpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRH
cm91cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9u
ZyB0byB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBp
ZiAob2JqZWN0LT5vYmplY3QoKSkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gY29u
dGV4dCBoZXJlIGJlY2F1c2Ugd2Ugd2FudAorICAgICAgICAvLyB0aGluZ3MgaW4gdGhpcyBjb250
ZXh0IHVuYm91bmQuCisgICAgICAgIG9iamVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNzQ29udGV4
dDNEKCkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBp
ZiAoIWRlbGV0ZU9iamVjdChidWZmZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fYm91
bmRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCisgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7
CisgICAgCisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT51bmJpbmRCdWZmZXIoYnVmZmVy
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVGcmFtZWJ1ZmZl
cihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVj
dChmcmFtZWJ1ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0g
bV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAw
OworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZygwKTsKKyAgICAgICAgICAgIC8vIEhhdmUgdG8g
Y2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJhY2sgdG8gaW50ZXJuYWwgZmJvLgor
ICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgZGVsZXRlT2Jq
ZWN0KHByb2dyYW0pOworICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFByb2dyYW0gdG8g
MCBoZXJlIGJlY2F1c2UgdGhlIGRlbGV0aW9uIG9mIHRoZQorICAgIC8vIGN1cnJlbnQgcHJvZ3Jh
bSBpcyBkZWxheWVkLgorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlm
ICghZGVsZXRlT2JqZWN0KHJlbmRlcmJ1ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
cmVuZGVyYnVmZmVyID09IG1fcmVuZGVyYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9yZW5kZXJi
dWZmZXJCaW5kaW5nID0gMDsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZm
ZXIocmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
ZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBkZWxldGVPYmplY3Qoc2hh
ZGVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVUZXh0dXJl
KFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJl
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJl
VW5pdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5p
dHNbaV0udGV4dHVyZTJEQmluZGluZykKKyAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRl
eHR1cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1
cmVVbml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpCisgICAgICAgICAgICBtX3RleHR1cmVV
bml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1v
dmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29u
dGV4dC0+ZGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RlcHRoTWFzayA9IGZsYWc7Cisg
ICAgbV9jb250ZXh0LT5kZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZGVwdGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoek5lYXIgPiB6RmFyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpO
ZWFyLCB6RmFyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXRhY2hT
aGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHBy
b2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBzaGFkZXIpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFwcm9ncmFtLT5kZXRhY2hTaGFkZXIoc2hhZGVyKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJkZXRhY2hTaGFkZXIiLCAic2hhZGVyIG5vdCBhdHRhY2hlZCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25EZXRhY2hl
ZChncmFwaGljc0NvbnRleHQzRCgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7
CisgICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgYXBwbHlTdGVuY2ls
VGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgeworICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFs
c2U7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOworICAgIH0KKyAgICBt
X2NvbnRleHQtPmRpc2FibGUoY2FwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRl
eEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9m
IHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3RhdGUuZW5hYmxl
ZCA9IGZhbHNlOworICAgIAorICAgIGlmIChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgp
KQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVFbGVtZW50QXJyYXlT
aXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit7
CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIAorICAgIGlmICgh
ZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYg
KG9mZnNldCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAodHlwZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIEZvciBhbiB1
bnNpZ25lZCBpbnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlzaWJsZSBieSA0IGZvciBhbGln
bm1lbnQgcmVhc29ucy4KKyAgICAgICAgaWYgKG9mZnNldCAlIDQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBv
ZmZzZXQuCisgICAgICAgIG9mZnNldCAvPSA0OworICAgICAgICAKKyAgICAgICAgR0MzRHNpemVp
cHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7CisgICAgICAgIGlm
IChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUKSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0
IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVudCByZWFzb25zLgorICAgICAgICBp
ZiAob2Zmc2V0ICUgMikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgb2Zmc2V0IC89
IDI7CisgICAgICAgIAorICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpIC8gMjsKKyAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBu
IC0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgeworICAgICAgICBHQzNEc2l6
ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgICAgICBpZiAo
b2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1
bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKK3sKKyAgICAvLyBQZXJmb3JtcyBjb25zZXJ2
YXRpdmUgdmFsaWRhdGlvbiBieSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgorICAgIC8vIHRo
ZSBnaXZlbiB0eXBlIHBlciBlbGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBib3Vu
ZAorICAgIC8vIGFycmF5IGJ1ZmZlcnMgaGF2ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0aXNmeSB0
aGF0IG1heGltdW0KKyAgICAvLyBpbmRleCwgc2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXItZHJhdy1j
YWxsIGl0ZXJhdGlvbiBpbgorICAgIC8vIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UuCisgICAg
CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIAorICAgIGlmICgh
ZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgR0Mz
RHNpemVpcHRyIG51bUVsZW1lbnRzID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7
CisgICAgLy8gVGhlIGNhc2UgY291bnQ9PTAgaXMgYWxyZWFkeSBkZWFsdCB3aXRoIGluIGRyYXdF
bGVtZW50cyBiZWZvcmUgdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlLgorICAgIGlmICgh
bnVtRWxlbWVudHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBBcnJheUJ1ZmZl
ciogYnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAg
ICBBU1NFUlQoYnVmZmVyKTsKKyAgICAKKyAgICBpbnQgbWF4SW5kZXggPSBlbGVtZW50QXJyYXlC
dWZmZXItPmdldENhY2hlZE1heEluZGV4KHR5cGUpOworICAgIGlmIChtYXhJbmRleCA8IDApIHsK
KyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZl
ciBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5kZXguCisgICAgICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7CisgICAgICAg
ICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihi
dWZmZXItPmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8
IG51bUVsZW1lbnRzOyBpKyspCisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heCht
YXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDog
eworICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgICAg
ICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQq
PihidWZmZXItPmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsg
aSA8IG51bUVsZW1lbnRzOyBpKyspCisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1h
eChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6
IHsKKyAgICAgICAgICAgIGlmICghbV9vZXNFbGVtZW50SW5kZXhVaW50KQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNE
dWludCk7CisgICAgICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0
IEdDM0R1aW50Kj4oYnVmZmVyLT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlw
dHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAgIG1heEluZGV4
ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbGVtZW50QXJyYXlCdWZmZXItPnNldENhY2hl
ZE1heEluZGV4KHR5cGUsIG1heEluZGV4KTsKKyAgICB9CisgICAgCisgICAgaWYgKG1heEluZGV4
ID49IDApIHsKKyAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXF1aXJlZCBlbGVtZW50cyBpcyBv
bmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtCisgICAgICAgIC8vIGluZGV4IHRoYXQgd2lsbCBiZSBh
Y2Nlc3NlZC4KKyAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IG1heEluZGV4ICsgMTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNl
KEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVuc2ln
bmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQoreworICAgIEFTU0VSVChjb3VudCA+PSAwICYmIG9m
ZnNldCA+PSAwKTsKKyAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSAwOworICAgIAorICAgIFJlZlB0
cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICAKKyAgICBpZiAoIWVsZW1lbnRBcnJh
eUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghY291bnQpIHsK
KyAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVm
ZmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICB1bnNpZ25lZCBsb25nIHVv
ZmZzZXQgPSBvZmZzZXQ7CisgICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7CisgICAgCisgICAg
aWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgeworICAgICAgICAv
LyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIHVvZmZzZXQgLz0gc2l6
ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAgPSBzdGF0aWNfY2FzdDxj
b25zdCBHQzNEdWludCo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCkt
PmRhdGEoKSkgKyB1b2Zmc2V0OworICAgICAgICB3aGlsZSAobi0tID4gMCkgeworICAgICAgICAg
ICAgaWYgKCpwID4gbGFzdEluZGV4KQorICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOwor
ICAgICAgICAgICAgKytwOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCkgeworICAgICAgICAvLyBNYWtlIHVvZmZzZXQg
YW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdDM0R1c2hvcnQp
OworICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVz
aG9ydCo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkg
KyB1b2Zmc2V0OworICAgICAgICB3aGlsZSAobi0tID4gMCkgeworICAgICAgICAgICAgaWYgKCpw
ID4gbGFzdEluZGV4KQorICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOworICAgICAgICAg
ICAgKytwOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5
QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0OworICAgICAgICB3aGlsZSAobi0tID4gMCkgewor
ICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4KQorICAgICAgICAgICAgICAgIGxhc3RJbmRl
eCA9ICpwOworICAgICAgICAgICAgKytwOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8v
IFRoZW4gc2V0IHRoZSBsYXN0IGluZGV4IGluIHRoZSBpbmRleCBhcnJheSBhbmQgbWFrZSBzdXJl
IGl0IGlzIHZhbGlkLgorICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBsYXN0SW5kZXggKyAxOwor
ICAgIHJldHVybiBudW1FbGVtZW50c1JlcXVpcmVkID4gMDsKK30KKworYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVu
dENvdW50LCB1bnNpZ25lZCBwcmltaXRpdmVDb3VudCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFBy
b2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBMb29rIGluIGVhY2gg
ZW5hYmxlZCB2ZXJ0ZXggYXR0cmliIGFuZCBjaGVjayBpZiB0aGV5J3ZlIGJlZW4gYm91bmQgdG8g
YSBidWZmZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF4VmVydGV4QXR0cmli
czsgKytpKSB7CisgICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0
ZXhBdHRyaWJTdGF0ZShpKS52YWxpZGF0ZUJpbmRpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKGVsZW1lbnRDb3VudCA8PSAwKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAKKyAgICAvLyBMb29rIGluIGVhY2ggY29uc3VtZWQgdmVy
dGV4IGF0dHJpYiAoYnkgdGhlIGN1cnJlbnQgcHJvZ3JhbSkuCisgICAgYm9vbCBzYXdOb25JbnN0
YW5jZWRBdHRyaWIgPSBmYWxzZTsKKyAgICBib29sIHNhd0VuYWJsZWRBdHRyaWIgPSBmYWxzZTsK
KyAgICBpbnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zID0gbV9jdXJyZW50UHJvZ3JhbS0+bnVt
QWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BY3Rp
dmVBdHRyaWJMb2NhdGlvbnM7ICsraSkgeworICAgICAgICBpbnQgbG9jID0gbV9jdXJyZW50UHJv
Z3JhbS0+Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24oaSk7CisgICAgICAgIGlmIChsb2MgPj0gMCAm
JiBsb2MgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fbWF4VmVydGV4QXR0cmlicykpIHsKKyAgICAgICAg
ICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBz
dGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUobG9j
KTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgc2F3
RW5hYmxlZEF0dHJpYiA9IHRydWU7CisgICAgICAgICAgICAgICAgLy8gQXZvaWQgb2ZmLWJ5LW9u
ZSBlcnJvcnMgaW4gbnVtRWxlbWVudHMgY29tcHV0YXRpb24uCisgICAgICAgICAgICAgICAgLy8g
Rm9yIHRoZSBsYXN0IGVsZW1lbnQsIHdlIHdpbGwgb25seSB0b3VjaCB0aGUgZGF0YSBmb3IgdGhl
CisgICAgICAgICAgICAgICAgLy8gZWxlbWVudCBhbmQgbm90aGluZyBiZXlvbmQgaXQuCisgICAg
ICAgICAgICAgICAgaW50IGJ5dGVzUmVtYWluaW5nID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0ZS5i
dWZmZXJCaW5kaW5nLT5ieXRlTGVuZ3RoKCkgLSBzdGF0ZS5vZmZzZXQpOworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3Rh
dGUuc3RyaWRlID4gMCk7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVzUmVtYWluaW5nID49IHN0
YXRlLmJ5dGVzUGVyRWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgbnVtRWxlbWVudHMgPSAx
ICsgKGJ5dGVzUmVtYWluaW5nIC0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KSAvIHN0YXRlLnN0cmlk
ZTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmRpdmlzb3IpCisgICAgICAgICAgICAgICAg
ICAgIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCgh
c3RhdGUuZGl2aXNvciAmJiBlbGVtZW50Q291bnQgPiBudW1FbGVtZW50cykgfHwgKHN0YXRlLmRp
dmlzb3IgJiYgcHJpbWl0aXZlQ291bnQgPiBudW1FbGVtZW50cykpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBpZiAoIXNhd05vbkluc3RhbmNlZEF0dHJpYiAmJiBzYXdFbmFibGVkQXR0cmliKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QgfHwg
IW9iamVjdC0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIG9iamVjdCBvciBvYmpl
Y3QgZGVsZXRlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghb2Jq
ZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGZ1bmN0aW9uTmFt
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoZmlyc3QgPCAwIHx8IGNv
dW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZmlyc3Qgb3IgY291bnQgPCAwIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFjb3VudCkgeworICAgICAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBpZiAocHJpbWNvdW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50
IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghaXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3Vy
ZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIENoZWNrZWQ8R0MzRGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7CisgICAgICAgIENoZWNrZWQ8
R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENo
ZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3Qg
KyBjaGVja2VkQ291bnQ7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+
IGNoZWNrZWRQcmltQ291bnQocHJpbWNvdW50KTsKKyAgICAgICAgaWYgKGNoZWNrZWRTdW0uaGFz
T3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8ICF2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hlY2tlZFByaW1D
b3VudC51bnNhZmVHZXQoKSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0
byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdmFsaWRhdGVWZXJ0ZXhB
dHRyaWJ1dGVzKDApKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dHJpYnMgbm90IHNl
dHVwIGNvcnJlY3RseSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBs
ZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJl
YXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBH
QzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRy
YXdBcnJheXMiLCBtb2RlLCBmaXJzdCwgY291bnQsIDApKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICAKKyAgICBib29sIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAg
dmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNv
dW50IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1Rl
eHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCB0cnVlKTsKKyAgICBtX2NvbnRleHQtPmRy
YXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
KyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOwor
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zm
c2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5jdGlvbk5hbWUsIG1vZGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhm
dW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICBpZiAobV9v
ZXNFbGVtZW50SW5kZXhVaW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKGNvdW50IDwgMCB8fCBvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJjb3VudCBvciBvZmZzZXQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJubyBFTEVNRU5UX0FSUkFZX0JVRkZFUiBib3VuZCIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZC
b3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVu
ZGVyaW5nIHN0YXRlCisgICAgICAgIGlmICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKGNvdW50
LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9B
UlJBWV9CVUZGRVIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIWNvdW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZh
bGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cykpIHsKKyAgICAgICAgICAgIGlmICgh
dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMo
bnVtRWxlbWVudHMpKSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRv
IGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlm
ICghdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJm
cmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNS
ZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsIHJlYXNvbik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0VsZW1l
bnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBs
b25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICAKKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7CisgICAgaWYgKCF2YWxpZGF0ZURy
YXdFbGVtZW50cygiZHJhd0VsZW1lbnRzIiwgbW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgbnVt
RWxlbWVudHMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQo
KTsKKyAgICAKKyAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBp
ZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQorICAg
ICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpOworICAgICAgICB2ZXJ0ZXhBdHRy
aWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKKyAgICB9
CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21w
bGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIHRydWUpOworICAgIG1fY29udGV4dC0+ZHJhd0VsZW1l
bnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsK
KyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQor
ICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAg
IGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVu
ZXNzKCJkcmF3RWxlbWVudHMiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxp
dHkoImVuYWJsZSIsIGNhcCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpIHsKKyAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCA9
IHRydWU7CisgICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKKyAg
ICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IHRydWU7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Np
c3NvckVuYWJsZWQpOworICAgIH0KKyAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdD
M0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUm
IHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShp
bmRleCk7CisgICAgc3RhdGUuZW5hYmxlZCA9IHRydWU7CisgICAgCisgICAgbV9jb250ZXh0LT5l
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZmluaXNoKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5maW5pc2goKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmbHVzaCgpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Zmx1c2goKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRl
cmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYnVmZmVyICYmICFidWZmZXItPnZhbGlkYXRl
KGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ciIsICJubyBidWZmZXIgb3IgYnVmZmVyIG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGZyYW1lYnVm
ZmVyIHRvIGJlIG11dGF0ZWQ7IGFsbCBjdXJyZW50CisgICAgLy8gaW1wbGVtZW50YXRpb25zIHVz
ZSBhbiBGQk8gaW50ZXJuYWxseSBpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdAorICAgIC8vIEZCTy4K
KyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gZnJhbWVi
dWZmZXIgYm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBQbGF0Zm9ybTNET2Jq
ZWN0IGJ1ZmZlck9iamVjdCA9IG9iamVjdE9yWmVybyhidWZmZXIpOworICAgIHN3aXRjaCAoYXR0
YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRU
QUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJn
ZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCByZW5kZXJidWZmZXJ0YXJn
ZXQsIGJ1ZmZlck9iamVjdCk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCByZW5k
ZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBh
dHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9iamVjdCk7CisgICAgfQorICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihh
dHRhY2htZW50LCBidWZmZXIpOworICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0
dXJlKiB0ZXh0dXJlLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCB0
YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGxldmVsKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibGV2ZWwgbm90IDAiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAodGV4dHVyZSAmJiAhdGV4dHVyZS0+dmFsaWRhdGUoY29udGV4dEdy
b3VwKCksIHRoaXMpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIHRleHR1
cmUgb3IgdGV4dHVyZSBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBt
dXRhdGVkOyBhbGwgY3VycmVudAorICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGlu
dGVybmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFt
X2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlT2Jq
ZWN0ID0gb2JqZWN0T3JaZXJvKHRleHR1cmUpOworICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAg
ICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVs
KTsKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVj
dCwgbGV2ZWwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJE
KHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNI
TUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0
dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJE
KHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Cisg
ICAgfQorICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFt
ZWJ1ZmZlcihhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBhcHBs
eVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZnJv
bnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1vZGUpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVt
IHRhcmdldCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJn
ZW5lcmF0ZU1pcG1hcCIsIHRhcmdldCwgZmFsc2UpOworICAgIGlmICghdGV4KQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCF0ZXgtPmNhbkdlbmVyYXRlTWlwbWFwcygpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdl
bmVyYXRlTWlwbWFwIiwgImxldmVsIDAgbm90IHBvd2VyIG9mIDIgb3Igbm90IGFsbCB0aGUgc2Ft
ZSBzaXplIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM5MTYuIENvbXByZXNzZWQgdGV4dHVy
ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaW4gV2ViR0wgMjoKKyAgICBpZiAodGV4LT5pc0NvbXByZXNz
ZWQoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJ0cnlpbmcgdG8gZ2VuZXJhdGUgbWlw
bWFwcyBmcm9tIGNvbXByZXNzZWQgdGV4dHVyZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiZ2VuZXJhdGVNaXBtYXAiLCB0ZXgt
PmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgMCkpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgLy8gZ2VuZXJhdGVNaXBtYXAgd29uJ3Qgd29yayBwcm9wZXJseSBpZiBtaW5GaWx0ZXIgaXMg
bm90IE5FQVJFU1RfTUlQTUFQX0xJTkVBUgorICAgIC8vIG9uIE1hYy4gUmVtb3ZlIHRoZSBoYWNr
IG9uY2UgdGhpcyBkcml2ZXIgYnVnIGlzIGZpeGVkLgorI2lmIE9TKERBUldJTikKKyAgICBib29s
IG5lZWRUb1Jlc2V0TWluRmlsdGVyID0gZmFsc2U7CisgICAgaWYgKHRleC0+Z2V0TWluRmlsdGVy
KCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUikgeworICAgICAg
ICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFS
KTsKKyAgICAgICAgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSB0cnVlOworICAgIH0KKyNlbmRpZgor
ICAgIG1fY29udGV4dC0+Z2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKKyNpZiBPUyhEQVJXSU4pCisg
ICAgaWYgKG5lZWRUb1Jlc2V0TWluRmlsdGVyKQorICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCB0ZXgt
PmdldE1pbkZpbHRlcigpKTsKKyNlbmRpZgorICAgIHRleC0+Z2VuZXJhdGVNaXBtYXBMZXZlbElu
Zm8oKTsKK30KKworUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50
IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdl
dEFjdGl2ZUF0dHJpYiIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBB
Y3RpdmVJbmZvIGluZm87CisgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZUF0dHJpYihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgCisgICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVz
IiwgaW5kZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAKKyAgICByZXR1cm4gV2Vi
R0xBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7Cit9
CisKK1Bhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QWN0aXZl
VW5pZm9ybSIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBY3RpdmVJbmZvIGlu
Zm87CisgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGlmIChpbmZvLnNpemUgPiAxICYmICFpbmZv
Lm5hbWUuZW5kc1dpdGgoIlswXSIpKQorICAgICAgICAgICAgaW5mby5uYW1lLmFwcGVuZCgiWzBd
Iik7CisgICAgfQorICAgIAorICAgIExPRyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9y
bSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIAorICAgIHJl
dHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5z
aXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNo
YWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4m
IHNoYWRlck9iamVjdHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgc2hhZGVyT2JqZWN0cy5jbGVhcigpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0dGFjaGVkU2hhZGVycyIsIHBy
b2dyYW0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgY29uc3QgR0MzRGVudW0g
c2hhZGVyVHlwZVtdID0geworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURF
UiwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUgorICAgIH07Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihzaGFkZXJUeXBlKSAvIHNpemVvZihH
QzNEZW51bSk7ICsraSkgeworICAgICAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gcHJvZ3JhbS0+
Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7CisgICAgICAgIGlmIChzaGFkZXIpCisg
ICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIpOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRy
aWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRBdHRyaWJMb2NhdGlvbiIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gLTE7CisgICAg
aWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQor
ICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiZ2V0QXR0cmliTG9j
YXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChpc1ByZWZpeFJlc2Vy
dmVkKG5hbWUpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKCFwcm9ncmFtLT5nZXRMaW5r
U3RhdHVzKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QXR0cmliTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlu
a2VkIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIG1fY29udGV4dC0+
Z2V0QXR0cmliTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKK30KKworV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1ZmZlclBhcmFtZXRlcihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIgJiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpF
TEVNRU5UX0FSUkFZX0JVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
dGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAmJiBwbmFtZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZmZXJQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorICAgIAorICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4
dC0+Z2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKKyAgICBpZiAo
cG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9TSVpFKQorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YWx1ZSkpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAvLyBXZSBhbHdheXMgbmVlZCB0byByZXR1cm4gYSBuZXcgV2ViR0xDb250ZXh0QXR0
cmlidXRlcyBvYmplY3QgdG8KKyAgICAvLyBwcmV2ZW50IHRoZSB1c2VyIGZyb20gbXV0YXRpbmcg
YW55IGNhY2hlZCB2ZXJzaW9uLgorICAgIAorICAgIC8vIEFsc28sIHdlIG5lZWQgdG8gZW5mb3Jj
ZSByZXF1ZXN0ZWQgdmFsdWVzIG9mICJmYWxzZSIgZm9yIGRlcHRoCisgICAgLy8gYW5kIHN0ZW5j
aWwsIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHVuZGVybHlpbmcKKyAgICAv
LyBHcmFwaGljc0NvbnRleHQzRCBvciBEcmF3aW5nQnVmZmVyLgorICAgIFJlZlB0cjxXZWJHTENv
bnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVzID0gV2ViR0xDb250ZXh0QXR0cmlidXRlczo6Y3Jl
YXRlKG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSk7CisgICAgaWYgKCFtX2F0dHJp
YnV0ZXMuZGVwdGgpCisgICAgICAgIGF0dHJpYnV0ZXMtPnNldERlcHRoKGZhbHNlKTsKKyAgICBp
ZiAoIW1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICBhdHRyaWJ1dGVzLT5zZXRTdGVuY2ls
KGZhbHNlKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIFRoZSBEcmF3
aW5nQnVmZmVyIG9idGFpbnMgaXRzIHBhcmFtZXRlcnMgZnJvbSBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSwKKyAgICAgICAgLy8gYnV0IGl0IG1ha2VzIGl0cyBvd24g
ZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIG11bHRpc2FtcGxpbmcgaXMgc3VwcG9ydGVkLgorICAg
ICAgICBhdHRyaWJ1dGVzLT5zZXRBbnRpYWxpYXMobV9kcmF3aW5nQnVmZmVyLT5tdWx0aXNhbXBs
ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGF0dHJpYnV0ZXMucmVsZWFzZSgpOworfQorCitHQzNE
ZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1f
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUjsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOworfQorCitX
ZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKQorICAgICAgICAmJiAobV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgfHwg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3RleHR1
cmVfbG9kIikpKSB7CisgICAgICAgIGlmICghbV9leHRTaGFkZXJUZXh0dXJlTE9EKSB7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCIpOworICAgICAgICAgICAgbV9leHRTaGFkZXJUZXh0dXJlTE9E
ID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRTaGFkZXJUZXh0dXJlTE9EPih0aGlzKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbV9leHRTaGFkZXJUZXh0dXJlTE9ELmdldCgpOworICAgIH0KKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKSB7CisgICAgICAgIGlm
ICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMiKTsKKyAgICAgICAgICAgIG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
ID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM+KHRoaXMpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5n
ZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpKSB7CisgICAgICAgIGlmICgh
bV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7
CisgICAgICAgICAgICBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfZmxvYXQiKQorICAgICAgICAmJiBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0IikpIHsK
KyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdCkgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0Iik7
CisgICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4
dHVyZUZsb2F0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJl
RmxvYXQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VT
X3RleHR1cmVfZmxvYXRfbGluZWFyIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkgeworICAgICAg
ICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0TGluZWFyKSB7CisgICAgICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGlu
ZWFyIik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdExpbmVhciA9IHN0ZDo6bWFrZV91
bmlxdWU8T0VTVGV4dHVyZUZsb2F0TGluZWFyPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpCisgICAgICAgICYm
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlSGFsZkZsb2F0KSB7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VT
X3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlSGFsZkZsb2F0
ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNUZXh0dXJlSGFsZkZsb2F0Pih0aGlzKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0LmdldCgpOworICAgIH0KKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGlu
ZWFyIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKSB7CisgICAgICAgIGlmICghbV9vZXNU
ZXh0dXJlSGFsZkZsb2F0TGluZWFyKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIi
KTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhciA9IHN0ZDo6bWFrZV91
bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhci5nZXQoKTsKKyAgICB9CisgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpCisg
ICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3Zl
cnRleF9hcnJheV9vYmplY3QiKSkgeworICAgICAgICBpZiAoIW1fb2VzVmVydGV4QXJyYXlPYmpl
Y3QpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFi
bGVkKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpOworICAgICAgICAgICAgbV9vZXNWZXJ0
ZXhBcnJheU9iamVjdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVmVydGV4QXJyYXlPYmplY3Q+KHRo
aXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29lc1ZlcnRleEFycmF5T2JqZWN0Lmdl
dCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU19lbGVtZW50
X2luZGV4X3VpbnQiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkgeworICAgICAgICBpZiAoIW1fb2Vz
RWxlbWVudEluZGV4VWludCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKTsKKyAgICAgICAg
ICAgIG1fb2VzRWxlbWVudEluZGV4VWludCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTRWxlbWVudElu
ZGV4VWludD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzRWxlbWVudElu
ZGV4VWludC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJHTF9sb3NlX2NvbnRleHQiKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xMb3NlQ29udGV4dCkK
KyAgICAgICAgICAgIG1fd2ViZ2xMb3NlQ29udGV4dCA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xM
b3NlQ29udGV4dD4odGhpcyk7CisgICAgICAgIHJldHVybiBtX3dlYmdsTG9zZUNvbnRleHQuZ2V0
KCk7CisgICAgfQorICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9XRUJH
TF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVz
c2VkVGV4dHVyZUFUQykKKyAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQyA9
IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQz4odGhpcyk7CisgICAg
ICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMuZ2V0KCk7CisgICAgfQorICAg
IGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3Rl
eHR1cmVfcHZydGMiKSkKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpz
dXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQykKKyAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDID0gc3RkOjpt
YWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM+KHRoaXMpOworICAgICAgICBy
ZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMuZ2V0KCk7CisgICAgfQorICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMi
KQorICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKHRoaXMp
KSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQykKKyAgICAgICAg
ICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVTM1RDPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21w
cmVzc2VkVGV4dHVyZVMzVEMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiV0VCR0xfZGVwdGhfdGV4dHVyZSIpCisgICAgICAgICYmIFdlYkdMRGVwdGhUZXh0
dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpIHsKKyAgICAgICAgaWYgKCFtX3dl
YmdsRGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fZGVwdGhfdGV4dHVyZSIpOworICAgICAgICAg
ICAgbV93ZWJnbERlcHRoVGV4dHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZXB0aFRleHR1
cmU+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRGVwdGhUZXh0dXJl
LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2Ry
YXdfYnVmZmVycyIpICYmIHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkgeworICAgICAgICBpZiAoIW1f
d2ViZ2xEcmF3QnVmZmVycykgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgICAgIG1f
d2ViZ2xEcmF3QnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEcmF3QnVmZmVycz4odGhp
cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fd2ViZ2xEcmF3QnVmZmVycy5nZXQoKTsK
KyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJBTkdMRV9pbnN0YW5jZWRf
YXJyYXlzIikgJiYgQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkgeworICAg
ICAgICBpZiAoIW1fYW5nbGVJbnN0YW5jZWRBcnJheXMpIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9pbnN0YW5jZWRfYXJy
YXlzIik7CisgICAgICAgICAgICBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzID0gc3RkOjptYWtlX3Vu
aXF1ZTxBTkdMRUluc3RhbmNlZEFycmF5cz4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG1fYW5nbGVJbnN0YW5jZWRBcnJheXMuZ2V0KCk7CisgICAgfQorICAgIGlmIChhbGxvd1By
aXZpbGVnZWRFeHRlbnNpb25zKCkpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIikpIHsKKyAgICAgICAgICAgIGlmICghbV93
ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1JlbmRl
cmVySW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbz4odGhpcyk7
CisgICAgICAgICAgICByZXR1cm4gbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvLmdldCgpOworICAg
ICAgICB9CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdf
c2hhZGVycyIpCisgICAgICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpKSB7CisgICAgICAgICAg
ICBpZiAoIW1fd2ViZ2xEZWJ1Z1NoYWRlcnMpCisgICAgICAgICAgICAgICAgbV93ZWJnbERlYnVn
U2hhZGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1Z1NoYWRlcnM+KHRoaXMpOworICAg
ICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMuZ2V0KCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsIHRhcmdldCwgYXR0YWNobWVudCkpCisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAKKyAgICBpZiAoIW1fZnJhbWVidWZm
ZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5k
Iik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgCisgICAgV2Vi
R0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2ht
ZW50T2JqZWN0KGF0dGFjaG1lbnQpOworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmIChw
bmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
VFlQRSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PTkUpOworICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0g
aW4gdGhpcyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCisgICAgICAgIC8vIHNwZWNpZmllcyBJTlZB
TElEX09QRVJBVElPTi4KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICB9CisgICAgCisgICAgQVNTRVJUKG9iamVjdC0+aXNUZXh0dXJlKCkgfHwgb2JqZWN0LT5p
c1JlbmRlcmJ1ZmZlcigpKTsKKyAgICBpZiAob2JqZWN0LT5pc1RleHR1cmUoKSkgeworICAgICAg
ICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFKTsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+KHJlaW50ZXJw
cmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4ob2JqZWN0KSkpOworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9D
VUJFX01BUF9GQUNFOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdDM0RpbnQgdmFs
dWUgPSAwOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgdGV4dHVyZSBhdHRhY2htZW50Iik7CisgICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1F
OgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUmVuZGVy
YnVmZmVyPihyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4ob2JqZWN0KSkpOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciByZW5kZXJidWZmZXIgYXR0YWNobWVudCIp
OworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgfQor
fQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVy
KEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKKyAgICBjb25zdCBpbnQgaW50WmVybyA9IDA7CisgICAgc3dpdGNoIChw
bmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9URVhUVVJFOgorICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToKKyAgICAgICAgcmV0dXJu
IGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgICAgICByZXR1cm4gZ2V0V2Vi
R0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpBTFBIQV9CSVRTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihtX2JvdW5kQXJyYXlC
dWZmZXIpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKKyAgICAgICAgcmV0
dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EX0NPTE9SOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfQUxQSEE6
CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX1JHQjoKKyAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORF9FUVVBVElPTl9BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9S
R0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfU1JDX0FMUEhBOgorICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EX1NSQ19SR0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxVRV9CSVRTOgorICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9DTEVBUl9WQUxVRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJ
VEVNQVNLOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhVaW50MzJBcnJheTo6Y3JlYXRlKG1fY29tcHJl
c3NlZFRleHR1cmVGb3JtYXRzLmRhdGEoKSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6
ZSgpKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFOgorICAgICAgICBy
ZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Q1VMTF9GQUNFX01PREU6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFN
OgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiht
X2N1cnJlbnRQcm9ncmFtKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQklU
UzoKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmRl
cHRoKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfQ0xFQVJfVkFMVUU6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfRlVOQzoKKyAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9SQU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVT
VDoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldEJv
b2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhF
UjoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPihtX2ZyYW1lYnVmZmVyQmluZGluZykp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0ZBQ0U6CisgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFRU5fQklU
UzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TElORV9XSURUSDoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVY
VFVSRV9JTUFHRV9VTklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1JFTkRFUkJVRkZFUl9TSVpFOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVD
VE9SUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTOgorICAgICAgICByZXR1cm4gZ2V0
SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9W
RUNUT1JTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKKyAgICAgICAgcmV0dXJuIGdl
dFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok5VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQg
d2UgYWx3YXlzIHJldHVybiAwIGZvciB0aGlzPworICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRkFDVE9SOgorICAgICAgICByZXR1cm4gZ2V0Rmxv
YXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05f
T0ZGU0VUX0ZJTEw6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9VTklUUzoKKyAgICAg
ICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRURfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6CisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4obV9y
ZW5kZXJidWZmZXJCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
RVI6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oU3RyaW5nKCJXZWJLaXQgV2ViR0wiKSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0JVRkZFUlM6CisgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0Vf
VkFMVUU6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Cisg
ICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29s
ZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5H
X0xBTkdVQUdFX1ZFUlNJT046CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldlYkdMIEdM
U0wgRVMgMS4wICgiICsgbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlNI
QURJTkdfTEFOR1VBR0VfVkVSU0lPTikgKyAiKSIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfQkFDS19GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19G
VU5DOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6Cisg
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUkVGOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfVkFM
VUVfTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgorICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQklUUzoKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKGludFplcm8pOworICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgorICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0ZBSUw6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GVU5DOgor
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9QQVNTOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfUkVGOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29s
ZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X1ZBTFVFX01BU0s6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0s6CisgICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1VCUElYRUxfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5H
XzJEOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJl
PihtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nKSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3Rl
eHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5w
YWNrRmxpcFkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBM
WV9BTFBIQV9XRUJHTDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQ
QUNFX0NPTlZFUlNJT05fV0VCR0w6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBh
Y2tDb2xvcnNwYWNlQ29udmVyc2lvbik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVO
RE9SOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IikpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlNJT046CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oIldlYkdMIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJTSU9OKSArICIpIik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BP
UlQ6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6
IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERl
cml2YXRpdmVzKQorICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4
dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVMpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAg
Y2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKKyAg
ICAgICAgaWYgKG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8obV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkVSKSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xf
ZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7CisgICAgY2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9WRU5E
T1JfV0VCR0w6CisgICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCisgICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29u
dGV4dDNEOjpWRU5ET1IpKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VkVSVEVYX0FSUkFZ
X0JJTkRJTkdfT0VTOiAvLyBPRVNfdmVydGV4X2FycmF5X29iamVjdAorICAgICAgICBpZiAobV9v
ZXNWZXJ0ZXhBcnJheU9iamVjdCkgeworICAgICAgICAgICAgaWYgKCFtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3QtPmlzRGVmYXVsdE9iamVjdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPihtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QpKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAg
ICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJP
UFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKG1f
ZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKQorICAgICAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlf
RVhUKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4
dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVO
VFNfRVhUOiAvLyBFWFRfZHJhd19idWZmZXJzIEJFR0lOCisgICAgICAgIGlmIChtX3dlYmdsRHJh
d0J1ZmZlcnMpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGdldE1heENvbG9yQXR0
YWNobWVudHMoKSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwg
V0VCR0xfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQ6Cisg
ICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKGdldE1heERyYXdCdWZmZXJzKCkpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOworICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1fd2Vi
Z2xEcmF3QnVmZmVycworICAgICAgICAgICAgJiYgcG5hbWUgPj0gRXh0ZW5zaW9uczNEOjpEUkFX
X0JVRkZFUjBfRVhUCisgICAgICAgICAgICAmJiBwbmFtZSA8IHN0YXRpY19jYXN0PEdDM0RlbnVt
PihFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQgKyBnZXRNYXhEcmF3QnVmZmVycygpKSkg
eworICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOwor
ICAgICAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgICAgIHZh
bHVlID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldERyYXdCdWZmZXIocG5hbWUpOworICAgICAg
ICAgICAgZWxzZSAvLyBlbXVsYXRlZCBiYWNrYnVmZmVyCisgICAgICAgICAgICAgICAgdmFsdWUg
PSBtX2JhY2tEcmF3QnVmZmVyOworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIHByb2dyYW0pKQor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgCisgICAgR0MzRGludCB2YWx1ZSA9
IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
TEVURV9TVEFUVVM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+aXNEZWxl
dGVkKCkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZBTElEQVRFX1NUQVRVUzoKKyAg
ICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFt
ZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29s
Pih2YWx1ZSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RBVFVTOgorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHByb2dyYW0tPmdldExpbmtTdGF0dXMoKSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVRUQUNIRURfU0hBREVSUzoKKyAgICAgICAgbV9jb250
ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QUNUSVZFX1VOSUZPUk1TOgorICAgICAgICBtX2NvbnRleHQtPmdldE5vbkJ1aWx0SW5BY3RpdmVT
eW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOworICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UHJvZ3Jh
bVBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKKyAgICB9Cit9CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVX
ZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbUluZm9Mb2ciLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJu
ICIiOworICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9M
b2cob2JqZWN0T3JaZXJvKHByb2dyYW0pKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJn
ZXQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICBpZiAoIW1f
cmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVyYnVmZmVyIGJv
dW5kIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgCisgICAg
aWYgKG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTAorICAgICAgICAmJiAhbV9yZW5kZXJidWZmZXJCaW5k
aW5nLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlcHRoU3RlbmNpbFN1cHBvcnRl
ZCgpKTsKKyAgICAgICAgaW50IHZhbHVlID0gMDsKKyAgICAgICAgc3dpdGNoIChwbmFtZSkgewor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lEVEg6CisgICAg
ICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0V2lkdGgoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfSEVJR0hUOgorICAgICAgICAgICAgdmFsdWUgPSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdl
dEhlaWdodCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9SRURfU0laRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CTFVFX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOgorICAgICAgICAgICAgdmFsdWUgPSAwOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9ERVBUSF9TSVpFOgorICAgICAgICAgICAgdmFsdWUgPSAyNDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RF
TkNJTF9TSVpFOgorICAgICAgICAgICAgdmFsdWUgPSA4OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JN
QVQ6CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+Z2V0SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgR0MzRGludCB2YWx1ZSA9IDA7Cisg
ICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9XSURUSDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSEVJ
R0hUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9SRURfU0laRToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxVRV9TSVpFOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6CisgICAgICAgIG1fY29u
dGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQor
CitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVyUGFyYW1l
dGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRl
cikpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBHQzNEaW50IHZhbHVlID0g
MDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVM
RVRFX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRl
ZCgpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKKyAgICAg
ICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2
YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFs
dWUpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKKyAgICAgICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZh
bHVlKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9Cit9
CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xv
ZyIsIHNoYWRlcikpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZW5zdXJlTm90TnVs
bChtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKK30K
KworUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUs
IEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFHTUVOVF9TSEFERVI6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRT
aGFkZXJQcmVjaXNpb25Gb3JtYXQiLCAiaW52YWxpZCBzaGFkZXIgdHlwZSIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgc3dpdGNoIChwcmVjaXNpb25UeXBlKSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1FRElVTV9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpISUdIX0ZM
T0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19JTlQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TUVESVVNX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpI
SUdIX0lOVDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclByZWNp
c2lvbkZvcm1hdCIsICJpbnZhbGlkIHByZWNpc2lvbiB0eXBlIik7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKyAgICAKKyAgICBHQzNEaW50IHJhbmdlWzJdID0gezAsIDB9OworICAg
IEdDM0RpbnQgcHJlY2lzaW9uID0gMDsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlclByZWNpc2lv
bkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgJnByZWNpc2lvbik7Cisg
ICAgcmV0dXJuIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpjcmVhdGUocmFuZ2VbMF0sIHJh
bmdlWzFdLCBwcmVjaXNpb24pOworfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9i
amVjdCgiZ2V0U2hhZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuICIiOworICAg
IHJldHVybiBlbnN1cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOworfQorCitWZWN0b3I8
U3RyaW5nPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25z
KCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CisgICAgCisgICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBp
ZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9hdCIpOworICAg
IGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJl
X2Zsb2F0X2xpbmVhciIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9h
dF9saW5lYXIiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9F
U190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKQorICAgICAg
ICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpOworICAgIGlm
IChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcyIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIikpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMi
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlz
b3Ryb3BpYyIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9F
U192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik7CisgICAgcmVzdWx0LmFwcGVuZCgi
V0VCR0xfbG9zZV9jb250ZXh0Iik7CisgICAgaWYgKFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6
OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2Nv
bXByZXNzZWRfdGV4dHVyZV9hdGMiKTsKKyAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBW
UlRDOjpzdXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9XRUJH
TF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTsKKyAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xf
Y29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTsKKyAgICBpZiAoV2ViR0xEZXB0aFRleHR1cmU6OnN1
cHBvcnRlZChncmFwaGljc0NvbnRleHQzRCgpKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VC
R0xfZGVwdGhfdGV4dHVyZSIpOworICAgIGlmIChzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RyYXdfYnVmZmVycyIpOworICAgIGlmIChBTkdMRUlu
c3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJB
TkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7CisgICAgCisgICAgaWYgKGFsbG93UHJpdmlsZWdlZEV4
dGVuc2lvbnMoKSkgeworICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIFdlYkdM
VGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2V0VGV4UGFyYW1ldGVyIiwg
dGFyZ2V0LCBmYWxzZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfVDoKKyAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YWx1ZSkpOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpURVhUVVJFX01BWF9B
TklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAgICAg
IGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpKTsKKyAg
ICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRV
bmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IHVuaWZvcm1Mb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdM
T2JqZWN0KCJnZXRVbmlmb3JtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICBpZiAoIXVuaWZvcm1Mb2NhdGlvbiB8fCB1bmlmb3JtTG9jYXRpb24tPnByb2dy
YW0oKSAhPSBwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0
aW9uIG9yIG5vdCB2YWxpZCBmb3IgdGhpcyBwcm9ncmFtIik7CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKKyAgICB9CisgICAgR0MzRGludCBsb2NhdGlvbiA9IHVuaWZvcm1Mb2NhdGlv
bi0+bG9jYXRpb24oKTsKKyAgICAKKyAgICBHQzNEZW51bSBiYXNlVHlwZTsKKyAgICB1bnNpZ25l
ZCBsZW5ndGg7CisgICAgc3dpdGNoICh1bmlmb3JtTG9jYXRpb24tPnR5cGUoKSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoKKyAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUMzOgorICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAgICAgICBsZW5ndGggPSAzOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzQ6CisgICAg
ICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0aCA9
IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAg
ICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgICAgICBsZW5ndGgg
PSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVD
MjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgICAgICBs
ZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlRfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAg
ICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpJTlRfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
OworICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDNDoKKyAgICAgICAg
YmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDQ7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDI6
CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBs
ZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVF9NQVQzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsK
KyAgICAgICAgbGVuZ3RoID0gOTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVRfTUFUNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDE2OworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNBTVBMRVJfQ1VCRToKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmhh
bmRsZWQgdHlwZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAg
IHN3aXRjaCAoYmFzZVR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDog
eworICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9OworICAgICAgICBpZiAobV9pc1Jv
YnVzdG5lc3NFWFRTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+Z2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCAx
NiAqIHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24s
IHZhbHVlKTsKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyh2YWx1ZVswXSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQz
MkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworICAgIH0KKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpJTlQ6IHsKKyAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKKyAgICAg
ICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSks
IGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChsZW5ndGggPT0gMSkKKyAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7CisgICAgfQorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKKyAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHsw
fTsKKyAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQorICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8o
cHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChsZW5ndGggPiAxKSB7Cisg
ICAgICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCisgICAgICAgICAgICAgICAgYm9vbFZhbHVl
W2pdID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbal0pOworICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhib29sVmFsdWUsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZVswXSkpOworICAgIH0KKyAgICBk
ZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBJ
ZiB3ZSBnZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRlbHkg
Y29tcGxleCBsb2dpYyBhYm92ZQorICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7CisgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworfQorCitQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0
aW9uPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgcHJvZ3JhbSkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0
aCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldFVuaWZvcm1Mb2NhdGlvbiIsIG5hbWUpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgR0MzRGludCB1bmlmb3JtTG9jYXRp
b24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSks
IG5hbWUpOworICAgIGlmICh1bmlmb3JtTG9jYXRpb24gPT0gLTEpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIAorICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOworICAgIG1fY29u
dGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsK
KyAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsrKSB7CisgICAg
ICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVu
aWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1lIGlmIGl0J3Mg
YW4gYXJyYXkuCisgICAgICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIpKQorICAgICAg
ICAgICAgaW5mby5uYW1lID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0aCgpIC0gMyk7
CisgICAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdo
IGVhY2ggZWxlbWVudCwgYXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4KKyAgICAgICAg
Zm9yIChHQzNEaW50IGluZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5kZXgpIHsKKyAg
ICAgICAgICAgIFN0cmluZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSArICJbIiArIFN0cmluZzo6
bnVtYmVyKGluZGV4KSArICJdIjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5hbWUg
PT0gdW5pZm9ybU5hbWUgfHwgbmFtZSA9PSBpbmZvLm5hbWUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9u
LCBpbmZvLnR5cGUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQor
CitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVydGV4QXR0cmli
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICAKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgCisgICAgaWYgKGluZGV4
ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFZlcnRleEF0dHJpYiIsICJpbmRleCBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAg
ICAKKyAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0
ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRl
KGluZGV4KTsKKyAgICAKKyAgICBpZiAobV9hbmdsZUluc3RhbmNlZEFycmF5cyAmJiBwbmFtZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFKQor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLmRpdmlzb3IpOworICAgIAorICAgIHN3
aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklC
X0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICBpZiAoKCFpc0dMRVMyQ29tcGxpYW50KCkg
JiYgIWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3Rh
dGUoMCkuYnVmZmVyQmluZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpCisgICAgICAgICAg
ICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZworICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJp
bmRpbmctPm9iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KHN0YXRlLmJ1
ZmZlckJpbmRpbmcpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklC
X0FSUkFZX0VOQUJMRUQ6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuZW5hYmxl
ZCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JN
QUxJWkVEOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm5vcm1hbGl6ZWQpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5zaXplKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0ZS5vcmlnaW5hbFN0cmlkZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRlLnR5cGUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVS
VEVYX0FUVFJJQjoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNy
ZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCkpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitsb25nIGxvbmcgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBH
QzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRW
ZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPihyZXN1bHQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBib29sIGlzVmFsaWQgPSBm
YWxzZTsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkdFTkVSQVRFX01JUE1BUF9ISU5UOgorICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZF
X0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKKyAgICAgICAgaWYgKG1fb2Vz
U3RhbmRhcmREZXJpdmF0aXZlcykKKyAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgaWYgKCFpc1ZhbGlkKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJoaW50IiwgImludmFsaWQg
dGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5oaW50KHRh
cmdldCwgbW9kZSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIgfHwgaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBpZiAo
IWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICByZXR1cm4gbV9jb250ZXh0LT5pc0J1ZmZlcihidWZmZXItPm9iamVjdCgpKTsKK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0NvbnRleHRMb3N0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0TG9zdDsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xp
Y3lSZXNvbHV0aW9uICYmICFtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pIHsKKyAgICAg
ICAgTE9HKFdlYkdMLCAiQ29udGV4dCBpcyBiZWluZyB1c2VkLiBBdHRlbXB0IHRvIHJlc29sdmUg
dGhlIHBvbGljeS4iKTsKKyAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRv
Y3VtZW50KCkudG9wRG9jdW1lbnQoKTsKKyAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBh
Z2UoKTsKKyAgICAgICAgaWYgKHBhZ2UgJiYgIWRvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkp
CisgICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5yZXNvbHZl
V2ViR0xQb2xpY3lGb3JVUkwoZG9jdW1lbnQudXJsKCkpOworICAgICAgICAvLyBGSVhNRTogV2Ug
ZG9uJ3QgY3VycmVudGx5IGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdCBmcm9tIHJlc29sdXRp
b24uIEEgbW9yZQorICAgICAgICAvLyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCB0cnkg
dG8gY29uc3RydWN0IGEgcmVhbCBjb250ZXh0LCBldGMgYW5kIHByb2NlZWQKKyAgICAgICAgLy8g
d2l0aCBub3JtYWwgb3BlcmF0aW9uLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MTIyCisgICAgICAgIG1faGFzUmVxdWVzdGVkUG9saWN5UmVz
b2x1dGlvbiA9IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBtX2NvbnRleHRMb3N0IHx8
IG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIs
IGNhcCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfVEVTVCkKKyAgICAgICAgcmV0dXJuIG1fc3RlbmNpbEVuYWJsZWQ7CisgICAg
cmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJh
bWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmICghZnJhbWVidWZmZXItPmhh
c0V2ZXJCZWVuQm91bmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIG1f
Y29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitHQzNE
Ym9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1Byb2dyYW0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJv
Z3JhbShwcm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZm
ZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlci0+aGFzRXZl
ckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbV9jb250
ZXh0LT5pc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXItPm9iamVjdCgpKTsKK30KKworR0MzRGJv
b2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNo
YWRlcikKK3sKKyAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNo
YWRlci0+b2JqZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc1RleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVy
ZSB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIGlmICghdGV4dHVyZS0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmxpbmVXaWR0aChHQzNEZmxv
YXQgd2lkdGgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY29udGV4dC0+bGluZVdpZHRoKHdpZHRoKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0s
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgibGlua1Byb2dy
YW0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpKSB7CisgICAgICAgIFdlYkdMU2hhZGVyKiB2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRB
dHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgICAg
IFdlYkdMU2hhZGVyKiBmcmFnbWVudFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgICAgICBpZiAoIXZlcnRl
eFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8
ICFmcmFnbWVudFNoYWRlci0+aXNWYWxpZCgpIHx8ICFtX2NvbnRleHQtPnByZWNpc2lvbnNNYXRj
aChvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVy
KSkgfHwgIW1fY29udGV4dC0+Y2hlY2tWYXJ5aW5nc1BhY2tpbmcob2JqZWN0T3JaZXJvKHZlcnRl
eFNoYWRlciksIG9iamVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpKSB7CisgICAgICAgICAgICBw
cm9ncmFtLT5zZXRMaW5rU3RhdHVzKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKG9iamVjdE9yWmVy
byhwcm9ncmFtKSk7CisgICAgcHJvZ3JhbS0+aW5jcmVhc2VMaW5rQ291bnQoKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwg
R0MzRGludCBwYXJhbSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm47CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19GTElQX1lfV0VCR0w6CisgICAgICAgIG1fdW5wYWNrRmxpcFkgPSBwYXJh
bTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1BS
RU1VTFRJUExZX0FMUEhBX1dFQkdMOgorICAgICAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEg
PSBwYXJhbTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKKyAgICAgICAgaWYgKHBhcmFtID09IEdy
YXBoaWNzQ29udGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wgfHwgcGFyYW0gPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PTkUpCisgICAgICAgICAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJz
aW9uID0gc3RhdGljX2Nhc3Q8R0MzRGVudW0+KHBhcmFtKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBVTlBBQ0tfQ09MT1JTUEFD
RV9DT05WRVJTSU9OX1dFQkdMIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAg
aWYgKHBhcmFtID09IDEgfHwgcGFyYW0gPT0gMiB8fCBwYXJhbSA9PSA0IHx8IHBhcmFtID09IDgp
IHsKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElH
Tk1FTlQpCisgICAgICAgICAgICAgICAgbV9wYWNrQWxpZ25tZW50ID0gcGFyYW07CisgICAgICAg
ICAgICBlbHNlIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAg
ICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50ID0gcGFyYW07CisgICAgICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBhbGlnbm1lbnQiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBvbHlnb25P
ZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnBv
bHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5
QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgLy8gRHVlIHRvIFdlYkdMJ3Mg
c2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9zc2libGUgdG8KKyAgICAvLyB0
YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCisgICAgQVNTRVJUKGNhbnZhcygp
LT5vcmlnaW5DbGVhbigpKTsKKyAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzLgorICAg
IGlmICghcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVscyIsICJubyBkZXN0aW5hdGlvbiBBcnJheUJ1
ZmZlclZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzd2l0Y2ggKGZvcm1hdCkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIGZvcm1hdCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVh
ZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJmb3JtYXQg
bm90IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhlbCB0eXBlLgorICAg
IGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFk
UGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBs
ZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJl
YXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsIHJlYXNvbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNpemUsIHRha2luZyBp
bnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCisgICAgdW5zaWduZWQgdG90YWxC
eXRlc1JlcXVpcmVkID0gMDsKKyAgICB1bnNpZ25lZCBwYWRkaW5nID0gMDsKKyAgICBpZiAoIW1f
aXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKSB7CisgICAgICAgIEdDM0RlbnVtIGVycm9yID0gbV9j
b250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWln
aHQsIG1fcGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRpbmcpOworICAg
ICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBkaW1l
bnNpb25zIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBp
eGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJy
ZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgbGFyZ2UgZW5vdWdoIGZvciBkaW1lbnNp
b25zIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Y2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVz
cygpOworICAgIAorICAgIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5k
ZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Cisg
ICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZWFkblBpeGVsc0VYVCh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBkYXRhKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgfQorICAgIAorI2lmIE9TKERBUldJTikKKyAgICBp
ZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIC8vIHdlIGhhdmVuJ3QgY29tcHV0ZWQgcGFk
ZGluZworICAgICAgICBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwg
dHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVk
LCAmcGFkZGluZyk7CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBk
cml2ZXIgYnVnIG9uIE1hYyBBTkQgdGhlIEdMRVMgZHJpdmVyIGJ1ZworICAgIC8vIG9uIFFDIGlz
IGZpeGVkLCBpLmUuLCB3aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQKKyAgICAv
LyBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KKyAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmICFtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEpIHsKKyAg
ICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyKj4oZGF0YSk7CisgICAgICAgIGZvciAoR0MzRHNpemVpIGl5ID0gMDsgaXkgPCBoZWlnaHQ7
ICsraXkpIHsKKyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpIGl4ID0gMDsgaXggPCB3aWR0aDsg
KytpeCkgeworICAgICAgICAgICAgICAgIHBpeGVsc1szXSA9IDI1NTsKKyAgICAgICAgICAgICAg
ICBwaXhlbHMgKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBpeGVscyArPSBwYWRk
aW5nOworICAgICAgICB9CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5yZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpy
ZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdl
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFt
X3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVy
YnVmZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgc3dp
dGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4Ogor
ICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0
SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJp
bmRpbmctPnNldElzVmFsaWQodHJ1ZSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+
c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFy
Z2V0LCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDgsIHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3RlbmNpbFN1cHBv
cnRlZCgpKTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1h
dChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5k
ZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9v
bGVhbiBpbnZlcnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2Npc3NvcihHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZh
bGlkYXRlU2l6ZSgic2Npc3NvciIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb250ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVy
LCBjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47Cisg
ICAgU3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9IFN0cmlwQ29tbWVudHMoc3RyaW5nKS5y
ZXN1bHQoKTsKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJzaGFkZXJTb3VyY2UiLCBzdHJpbmdX
aXRob3V0Q29tbWVudHMpKQorICAgICAgICByZXR1cm47CisgICAgc2hhZGVyLT5zZXRTb3VyY2Uo
c3RyaW5nKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShvYmplY3RPclplcm8oc2hhZGVy
KSwgc3RyaW5nV2l0aG91dENvbW1lbnRzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQg
bWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICBtX3N0ZW5j
aWxGdW5jUmVmQmFjayA9IHJlZjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CisgICAg
bV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5j
KGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50
IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2ls
RnVuY1NlcGFyYXRlIiwgZnVuYykpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGZhY2Up
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKKyAgICAgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSBy
ZWY7CisgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKKyAgICAgICAgbV9zdGVuY2ls
RnVuY01hc2tCYWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJPTlQ6CisgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7CisgICAgICAg
IG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7
CisgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmNTZXBhcmF0
ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNr
OworICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxN
YXNrKG1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChmYWNl
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6CisgICAgICAg
IG1fc3RlbmNpbE1hc2sgPSBtYXNrOworICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UOgorICAg
ICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAic3RlbmNpbE1hc2tTZXBhcmF0ZSIsICJp
bnZhbGlkIGZhY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPnN0
ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNE
ZW51bSB6cGFzcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsT3BTZXBhcmF0ZShH
QzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBh
c3MpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpw
YXNzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEQmFz
ZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMg
cmV0dXJuZWQuCisgICAgZWMgPSAwOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgQVNTRVJUKHZh
bGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodGV4KTsKKyAgICBBU1NFUlQoIWxldmVsIHx8ICFXZWJH
TFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7CisgICAgaWYgKCFwaXhlbHMpIHsKKyAg
ICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVtZW50YXRpb24gY2xlYXJzIHRl
eHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9yZSB0cnVlLgorICAgICAgICAv
LyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFyZSB1c2luZyBBTkdMRV9kZXB0
aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcworICAgICAgICAvLyBjYW4gbm90IGJlIGNs
ZWFyZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJlIGNsZWFyZWQgYnkgYmluZGluZyB0byBh
biBmYm8gYW5kIGNhbGxpbmcKKyAgICAgICAgLy8gY2xlYXIuCisgICAgICAgIGlmIChpc1Jlc291
cmNlU2FmZSgpKQorICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwg
bnVsbHB0cik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYm9vbCBzdWNjZWVkID0gbV9j
b250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAgICBpZiAoIXN1Y2NlZWQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkp
OworICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwor
ICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGZ1bmN0aW9uIGZhaWxlZC4g
VGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBmb3IgdGhpcyBs
ZXZlbC4KKyAgICAgICAgICAgIHRleC0+bWFya0ludmFsaWQodGFyZ2V0LCBsZXZlbCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgdGV4LT5zZXRMZXZlbEluZm8o
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGE7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdl
RXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29s
b3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOworICAgIGlmICgh
aW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJi
YWQgaW1hZ2UgZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFn
ZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3Ag
PSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBjb25zdCB2b2lkKiBpbWFnZVBp
eGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7CisgICAgCisgICAgYm9v
bCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAm
JiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkp
CisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0
LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3Iu
aW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rv
ci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFn
ZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
aW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29u
dmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBpZiAobV91
bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuYyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9u
VHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHNvdXJjZVR5cGUsIEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQpCit7CisgICAg
aWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25UeXBl
LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBm
b3JtYXQsIHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2ViR0xUZXh0
dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyhmdW5jdGlvbk5hbWUsIHRhcmdl
dCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PSBOb3RUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgIGlm
IChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZl
clZpZXcsIGZ1bmN0aW9uIHZhbGlkYXRlVGV4RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhl
ciB0byB2YWxpZGF0ZSB0aGUgU2V0dGFibGVUZXhGb3JtYXQKKyAgICAgICAgLy8gYnkgY2hlY2tp
bmcgaWYgdGhlIEFycmF5QnVmZmVyVmlldyBpcyBudWxsIG9yIG5vdC4KKyAgICAgICAgaWYgKHNv
dXJjZVR5cGUgIT0gU291cmNlQXJyYXlCdWZmZXJWaWV3KSB7CisgICAgICAgICAgICBpZiAoIXZh
bGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlm
ICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9u
TmFtZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92
ZXJmbG93IGhhcHBlbnMgZmlyc3QuCisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8
IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVu
c2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoeG9mZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwg
eW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmUtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBl
KHRhcmdldCwgbGV2ZWwpICE9IHR5cGUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlw
ZSBhbmQgZm9ybWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCisgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVU
ZXhGdW5jRGF0YSgidGV4SW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIHBpeGVscywgTnVsbEFsbG93ZWQpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRl
eEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8g
cGl4ZWxzLT5iYXNlQWRkcmVzcygpIDogMDsKKyAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7
CisgICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICBpZiAoZGF0YSAm
JiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7CisgICAgICAg
IGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLAorICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCisgICAgICAgICAgICBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCisgICAgICAgICAgICBkYXRhLAor
ICAgICAgICAgICAgdGVtcERhdGEpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKKyAgICAgICAgY2hhbmdlVW5wYWNrQWxp
Z25tZW50ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKKyAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVCwgMSk7CisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKKyAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRh
LCBlYyk7CisgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKKyAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBh
Y2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKKyAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdl
MkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1h
dCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0
YTsKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICAvLyBUaGUgZGF0YSBmcm9t
IEltYWdlRGF0YSBpcyBhbHdheXMgb2YgZm9ybWF0IFJHQkE4LgorICAgIC8vIE5vIGNvbnZlcnNp
b24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVT
SUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWly
ZWQuCisgICAgaWYgKCFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEg
JiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpCisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7
CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBp
eGVscywgZm9ybWF0LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEsIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV91bnBhY2tBbGln
bm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwg
MCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5k
YXRhKCktPmRhdGEoKSwgZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UqIGltYWdlLCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICBJbnRT
aXplIHNpemUod2lkdGgsIGhlaWdodCk7CisgICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rv
cik7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1
ZmZlcihzaXplKTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1l
bW9yeSIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgRmxvYXRS
ZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS0+c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3Qg
ZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKTsKKyAgICBidWYtPmNvbnRleHQoKS0+ZHJhd0lt
YWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAg
cmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgidGV4SW1hZ2UyRCIsIGltYWdl
LCBlYykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9y
UmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJl
bmRlcmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAg
ICBpbWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0
KCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOworICAgIAorICAgIGlmICgh
aW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgp
LCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdGV4
SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1f
dW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgY2FudmFzLCBlYykgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhU
TUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53
aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0
dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgLy8gSWYgcG9zc2li
bGUsIGNvcHkgZnJvbSB0aGUgY2FudmFzIGVsZW1lbnQgZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUK
KyAgICAvLyB2aWEgdGhlIEdQVSwgd2l0aG91dCBhIHJlYWQtYmFjayB0byBzeXN0ZW0gbWVtb3J5
LgorICAgIC8vCisgICAgLy8gRklYTUU6IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkvVU5T
SUdORURfQllURSBzaG91bGQgYmUgbGlmdGVkIHdoZW4KKyAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29w
eVRvUGxhdGZvcm1UZXh0dXJlIGltcGxlbWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4K
KyAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1
cmUgJiYgdHlwZSA9PSB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICYm
IChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpIHsKKyAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Cisg
ICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29u
dGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgo
KSwgY2FudmFzLT5oZWlnaHQoKSwgdHlwZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gY2FudmFz
LT5nZXRJbWFnZURhdGEoKTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICB0ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5n
ZXQoKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLCBH
cmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitQYXNzUmVmUHRy
PEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWRlb0ZyYW1lVG9JbWFnZShIVE1M
VmlkZW9FbGVtZW50KiB2aWRlbywgQmFja2luZ1N0b3JlQ29weSBiYWNraW5nU3RvcmVDb3B5LCBF
eGNlcHRpb25Db2RlJikKK3sKKyAgICBJbnRTaXplIHNpemUodmlkZW8tPnZpZGVvV2lkdGgoKSwg
dmlkZW8tPnZpZGVvSGVpZ2h0KCkpOworICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2dlbmVyYXRl
ZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFidWYpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlksICJ0ZXhJ
bWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIEludFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKyAgICAvLyBGSVhNRTogVHVybiB0aGlzIGludG8gYSBHUFUtR1BVIHRleHR1cmUgY29weSBp
bnN0ZWFkIG9mIENQVSByZWFkYmFjay4KKyAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoYnVmLT5jb250ZXh0KCksIGRlc3RSZWN0KTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1h
Z2UoYmFja2luZ1N0b3JlQ29weSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZp
ZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1l
bnQoInRleEltYWdlMkQiLCB2aWRlbywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMo
InRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8t
PnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBHbyB0aHJvdWdoIHRoZSBmYXN0IHBhdGggZG9pbmcgYSBHUFUtR1BVIHRl
eHR1cmVzIGNvcHkgd2l0aG91dCBhIHJlYWRiYWNrIHRvIHN5c3RlbSBtZW1vcnkgaWYgcG9zc2li
bGUuCisgICAgLy8gT3RoZXJ3aXNlLCBpdCB3aWxsIGZhbGwgYmFjayB0byB0aGUgbm9ybWFsIFNX
IHBhdGguCisgICAgLy8gRklYTUU6IFRoZSBjdXJyZW50IHJlc3RyaWN0aW9ucyByZXF1aXJlIHRo
YXQgZm9ybWF0IHNob3VkIGJlIFJHQiBvciBSR0JBLAorICAgIC8vIHR5cGUgc2hvdWxkIGJlIFVO
U0lHTkVEX0JZVEUgYW5kIGxldmVsIHNob3VsZCBiZSAwLiBJdCBtYXkgYmUgbGlmdGVkIGluIHRo
ZSBmdXR1cmUuCisgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEID09IHRhcmdldCAmJiB0ZXh0dXJlCisgICAgICAgICYmIChmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEpCisgICAgICAgICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUKKyAgICAgICAgJiYgKHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBs
ZXZlbCkpCisgICAgICAgICYmICFsZXZlbCkgeworICAgICAgICBpZiAodmlkZW8tPmNvcHlWaWRl
b1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVj
dCgpLCBsZXZlbCwgdHlwZSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBo
YSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8t
PnZpZGVvSGVpZ2h0KCksIHR5cGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCisgICAgUmVmUHRyPEltYWdl
PiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJ
bWFnZU1vZGUoKSwgZWMpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICB0
ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNG
bG9hdCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQ
YXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJu
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdf
RklMVEVSOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoK
KyAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xB
TVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVB
VCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKKyAgICAgICAgICAgIHx8
ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0Ug
JiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1p
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwg
ImludmFsaWQgcGFyYW1ldGVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJP
UFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKCFt
X2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFi
bGVkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzRmxvYXQpIHsKKyAgICAgICAgdGV4
LT5zZXRQYXJhbWV0ZXJmKHBuYW1lLCBwYXJhbWYpOworICAgICAgICBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW1mKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0
ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFtaSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbWkpOworICAgIH0KK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkKK3sKKyAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0
LCBwbmFtZSwgcGFyYW0sIDAsIHRydWUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCBwYXJhbSkKK3sKKyAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFyYW0s
IGZhbHNlKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFn
ZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyBy
ZXR1cm5lZAorICAgIGVjID0gMDsKKyAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CisgICAg
QVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJ
bWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwg
dHlwZSkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNpemUoInRleFN1YkltYWdlMkQiLCB4b2Zmc2V0
LCB5b2Zmc2V0KSk7CisgICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleFN1
YkltYWdlMkQiLCBmb3JtYXQpKTsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4
dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4
KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIEFTU0VSVCgoeG9mZnNldCArIHdpZHRoKSA+PSAwKTsKKyAgICBBU1NFUlQoKHlvZmZz
ZXQgKyBoZWlnaHQpID49IDApOworICAgIEFTU0VSVCh0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2
ZWwpID49ICh4b2Zmc2V0ICsgd2lkdGgpKTsKKyAgICBBU1NFUlQodGV4LT5nZXRIZWlnaHQodGFy
Z2V0LCBsZXZlbCkgPj0gKHlvZmZzZXQgKyBoZWlnaHQpKTsKKyAgICBBU1NFUlQodGV4LT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSA9PSBmb3JtYXQpOworICAgIEFTU0VSVCh0ZXgt
PmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gdHlwZSk7CisgICAgbV9jb250ZXh0LT50ZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBk
b21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9t
U291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09
IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsKKyAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJh
Y3RTdWNjZWVkZWQoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291
cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdl
QWxwaGFPcCgpOworICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0
b3IuaW1hZ2VQaXhlbERhdGEoKTsKKyAgICAKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1
ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBz
b3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYg
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKKyAgICAgICAgbmVlZENvbnZlcnNp
b24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFn
ZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9w
LCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0
cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxp
Z25tZW50KCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEi
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgdGV4U3ViSW1hZ2Uy
REJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKCksIGlt
YWdlLT5oZWlnaHQoKSwgZm9ybWF0LCB0eXBlLCAgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEo
KSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEp
CisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFD
S19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
QXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1Yklt
YWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxO
b3RBbGxvd2VkKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwg
VGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisg
ICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOwor
ICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5nZVVucGFja0FsaWdu
bWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0
dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAgICAgICBtX3VucGFj
a0FsaWdubWVudCwKKyAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwKKyAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICB0ZW1wRGF0YSkpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkYXRhID0gdGVtcERhdGEuZGF0
YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKyAgICBp
ZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhTdWJJbWFn
ZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQor
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJj
ZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhl
bHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVk
Q29udmVyc2lvbiA9IHRydWU7CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3
YXlzIG9mIGZvcm1hdCBSR0JBOC4KKyAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBk
ZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5v
IEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmIChmb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSAmJiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAg
ICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlw
ZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisg
ICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQsIDEpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9ybWF0LCB0
eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEo
KSwgZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0g
MDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFn
ZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFnZSwgZWMpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFn
ZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoaW1hZ2VG
b3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKKyAgICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1h
Z2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVyLmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2Ut
PmhlaWdodCgpLCAxKTsKKyAgICAKKyAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VF
bGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBp
bWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdl
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZhcywgZWMpCisgICAg
ICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBT
b3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52YXMtPndp
ZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURh
dGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAg
IHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0
eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleFN1YkltYWdl
MkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2Fu
dmFzLT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91
bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFC
TEUoVklERU8pCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKKyAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0Vs
ZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0
ZXhTdWJJbWFnZTJEIiwgdmlkZW8sIGVjKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0
ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFy
Z2V0LCBsZXZlbCwgZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRl
bywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICByZXR1cm47CisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhLCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBG
bG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCAxKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
di0+bGVuZ3RoKCksIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAx
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJv
Z3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHBy
b2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoKGxvY2F0aW9u
LT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5
cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKSAmJiB4ID49IChpbnQpbV90
ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpIiwgImludmFsaWQgdGV4dHVyZSB1
bml0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlm
b3JtMWkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgMSkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpT
QU1QTEVSX0NVQkUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHYtPmxlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2LT5kYXRhKClbaV0gPj0gc3RhdGljX2Nhc3Q8
aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7CisgICAgICAgICAgICAgICAgTE9HKFdlYkdM
LCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4gTG9jYXRpb24gdHlwZSA9ICUwNFgu
IiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRhKClbaV0sIGxvY2F0aW9uLT50eXBl
KCkpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVu
Z3RoKCksIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0NVQkUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoKChHQzNE
aW50Kil2KVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNpemUoKSkpIHsK
KyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAidW5pZm9ybTJmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHgsIHkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCAyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwg
MikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2Nh
dGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJpIiwgImxvY2F0aW9uIG5v
dCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgbV9jb250ZXh0LT51bmlmb3JtMmkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHkpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlv
biwgdiwgMikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0y
aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgpKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMml2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9y
bTJpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwg
R0MzRGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQg
cHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+
dW5pZm9ybTNmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgMykp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2Iiwg
bG9jYXRpb24sIHYsIHNpemUsIDMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250
ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTNpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2kobG9j
YXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlvbiwgdiwgMykpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCBzaXpl
LCAzKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDMsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00Zihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIDQpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRmdiIsIGxvY2F0aW9u
LCB2LCBzaXplLCA0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5p
Zm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQg
dywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAidW5pZm9ybTRpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtNGko
bG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwgNCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2
LCBzaXplLCA0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9y
bTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSog
diwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0
ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51
bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdHJhbnNwb3Nl
LCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYsIDkpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDksIHRyYW5zcG9z
ZSwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1N
YXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA5KSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgc2l6ZSAvIDksIHRyYW5zcG9zZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1N
YXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYt
Pmxlbmd0aCgpIC8gMTYsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2
LCBzaXplLCAxNikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRy
aXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAxNiwgdHJhbnNwb3NlLCB2KTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1c2VQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgidXNlUHJv
Z3JhbSIsIHByb2dyYW0sIGRlbGV0ZWQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlbGV0
ZWQpCisgICAgICAgIHByb2dyYW0gPSAwOworICAgIGlmIChwcm9ncmFtICYmICFwcm9ncmFtLT5n
ZXRMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidXNlUHJvZ3JhbSIsICJwcm9ncmFtIG5vdCB2YWxp
ZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtICE9
IHByb2dyYW0pIHsKKyAgICAgICAgaWYgKG1fY3VycmVudFByb2dyYW0pCisgICAgICAgICAgICBt
X2N1cnJlbnRQcm9ncmFtLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgICAg
ICBtX2N1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKKyAgICAgICAgbV9jb250ZXh0LT51c2VQcm9n
cmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CisgICAgICAgIGlmIChwcm9ncmFtKQorICAgICAg
ICAgICAgcHJvZ3JhbS0+b25BdHRhY2hlZCgpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInZhbGlkYXRlUHJv
Z3JhbSIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT52YWxpZGF0
ZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYw
KQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZiIsIGluZGV4LCAxLCB2
MCwgMC4wZiwgMC4wZiwgMS4wZik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCit7Cisg
ICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwgdiwgMSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWZ2KEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAgIHZlcnRleEF0
dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIHNpemUsIDEpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1w
bCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAsIHYxLCAwLjBmLCAxLjBmKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQg
aW5kZXgsIEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRl
eEF0dHJpYjJmdiIsIGluZGV4LCB2LCAyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0Mz
RHNpemVpIHNpemUpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYi
LCBpbmRleCwgdiwgc2l6ZSwgMik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0
IHYxLCBHQzNEZmxvYXQgdjIpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJp
YjNmIiwgaW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFy
cmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5k
ZXgsIHYsIDMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0
dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sK
KyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCBzaXpl
LCAzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2
MiwgR0MzRGZsb2F0IHYzKQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0
ZiIsIGluZGV4LCA0LCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkq
IHYpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwg
diwgNCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmli
NGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAg
IHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIHNpemUsIDQp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYlBvaW50
ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xl
YW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
dmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4
QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJp
ZGUgPiAyNTUgfHwgb2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFk
IHNpemUsIHN0cmlkZSBvciBvZmZzZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwg
Im5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8v
IERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhv
bGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUsIHR5cGUgYW5kIHN0cmlkZQorICAgIHVuc2lnbmVk
IHR5cGVTaXplID0gc2l6ZUluQnl0ZXModHlwZSk7CisgICAgaWYgKCF0eXBlU2l6ZSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
dmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAoc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSAlIHR5cGVTaXplKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVy
IiwgInN0cmlkZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiB0eXBlU2l6
ZTsKKyAgICAKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0
YXRlKGluZGV4LCBieXRlc1BlckVsZW1lbnQsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlk
ZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsK
KyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5v
cm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0
ZVNpemUoInZpZXdwb3J0Iiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2NvbnRleHQtPnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJjb250ZXh0IGFscmVhZHkgbG9z
dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dEdyb3VwLT5s
b3NlQ29udGV4dEdyb3VwKG1vZGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Q29udGV4
dE1vZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CisgICAgbV9jb250ZXh0TG9zdE1vZGUg
PSBtb2RlOworICAgIAorICAgIGlmIChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgeworICAgICAg
ICAvLyBJbmZvcm0gdGhlIGVtYmVkZGVyIHRoYXQgYSBsb3N0IGNvbnRleHQgd2FzIHJlY2VpdmVk
LiBJbiByZXNwb25zZSwgdGhlIGVtYmVkZGVyIG1pZ2h0CisgICAgICAgIC8vIGRlY2lkZSB0byB0
YWtlIGFjdGlvbiBzdWNoIGFzIGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlzc2lvbiB0byB1c2Ug
V2ViR0wgYWdhaW4uCisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjYW52YXMoKS0+ZG9jdW1l
bnQoKS5mcmFtZSgpKQorICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmRpZExv
c2VXZWJHTENvbnRleHQobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKSk7CisgICAgfQorICAgIAorICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVj
dHMoKTsKKyAgICAKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIE1ha2Ug
YWJzb2x1dGVseSBzdXJlIHdlIGRvIG5vdCByZWZlciB0byBhbiBhbHJlYWR5LWRlbGV0ZWQgdGV4
dHVyZSBvciBmcmFtZWJ1ZmZlci4KKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRUZXh0dXJl
MkRCaW5kaW5nKDApOworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmlu
ZGluZygwKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlcmUgaXMgbm8gZGlyZWN0IHdheSB0byBj
bGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0aW9uIGFuZAorICAgIC8vIGxvb3Bpbmcg
dW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRl
IGxvb3AgaWYKKyAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQgaW1wbGVtZW50YXRpb24gaGFk
IGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKKyAgICAvLyBsYXJnZSBudW1iZXIgb2YgdGlt
ZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IDEwMDsgKytpKSB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIENv
bnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0gKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0
KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5SW5Db25zb2xlOworICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wsICJsb3NlQ29u
dGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsKKyAgICAKKyAgICAvLyBEb24ndCBhbGxv
dyByZXN0b3JhdGlvbiB1bmxlc3MgdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVu
CisgICAgLy8gZGlzcGF0Y2hlZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgor
ICAgIG1fcmVzdG9yZUFsbG93ZWQgPSBmYWxzZTsKKyAgICAKKyAgICAvLyBBbHdheXMgZGVmZXIg
dGhlIGRpc3BhdGNoIG9mIHRoZSBjb250ZXh0IGxvc3QgZXZlbnQsIHRvIGltcGxlbWVudAorICAg
IC8vIHRoZSBzcGVjIGJlaGF2aW9yIG9mIHF1ZXVlaW5nIGEgdGFzay4KKyAgICBtX2Rpc3BhdGNo
Q29udGV4dExvc3RFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpmb3JjZVJlc3RvcmVDb250ZXh0KCkKK3sKKyAgICBpZiAoIWlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250
ZXh0IG5vdCBsb3N0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFt
X3Jlc3RvcmVBbGxvd2VkKSB7CisgICAgICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBTeW50
aGV0aWNMb3N0Q29udGV4dCkKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQg
cmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAoIW1fcmVzdG9yZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVzdG9yZVRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworUGxhdGZvcm1MYXllciogV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuICghaXNDb250
ZXh0TG9zdCgpICYmICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pID8gbV9jb250ZXh0LT5w
bGF0Zm9ybUxheWVyKCkgOiAwOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQoreworICAgIGlm
IChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBv
YmplY3QpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2NvbnRl
eHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6cmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9iamVjdCkK
K3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgbV9jb250ZXh0T2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9i
amVjdCogb2JqZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CisgICAg
bV9jb250ZXh0T2JqZWN0cy5hZGQob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCkKK3sKKyAgICBpZiAobV9pc1Bl
bmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgd2hpbGUg
KG1fY29udGV4dE9iamVjdHMuc2l6ZSgpID4gMCkgeworICAgICAgICBIYXNoU2V0PFdlYkdMQ29u
dGV4dE9iamVjdCo+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKKyAg
ICAgICAgKCppdCktPmRldGFjaENvbnRleHQoKTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RvcCgpCit7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikgeworICAgICAgICBmb3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKKyAg
ICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgfQorfQorCitXZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKK3sKKyAgICBHQzNEYm9vbGVhbiB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5n
ZXRCb29sZWFudihwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRp
Y19jYXN0PGJvb2w+KHZhbHVlKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklURU1BU0spIHsKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygwLCAw
KTsKKyAgICB9CisgICAgR0MzRGJvb2xlYW4gdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0
LT5nZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOworICAgIGJvb2wgYm9vbFZhbHVlWzRdOworICAg
IGZvciAoaW50IGlpID0gMDsgaWkgPCA0OyArK2lpKQorICAgICAgICBib29sVmFsdWVbaWldID0g
c3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbaWldKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGJv
b2xWYWx1ZSwgNCk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEZmxvYXQgdmFs
dWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCAmdmFsdWUpOworICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0SW50UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdD
M0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1
ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbnNpZ25lZEludFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKK3sKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhbHVlKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7
CisgICAgR0MzRGZsb2F0IHZhbHVlWzRdID0gezB9OworICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2
KHBuYW1lLCB2YWx1ZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICBzd2l0Y2ggKHBu
YW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JB
TkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5H
RToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5HRToKKyAgICAgICAgbGVu
Z3RoID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxF
TkRfQ09MT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6
CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxv
YXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworfQorCitXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKK3sKKyAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OworICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAg
IHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BP
UlRfRElNUzoKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VklFV1BPUlQ6CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorICAgIHJldHVybiBXZWJH
TEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCit7CisgICAgYm9vbCByZXNl
dEFjdGl2ZVVuaXQgPSBmYWxzZTsKKyAgICBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25G
bGFnIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNp
b25GbGFnPigobV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVF
eHRlbnNpb25GbG9hdExpbmVhckVuYWJsZWQgOiAwKSB8IChtX29lc1RleHR1cmVIYWxmRmxvYXRM
aW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25IYWxmRmxvYXRMaW5lYXJFbmFi
bGVkIDogMCkpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IG1fdGV4dHVy
ZVVuaXRzLnNpemUoKTsgKytpaSkgeworICAgICAgICBpZiAoKG1fdGV4dHVyZVVuaXRzW2lpXS50
ZXh0dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLT5u
ZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCisgICAgICAgICAgICB8fCAobV90ZXh0
dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0u
dGV4dHVyZUN1YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykp
KSB7CisgICAgICAgICAgICBpZiAoaWkgIT0gbV9hY3RpdmVUZXh0dXJlVW5pdCkgeworICAgICAg
ICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShpaSk7CisgICAgICAgICAgICAgICAg
cmVzZXRBY3RpdmVVbml0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzZXRBY3Rp
dmVVbml0KSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsK
KyAgICAgICAgICAgICAgICByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4MkQ7CisgICAgICAgICAgICBXZWJHTFRleHR1
cmUqIHRleEN1YmVNYXA7CisgICAgICAgICAgICBpZiAocHJlcGFyZVRvRHJhdykgeworICAgICAg
ICAgICAgICAgIFN0cmluZyBtc2coU3RyaW5nKCJ0ZXh0dXJlIGJvdW5kIHRvIHRleHR1cmUgdW5p
dCAiKSArIFN0cmluZzo6bnVtYmVyKGlpKQorICAgICAgICAgICAgICAgICAgICArICIgaXMgbm90
IHJlbmRlcmFibGUuIEl0IG1heWJlIG5vbi1wb3dlci1vZi0yIGFuZCBoYXZlIGluY29tcGF0aWJs
ZSB0ZXh0dXJlIGZpbHRlcmluZyBvciBpcyBub3QgJ3RleHR1cmUgY29tcGxldGUnLCIKKyAgICAg
ICAgICAgICAgICAgICAgKyAiIG9yIGl0IGlzIGEgZmxvYXQvaGFsZi1mbG9hdCB0eXBlIHdpdGgg
bGluZWFyIGZpbHRlcmluZyBhbmQgd2l0aG91dCB0aGUgcmVsZXZhbnQgZmxvYXQvaGFsZi1mbG9h
dCBsaW5lYXIgZXh0ZW5zaW9uIGVuYWJsZWQuIik7CisgICAgICAgICAgICAgICAgcHJpbnRHTFdh
cm5pbmdUb0NvbnNvbGUoZnVuY3Rpb25OYW1lLCBtc2cudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgdGV4MkQgPSBtX2JsYWNrVGV4dHVyZTJELmdldCgpOworICAgICAgICAgICAgICAg
IHRleEN1YmVNYXAgPSBtX2JsYWNrVGV4dHVyZUN1YmVNYXAuZ2V0KCk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHRleDJEID0gbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1
cmUyREJpbmRpbmcuZ2V0KCk7CisgICAgICAgICAgICAgICAgdGV4Q3ViZU1hcCA9IG1fdGV4dHVy
ZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmcgJiYgbV90
ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShl
eHRlbnNpb25zKSkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8odGV4MkQpKTsKKyAgICAgICAg
ICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4
dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVy
ZShleHRlbnNpb25zKSkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBvYmplY3RPclplcm8odGV4Q3ViZU1h
cCkpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChyZXNldEFjdGl2ZVVuaXQpCisgICAgICAg
IG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmVVbml0KTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMx
eDEoKQoreworICAgIHVuc2lnbmVkIGNoYXIgYmxhY2tbXSA9IHswLCAwLCAwLCAyNTV9OworICAg
IG1fYmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVUZXh0dXJlKCk7CisgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9ibGFja1RleHR1cmUyRC0+
b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgYmxhY2spOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDApOworICAgIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcCA9IGNyZWF0ZVRleHR1
cmUoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQLCBtX2JsYWNrVGV4dHVyZUN1YmVNYXAtPm9iamVjdCgpKTsKKyAgICBtX2Nv
bnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwg
YmxhY2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwg
MSwKKyAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQt
PnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2sp
OworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAg
ICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCAwKTsKK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZm
ZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAorICAgIEdDM0Rl
bnVtIGNvbG9yQnVmZmVyRm9ybWF0KQoreworICAgIHVuc2lnbmVkIG5lZWQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdCh0ZXhJbnRlcm5hbEZvcm1hdCk7CisgICAg
dW5zaWduZWQgaGF2ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0
KGNvbG9yQnVmZmVyRm9ybWF0KTsKKyAgICByZXR1cm4gKG5lZWQgJiBoYXZlKSA9PSBuZWVkOwor
fQorCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVm
ZmVyQ29sb3JGb3JtYXQoKQoreworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmFs
cGhhKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQoreworICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgpOworICAgIHJldHVy
biBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpIDogbV9j
b250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Cit9CisKK2ludCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKK3sK
KyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9i
amVjdCgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVm
ZmVySGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZl
ci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLmhlaWdodCgpOworfQorCitXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQoreworICAgIFdlYkdMVGV4
dHVyZSogdGV4dHVyZSA9IG51bGxwdHI7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGlmICghdXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQOgorICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9h
Y3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFy
Z2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBpZiAoIXRleHR1cmUp
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOworICAgIHJldHVybiB0ZXh0dXJl
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlTG9jYXRpb25M
ZW5ndGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sK
KyAgICBjb25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2OworICAgIGlm
IChzdHJpbmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdD
M0RpbnQgeSkKK3sKKyAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
InNpemUgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdHJpbmco
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlm
ICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
InN0cmluZyBub3QgQVNDSUkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQorewor
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmIChtX3dlYmdsRGVw
dGhUZXh0dXJlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRl
eHR1cmUgZm9ybWF0cyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGZvcm1hdCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUZsb2F0KQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxG
X0ZMT0FUX09FUzoKKyAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUhhbGZGbG9hdCkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICBpZiAobV93
ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29tYmluYXRp
b24gb2YgZm9ybWF0IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KKyAgICBzd2l0Y2ggKGZvcm1hdCkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFO
Q0VfQUxQSEE6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAor
ICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBmb3JtYXQiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQorICAgICAgICAgICAgJiYgdHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdHlwZSBmb3IgUkdCIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkE6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVF80XzRfNF80CisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF81XzVfNV8xCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBl
IGZvciBSR0JBIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBP
TkVOVDoKKyAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBlbmFibGVkIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCisgICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxldmVsID4gMCkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAgZm9yIERFUFRIX0NPTVBP
TkVOVCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgor
ICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lMIG5vdCBlbmFibGVkIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfU1RFTkNJTCBmb3Jt
YXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsIDwgMCkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJEOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2ZWwpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgaWYgKGxldmVs
ID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxl
dmVsIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgY2hlY2tz
IGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQgZG9uJ3QKKyAgICAvLyBn
ZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwuCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5j
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgVGV4RnVuY1ZhbGlkYXRp
b25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAorICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwKKyAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSkKK3sKKyAgICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRh
dGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2Uy
RCBlbnRyeSBwb2ludHMgdGFraW5nIEhUTUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAv
LyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJl
IGxlZ2FsLgorICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5h
bWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpIHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlv
bk5hbWUsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBv
ciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
R0MzRGludCBtYXhUZXh0dXJlU2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2
ZWwgLSAxIC0gbGV2ZWwpOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNp
emVGb3JMZXZlbCB8fCBoZWlnaHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAg
ICBpZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIE5vIG5lZWQg
dG8gY2hlY2sgaGVpZ2h0IGhlcmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQuCisgICAg
ICAgIC8vIEZvciB0ZXhTdWJJbWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5n
IHlvZmZzZXQgKyBoZWlnaHQgaXMgaW4gcmFuZ2UuCisgICAgICAgIGlmICh3aWR0aCA+IG1heFRl
eHR1cmVTaXplRm9yTGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWln
aHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGlmIChib3JkZXIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJvcmRlciAh
PSAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5j
RGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCisgICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwKKyAgICBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywKKyAgICBOdWxsRGlzcG9zaXRp
b24gZGlzcG9zaXRpb24pCit7CisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgaWYgKGRpc3Bv
c2l0aW9uID09IE51bGxBbGxvd2VkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJubyBwaXhlbHMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBm
b3JtYXQsIHR5cGUsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmFs
aWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkg
IT0gSlNDOjpUeXBlVWludDgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJ
R05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5
cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlw
ZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJheSIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAorICAg
ICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IEZs
b2F0MzJBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOiAv
LyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgIC8vIEFzIHBlciB0aGUgc3BlY2lmaWNh
dGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdoZW4KKyAgICAgICAgLy8gT0VT
X3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgorICAgICAgICBpZiAocGl4ZWxzKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9BVF9PRVMgYnV0IEFycmF5QnVm
ZmVyVmlldyBpcyBub3QgTlVMTCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzUmVxdWlyZWQ7Cisg
ICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZv
cm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVz
UmVxdWlyZWQsIDApOworICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJS
T1IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7Cisg
ICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7CisgICAgICAgICAgICBlcnJvciA9
IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwg
aGVpZ2h0LCAxLCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKKyAgICAgICAgICAgIGlmIChwaXhl
bHMtPmJ5dGVMZW5ndGgoKSA9PSB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVz
dCB3aXRoIFVOUEFDS19BTElHTk1FTlQgPiAxIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJy
YXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1h
dCkKK3sKKyAgICByZXR1cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9y
bWF0KTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZm
ZXJWaWV3KiBwaXhlbHMpCit7CisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
Im5vIHBpeGVscyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3aWR0
aCA8IDAgfHwgaGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0
IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVk
IGJ5dGVzUmVxdWlyZWQgPSAwOworICAgIAorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EOgorICAgICAgICB7CisgICAgICAgIGNv
bnN0IGludCBrQmxvY2tTaXplID0gODsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0g
NDsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgIGludCBudW1C
bG9ja3NBY3Jvc3MgPSAod2lkdGggKyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lkdGg7Cisg
ICAgICAgIGludCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8g
a0Jsb2NrSGVpZ2h0OworICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICog
bnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgorICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDoKKyAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQ6
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVE
X0FMUEhBX0FNRDoKKyAgICAgICAgeworICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDE2
OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrSGVpZ2h0ID0gNDsKKyAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9zcyA9ICh3aWR0aCAr
IGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAgaW50IG51bUJsb2Nrc0Rv
d24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tIZWlnaHQ7CisgICAgICAg
IGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2Nr
U2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgICAgIHsKKyAgICAgICAgY29u
c3QgaW50IGtCbG9ja1NpemUgPSA4OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4
OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKKyAgICAgICAgYnl0ZXNSZXF1
aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBr
QmxvY2tIZWlnaHQpICogNCArIDcpIC8ga0Jsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYx
X0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBW
MV9JTUc6CisgICAgICAgIHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OworICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSAxNjsKKyAgICAgICAgY29uc3QgaW50IGtCbG9j
a0hlaWdodCA9IDg7CisgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtC
bG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAvIGtC
bG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgIT0gYnl0ZXNSZXF1aXJlZCkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibGVuZ3RoIG9mIEFycmF5QnVmZmVyVmlldyBpcyBub3QgY29y
cmVjdCBmb3IgZGltZW5zaW9ucyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAg
Y29uc3QgR0MzRHNpemVpIGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgY29uc3QgR0MzRHNpemVp
IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUg
PSB0YXJnZXQgPyBtX21heFRleHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7Cisg
ICAgICAgIGNvbnN0IEdDM0RzaXplaSBtYXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVy
ZVNpemUgPj4gbGV2ZWw7CisgICAgICAgIGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0
aCA9PSAxKSB8fCAobGV2ZWwgJiYgd2lkdGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tXaWR0
aCkgJiYgd2lkdGggPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7CisgICAgICAgIGJvb2wgaGVp
Z2h0VmFsaWQgPSAobGV2ZWwgJiYgaGVpZ2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQgPT0g
MikgfHwgKCEoaGVpZ2h0ICUga0Jsb2NrSGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJlc3Nl
ZERpbWVuc2lvbik7CisgICAgICAgIGlmICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxl
dmVsIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9Q
VlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9Q
VlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
UFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X1BWUlRDXzJCUFBWMV9JTUc6CisgICAgICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBw
b3dlcnMgb2YgMi4KKyAgICAgICAgaWYgKCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0
ICYgKGhlaWdodCAtIDEpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo
ZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LAorICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqIHRleCkKK3sKKyAgICBpZiAoeG9mZnNldCA8IDAgfHwg
eW9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCA8IDAi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGZvcm1h
dCkgeworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7Cisg
ICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7CisgICAgICAgIGNvbnN0IGludCBrQmxv
Y2tIZWlnaHQgPSA0OworICAgICAgICBpZiAoKHhvZmZzZXQgJSBrQmxvY2tXaWR0aCkgfHwgKHlv
ZmZzZXQgJSBrQmxvY2tIZWlnaHQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZz
ZXQgb3IgeW9mZnNldCBub3QgbXVsdGlwbGUgb2YgNCIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGlmICh3aWR0aCAtIHhvZmZzZXQgPiB0ZXgtPmdldFdp
ZHRoKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICAgICB8fCBoZWlnaHQgLSB5b2Zmc2V0ID4gdGV4
LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
ZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhm
dW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CisgICAg
fQorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lN
RzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9J
TUc6IHsKKyAgICAgICAgaWYgKHhvZmZzZXQgfHwgeW9mZnNldCkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ4b2Zmc2V0IGFuZCB5b2Zmc2V0IG11c3QgYmUgemVybyIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh3aWR0aCAhPSB0ZXgtPmdl
dFdpZHRoKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICAgICB8fCBoZWlnaHQgIT0gdGV4LT5nZXRI
ZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5z
aW9ucyBtdXN0IG1hdGNoIGV4aXN0aW5nIGxldmVsIik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVu
c2lvbnMoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQp
OworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd01vZGUoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FX1NUUklQOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVf
TE9PUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpUUklBTkdMRV9GQU46CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIGRyYXcgbW9kZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBpZiAobV9zdGVuY2lsTWFzayAhPSBtX3N0ZW5j
aWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5jUmVmICE9IG1fc3RlbmNpbEZ1bmNSZWZCYWNrIHx8
IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3RlbmNpbEZ1bmNNYXNrQmFjaykgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNrIHN0ZW5jaWxzIHNldHRpbmdzIGRvIG5vdCBtYXRj
aCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbEZ1bmMoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmdW5jKQoreworICAgIHN3aXRjaCAoZnVu
YykgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxFU1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVRVUFMOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUFURVI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6R0VRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PVEVRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFMV0FZUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBmdW5jdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnByaW50R0xFcnJvclRv
Q29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFtX251bUdMRXJyb3Jz
VG9Db25zb2xlQWxsb3dlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC0tbV9udW1HTEVy
cm9yc1RvQ29uc29sZUFsbG93ZWQ7CisgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKG1lc3NhZ2Up
OworICAgIAorICAgIGlmICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCisgICAgICAg
IHByaW50V2FybmluZ1RvQ29uc29sZSgiV2ViR0w6IHRvbyBtYW55IGVycm9ycywgbm8gbW9yZSBl
cnJvcnMgd2lsbCBiZSByZXBvcnRlZCB0byB0aGUgY29uc29sZSBmb3IgdGhpcyBjb250ZXh0LiIp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnByaW50V2FybmluZ1RvQ29u
c29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFjYW52YXMoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhbnZhcygpLT5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OlJlbmRlcmluZywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBtZXNzYWdlKTsK
K30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUZyYW1lYnVmZmVy
RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQpCit7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKKyAgICAgICAgICAgICYmIGF0dGFjaG1l
bnQgPiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKKyAgICAgICAgICAgICYm
IGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfQUREOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZVTkNfU1VCVFJBQ1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19SRVZF
UlNFX1NVQlRSQUNUOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUJsZW5kRnVuY0Zh
Y3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRz
dCkKK3sKKyAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9S
IHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQor
ICAgICAgICAmJiAoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBk
c3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpCisgICAg
ICAgIHx8ICgoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xPUiB8fCBkc3Qg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKKyAgICAgICAg
JiYgKHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgc3JjID09IEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKSkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNhcCkKK3sKKyAgICBzd2l0Y2ggKGNhcCkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkNVTExfRkFDRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRV9BTFBIQV9UT19DT1ZFUkFHRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1Q
TEVfQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBjYXBhYmlsaXR5
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFy
cmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICghdikgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUs
IGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXpl
KTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXpl
KQoreworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5s
ZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCB2b2lkKiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICByZXR1cm4gdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwg
diwgc2l6ZSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkK
K3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYt
Pmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJl
ZE1pblNpemUpCit7CisgICAgaWYgKCFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJsb2NhdGlvbiBpcyBub3QgZnJvbSBjdXJyZW50IHByb2dyYW0iKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYg
KHRyYW5zcG9zZSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAidHJhbnNwb3NlIG5vdCBGQUxTRSIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChzaXplIDwgcmVxdWlyZWRNaW5T
aXplIHx8IChzaXplICUgcmVxdWlyZWRNaW5TaXplKSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCBzaXplIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1dlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gMDsK
KyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1F
TlRfQVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLmdldCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6CisgICAgICAgIGJ1ZmZlciA9IG1f
Ym91bmRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gYnVm
ZmVyIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBzd2l0Y2ggKHVzYWdl
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVc6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RFlOQU1JQ19EUkFXOgorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKyAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIHVzYWdlIik7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJubyBpbWFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGNvbnN0IFVSTCYgdXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJs
KCk7CisgICAgaWYgKHVybC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxp
ZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7CisgICAg
ICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWNhbnZhcyB8
fCAhY2FudmFzLT5idWZmZXIoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gY2FudmFzIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oY2Fu
dmFzKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZp
ZGVvLT52aWRlb0hlaWdodCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyB2aWRlbyIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVv
KSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0Mz
RGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1f
bWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGlu
ZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KKyAgICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFu
dCgpKSB7CisgICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRTaXplKSB7CisgICAgICAgIGNhc2UgMToK
KyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYw
LCB2MSwgdjIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIFZlcnRleEF0dHJpYlZhbHVl
JiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0cmliVmFsdWVbaW5kZXhdOworICAgIGF0dHJpYlZh
bHVlLnZhbHVlWzBdID0gdjA7CisgICAgYXR0cmliVmFsdWUudmFsdWVbMV0gPSB2MTsKKyAgICBh
dHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOworICAgIGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZnZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSog
diwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJubyBhcnJheSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZlcnRleEF0dHJpYmZ2
SW1wbChmdW5jdGlvbk5hbWUsIGluZGV4LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCBleHBlY3Rl
ZFNpemUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJp
YmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXYp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKHNpemUgPCBleHBlY3RlZFNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgc2l6ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX21h
eFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcg
dmVydGV4QXR0cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQo
KSkgeworICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBjYXNlIDE6Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgdik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWIyZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
MzoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB2KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtX2NvbnRleHQt
PnZlcnRleEF0dHJpYjRmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKyAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0
dHJpYlZhbHVlW2luZGV4XTsKKyAgICBhdHRyaWJWYWx1ZS5pbml0VmFsdWUoKTsKKyAgICBmb3Ig
KGludCBpaSA9IDA7IGlpIDwgZXhwZWN0ZWRTaXplOyArK2lpKQorICAgICAgICBhdHRyaWJWYWx1
ZS52YWx1ZVtpaV0gPSB2W2lpXTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojppbml0VmVydGV4QXR0cmliMCgpCit7CisgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICAKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBj
cmVhdGVCdWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmplY3QoKSk7CisgICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAw
KTsKKyAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOworICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAw
KTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVl
WzBdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXSA9IDAuMGY7Cisg
ICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBmOworICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKKyAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmls
bCA9IGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSBmYWxzZTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0Mz
RHNpemVpIG51bVZlcnRleCkKK3sKKyAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKDApOworICAgIGNvbnN0IFZlcnRleEF0dHJpYlZhbHVlJiBhdHRy
aWJWYWx1ZSA9IG1fdmVydGV4QXR0cmliVmFsdWVbMF07CisgICAgaWYgKCFtX2N1cnJlbnRQcm9n
cmFtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCB1c2luZ1ZlcnRleEF0dHJpYjAg
PSBtX2N1cnJlbnRQcm9ncmFtLT5pc1VzaW5nVmVydGV4QXR0cmliMCgpOworICAgIGlmICh1c2lu
Z1ZlcnRleEF0dHJpYjApCisgICAgICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSB0cnVl
OworICAgIGlmIChzdGF0ZS5lbmFibGVkICYmIHVzaW5nVmVydGV4QXR0cmliMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghdXNpbmdWZXJ0ZXhBdHRyaWIwICYmICFtX3ZlcnRleEF0
dHJpYjBVc2VkQmVmb3JlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV92ZXJ0ZXhBdHRy
aWIwVXNlZEJlZm9yZSA9IHRydWU7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci0+b2JqZWN0KCkp
OworICAgIEdDM0RzaXplaXB0ciBidWZmZXJEYXRhU2l6ZSA9IChudW1WZXJ0ZXggKyAxKSAqIDQg
KiBzaXplb2YoR0MzRGZsb2F0KTsKKyAgICBpZiAoYnVmZmVyRGF0YVNpemUgPiBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJTaXplKSB7CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBidWZmZXJEYXRhU2l6ZSwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkRZTkFNSUNfRFJBVyk7CisgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUg
PSBidWZmZXJEYXRhU2l6ZTsKKyAgICAgICAgbV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwgPSB0
cnVlOworICAgIH0KKyAgICBpZiAodXNpbmdWZXJ0ZXhBdHRyaWIwCisgICAgICAgICYmIChtX2Zv
cmNlQXR0cmliMEJ1ZmZlclJlZmlsbAorICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVb
MF0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0KKyAgICAgICAgICAgIHx8IGF0dHJp
YlZhbHVlLnZhbHVlWzFdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdCisgICAgICAg
ICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVsyXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVsyXQorICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbM10gIT0gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyVmFsdWVbM10pKSB7CisgICAgICAgICAgICBhdXRvIGJ1ZmZlckRhdGEgPSBzdGQ6
Om1ha2VfdW5pcXVlPEdDM0RmbG9hdFtdPigobnVtVmVydGV4ICsgMSkgKiA0KTsKKyAgICAgICAg
ICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lpKSB7Cisg
ICAgICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDRdID0gYXR0cmliVmFsdWUudmFsdWVbMF07
CisgICAgICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAxXSA9IGF0dHJpYlZhbHVlLnZh
bHVlWzFdOworICAgICAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJW
YWx1ZS52YWx1ZVsyXTsKKyAgICAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNCArIDNdID0g
YXR0cmliVmFsdWUudmFsdWVbM107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAgICAg
ICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsxXTsK
KyAgICAgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gYXR0cmliVmFsdWUu
dmFsdWVbMl07CisgICAgICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0
dHJpYlZhbHVlLnZhbHVlWzNdOworICAgICAgICAgICAgbV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZp
bGwgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YShHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBidWZmZXJEYXRhU2l6ZSwgYnVmZmVyRGF0YS5n
ZXQoKSk7CisgICAgICAgIH0KKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwg
NCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpCit7CisgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICBpZiAoc3RhdGUuYnVmZmVyQmluZGlu
ZyAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG9iamVjdE9yWmVybyhzdGF0ZS5i
dWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9p
bnRlcigwLCBzdGF0ZS5zaXplLCBzdGF0ZS50eXBlLCBzdGF0ZS5ub3JtYWxpemVkLCBzdGF0ZS5v
cmlnaW5hbFN0cmlkZSwgc3RhdGUub2Zmc2V0KTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5iaW5k
QnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG9iamVjdE9yWmVybyhtX2Jv
dW5kQXJyYXlCdWZmZXIuZ2V0KCkpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQoreworICAgIFJlZlB0cjxXZWJHTENvbnRl
eHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53
ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0cnVlLCAiIik7CisgICAgY2FudmFzKCktPmRp
c3BhdGNoRXZlbnQoZXZlbnQpOworICAgIG1fcmVzdG9yZUFsbG93ZWQgPSBldmVudC0+ZGVmYXVs
dFByZXZlbnRlZCgpOworICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRl
eHQgJiYgbV9yZXN0b3JlQWxsb3dlZCkKKyAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVT
aG90KDApOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1heWJlUmVzdG9y
ZUNvbnRleHQoKQoreworICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKKyAgICBpZiAoIW1fY29u
dGV4dExvc3QpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUaGUgcmVuZGVyaW5nIGNv
bnRleHQgaXMgbm90IHJlc3RvcmVkIHVubGVzcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUK
KyAgICAvLyB3ZWJnbGNvbnRleHRsb3N0IGV2ZW50IHdhcyBwcmV2ZW50ZWQgZWFybGllci4KKyAg
ICAvLworICAgIC8vIEJlY2F1c2Ugb2YgdGhlIHdheSBtX3Jlc3RvcmVUaW1lciBpcyBzZXQgdXAg
Zm9yIHJlYWwgdnMuIHN5bnRoZXRpYyBsb3N0CisgICAgLy8gY29udGV4dCBldmVudHMsIHdlIGRv
bid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB0ZXN0IHNob3J0LWNpcmN1aXRpbmcKKyAgICAv
LyB0aGUgcmV0cnkgbG9vcCBmb3IgcmVhbCBjb250ZXh0IGxvc3QgZXZlbnRzLgorICAgIGlmICgh
bV9yZXN0b3JlQWxsb3dlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGludCBjb250ZXh0
TG9zdFJlYXNvbiA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCk7CisgICAgCisgICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgorICAgICAgICAvLyBUaGUgR3JhcGhp
Y3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5CisgICAgICAgIC8vIHN1
cHBvcnQgR0xfQVJCX3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhl
CisgICAgICAgIC8vIFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVu
IHVzZWQgdG8gZm9yY2UKKyAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6CisgICAg
ICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250
ZXh0IHdhcworICAgICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQu
CisgICAgICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBv
biB0aGUgcGFnZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3Jp
bmcgdGhlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpJTk5PQ0VOVF9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRo
ZSBjb250ZXh0IHRvIGJlIHJlc3RvcmVkLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6VU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gV2Fybi4gSWRl
YWxseSwgcHJvbXB0IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCisgICAgICAgIC8v
IGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQg
dG8KKyAgICAgICAgLy8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNv
bnRpbnVlIHJ1bm5pbmcKKyAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkg
InllcyIgc2hvdWxkIHdlIHN0YXJ0CisgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0
aGUgY29udGV4dC4KKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJH
TCBjb250ZW50IG9uIHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJk
IHRvIHJlc2V0Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBGcmFtZSogZnJh
bWUgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5hbGxv
d1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2
aWV3KQorICAgICAgICByZXR1cm47CisgICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3Qo
KTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVybjsKKyAgICBIb3N0V2luZG93KiBob3N0
V2luZG93ID0gcm9vdC0+aG9zdFdpbmRvdygpOworICAgIGlmICghaG9zdFdpbmRvdykKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKG1fYXR0cmlidXRlcywgaG9zdFdpbmRvdykpOworICAg
IGlmICghY29udGV4dCkgeworICAgICAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExv
c3RDb250ZXh0KQorICAgICAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KHNlY29u
ZHNCZXR3ZWVuUmVzdG9yZUF0dGVtcHRzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8g
VGhpcyBsaWtlbHkgc2hvdWxkbid0IGhhcHBlbiBidXQgaXMgdGhlIGJlc3Qgd2F5IHRvIHJlcG9y
dCBpdCB0byB0aGUgV2ViR0wgYXBwLgorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiIiwgImVycm9yIHJlc3RvcmluZyBj
b250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gQ29uc3RydWN0
IGEgbmV3IGRyYXdpbmcgYnVmZmVyIHdpdGggdGhlIG5ldyBHcmFwaGljc0NvbnRleHQzRC4KKyAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+ZGlzY2Fy
ZFJlc291cmNlcygpOworICAgICAgICBEcmF3aW5nQnVmZmVyOjpQcmVzZXJ2ZURyYXdpbmdCdWZm
ZXIgcHJlc2VydmUgPSBtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID8gRHJhd2lu
Z0J1ZmZlcjo6UHJlc2VydmUgOiBEcmF3aW5nQnVmZmVyOjpEaXNjYXJkOworICAgICAgICBEcmF3
aW5nQnVmZmVyOjpBbHBoYVJlcXVpcmVtZW50IGFscGhhID0gbV9hdHRyaWJ1dGVzLmFscGhhID8g
RHJhd2luZ0J1ZmZlcjo6QWxwaGEgOiBEcmF3aW5nQnVmZmVyOjpPcGFxdWU7CisgICAgICAgIG1f
ZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShjb250ZXh0LmdldCgpLCBtX2Ry
YXdpbmdCdWZmZXItPnNpemUoKSwgcHJlc2VydmUsIGFscGhhKTsKKyAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5iaW5kKCk7CisgICAgfQorICAgIAorICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Cisg
ICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOworICAgIHNldHVwRmxhZ3MoKTsKKyAgICBpbml0aWFs
aXplTmV3Q29udGV4dCgpOworICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4
dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dHJlc3RvcmVkRXZlbnQsIGZh
bHNlLCB0cnVlLCAiIikpOworfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
ZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmIHRleHQpIGNvbnN0Cit7CisgICAgaWYgKHRleHQu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBXVEY6OmVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJu
IHRleHQ7Cit9CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2Fj
aGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5KQorICAgIDogbV9idWZmZXJzKHN0
ZDo6bWFrZV91bmlxdWU8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPihjYXBhY2l0eSkp
CisgICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5KQoreworfQorCitJbWFnZUJ1ZmZlciogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9j
YXBhY2l0eTsgKytpKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0u
Z2V0KCk7CisgICAgICAgIGlmICghYnVmKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm
IChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBidWJibGVUb0Zyb250KGkpOworICAgICAgICByZXR1cm4gYnVmOworICAgIH0KKyAgICAK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUsIDEpOworICAgIGlmICghdGVtcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgaSA9IHN0ZDo6bWluKG1fY2FwYWNpdHkgLSAxLCBpKTsKKyAgICBtX2J1ZmZlcnNbaV0gPSBX
VEY6Om1vdmUodGVtcCk7CisgICAgCisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tp
XS5nZXQoKTsKKyAgICBidWJibGVUb0Zyb250KGkpOworICAgIHJldHVybiBidWY7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxl
VG9Gcm9udChpbnQgaWR4KQoreworICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCisg
ICAgICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKK30KKworbmFtZXNwYWNl
IHsKKyAgICAKKyAgICBTdHJpbmcgR2V0RXJyb3JTdHJpbmcoR0MzRGVudW0gZXJyb3IpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTToKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9FTlVNIjsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRToKKyAgICAgICAgICAg
IHJldHVybiAiSU5WQUxJRF9WQUxVRSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OOgorICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX09QRVJBVElP
TiI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlk6CisgICAg
ICAgICAgICByZXR1cm4gIk9VVF9PRl9NRU1PUlkiOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKKyAgICAgICAgICAgIHJldHVy
biAiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iOworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0w6CisgICAgICAgICAgICByZXR1cm4gIkNPTlRF
WFRfTE9TVF9XRUJHTCI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmb3JtYXQoIldlYkdMIEVSUk9SKCUwNHgpIiwgZXJyb3IpOworICAgICAgICB9CisgICAg
fQorICAgIAorfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJl
ZmVyZW5jZSBkaXNwbGF5KQoreworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xl
ICYmIGRpc3BsYXkgPT0gRGlzcGxheUluQ29uc29sZSkgeworICAgICAgICBTdHJpbmcgc3RyID0g
U3RyaW5nKCJXZWJHTDogIikgKyBHZXRFcnJvclN0cmluZyhlcnJvcikgKyAgIjogIiArIFN0cmlu
ZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICAgIHBy
aW50R0xFcnJvclRvQ29uc29sZShzdHIpOworICAgIH0KKyAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKGVycm9yKTsKK30KKworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
Y2hhciogZGVzY3JpcHRpb24pCit7CisgICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNv
bGUpIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsgU3RyaW5nKGZ1
bmN0aW9uTmFtZSkgKyAiOiAiICsgU3RyaW5nKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgcHJpbnRH
TEVycm9yVG9Db25zb2xlKHN0cik7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmFwcGx5U3RlbmNpbFRlc3QoKQoreworICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZm
ZXIgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAg
IGhhdmVTdGVuY2lsQnVmZmVyID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmhhc1N0ZW5jaWxCdWZm
ZXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+
IGF0dHJpYnV0ZXMgPSBnZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgICAgICBoYXZlU3RlbmNp
bEJ1ZmZlciA9IGF0dHJpYnV0ZXMtPnN0ZW5jaWwoKTsKKyAgICB9CisgICAgZW5hYmxlT3JEaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QsCisgICAgICAgIG1fc3RlbmNpbEVu
YWJsZWQgJiYgaGF2ZVN0ZW5jaWxCdWZmZXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5LCBib29sIGVuYWJs
ZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXBhYmls
aXR5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXBhYmlsaXR5KTsK
K30KKworSW50U2l6ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGFtcGVkQ2FudmFzU2l6
ZSgpCit7CisgICAgcmV0dXJuIEludFNpemUoY2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1f
bWF4Vmlld3BvcnREaW1zWzBdKSwKKyAgICAgICAgY2xhbXAoY2FudmFzKCktPmhlaWdodCgpLCAx
LCBtX21heFZpZXdwb3J0RGltc1sxXSkpOworfQorCitHQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldE1heERyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1
ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heERyYXdCdWZmZXJzKQor
ICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVG
RkVSU19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2ht
ZW50cykKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9D
T0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgIC8vIFdF
QkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMgPj0gTUFYX0RS
QVdfQlVGRkVSUy4KKyAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVmZmVycywgbV9tYXhD
b2xvckF0dGFjaG1lbnRzKTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZl
cnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMp
CisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1Jf
QVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICByZXR1cm4gbV9t
YXhDb2xvckF0dGFjaG1lbnRzOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnNldEJhY2tEcmF3QnVmZmVyKEdDM0RlbnVtIGJ1ZikKK3sKKyAgICBtX2JhY2tEcmF3QnVmZmVy
ID0gYnVmOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVDdXJy
ZW50RnJhbWVidWZmZXIoKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgYmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcuZ2V0KCksIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXN0
b3JlQ3VycmVudFRleHR1cmUyRCgpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBiaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9h
Y3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSwgZWMpOworfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN1cHBvcnRzRHJhd0J1ZmZlcnMoKQoreworICAg
IGlmICghbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCkgeworICAgICAgICBt
X2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkID0gdHJ1ZTsKKyAgICAgICAgbV9k
cmF3QnVmZmVyc1N1cHBvcnRlZCA9IFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBvcnRlZCh0aGlzKTsK
KyAgICB9CisgICAgcmV0dXJuIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2Rl
LCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7
CisgICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2Rl
LCBmaXJzdCwgY291bnQsIHByaW1jb3VudCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAocHJpbWNvdW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdBcnJheXNJbnN0YW5jZWQiLCAicHJpbWNvdW50
IDwgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghcHJpbWNvdW50
KSB7CisgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgYm9vbCB2ZXJ0ZXhB
dHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCisg
ICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmly
c3QgKyBjb3VudCAtIDEpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAg
Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgdHJ1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHByaW1jb3VudCk7CisgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzSW5z
dGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKKyAgICBpZiAoIWlzR0xFUzJD
b21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3Rh
dGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RT
dHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5z
dGFuY2VkIiwgZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBt
b2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdD
M0RzaXplaSBwcmltY291bnQpCit7CisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAg
IGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIG1vZGUs
IGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChwcmltY291bnQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwg
InByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
IXByaW1jb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIAorICAgIGJv
b2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxpZGF0
ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBz
aW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkIiwgdHJ1ZSk7CisgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHNJbnN0
YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCks
IHByaW1jb3VudCk7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmli
MFNpbXVsYXRlZCkKKyAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVs
YXRpb24oKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4
dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgZmFsc2UpOworICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRy
aWJEaXZpc29yIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliRGl2
aXNvcihpbmRleCwgZGl2aXNvcik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJEaXZpc29y
KGluZGV4LCBkaXZpc29yKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VfaAor
I2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlX2gKKworCisjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1
ZGUgIkRyYXdpbmdCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXZWJH
TEdldEluZm8uaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8cnVudGltZS9GbG9hdDMy
QXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgQU5H
TEVJbnN0YW5jZWRBcnJheXM7CitjbGFzcyBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7Citj
bGFzcyBFWFRTaGFkZXJUZXh0dXJlTE9EOworY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKK2NsYXNz
IEhUTUxWaWRlb0VsZW1lbnQ7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsK
K2NsYXNzIEludFNpemU7CitjbGFzcyBPRVNTdGFuZGFyZERlcml2YXRpdmVzOworY2xhc3MgT0VT
VGV4dHVyZUZsb2F0OworY2xhc3MgT0VTVGV4dHVyZUZsb2F0TGluZWFyOworY2xhc3MgT0VTVGV4
dHVyZUhhbGZGbG9hdDsKK2NsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI7CitjbGFzcyBP
RVNWZXJ0ZXhBcnJheU9iamVjdDsKK2NsYXNzIE9FU0VsZW1lbnRJbmRleFVpbnQ7CitjbGFzcyBX
ZWJHTEFjdGl2ZUluZm87CitjbGFzcyBXZWJHTEJ1ZmZlcjsKK2NsYXNzIFdlYkdMQ29udGV4dEdy
b3VwOworY2xhc3MgV2ViR0xDb250ZXh0T2JqZWN0OworY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQzsKK2NsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzsKK2NsYXNzIFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVTM1RDOworY2xhc3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKK2Ns
YXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87CitjbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKK2Ns
YXNzIFdlYkdMRGVwdGhUZXh0dXJlOworY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsKK2NsYXNzIFdl
YkdMRXh0ZW5zaW9uOworY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsKK2NsYXNzIFdlYkdMTG9zZUNv
bnRleHQ7CitjbGFzcyBXZWJHTE9iamVjdDsKK2NsYXNzIFdlYkdMUHJvZ3JhbTsKK2NsYXNzIFdl
YkdMUmVuZGVyYnVmZmVyOworY2xhc3MgV2ViR0xTaGFkZXI7CitjbGFzcyBXZWJHTFNoYXJlZE9i
amVjdDsKK2NsYXNzIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OworY2xhc3MgV2ViR0xUZXh0
dXJlOworY2xhc3MgV2ViR0xVbmlmb3JtTG9jYXRpb247CitjbGFzcyBXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTOworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQsIHB1Ymxp
YyBBY3RpdmVET01PYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4gY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50KiwgV2Vi
R0xDb250ZXh0QXR0cmlidXRlcyosIGNvbnN0IFN0cmluZyYpOworCisgICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZShIVE1MQ2FudmFzRWxlbWVudCosIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKEhUTUxDYW52YXNFbGVtZW50
KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzKTsKKyAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKCk7CisgICAg
CisgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisjaWYgUExBVEZPUk0oV0lOKQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYWNjZWxlcmF0ZWQg
M2QgY2FudmFzIG9uIFdpbmRvd3MuCisgICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorI2Vsc2UKKyAgICB2aXJ0dWFsIGJvb2wg
aXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgor
ICAgIAorICAgIGludCBkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdDsKKyAgICBpbnQgZHJhd2lu
Z0J1ZmZlckhlaWdodCgpIGNvbnN0OworICAgIAorICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNE
ZW51bSB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoV2Vi
R0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBiaW5k
QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0
YXJnZXQsIFdlYkdMQnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmluZEZyYW1l
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRl
cmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVt
IHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmxlbmRD
b2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNE
ZmxvYXQgYWxwaGEpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKKyAg
ICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBt
b2RlQWxwaGEpOworICAgIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVt
IGRmYWN0b3IpOworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBH
QzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7Cisg
ICAgCisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUs
IEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZm
ZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVm
ZmVyKiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNl
cHRpb25Db2RlJik7CisgICAgCisgICAgR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
QzNEZW51bSB0YXJnZXQpOworICAgIHZvaWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spOworICAg
IHZvaWQgY2xlYXJDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9h
dCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOworICAgIHZvaWQgY2xlYXJEZXB0aChHQzNEZmxvYXQp
OworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQpOworICAgIHZvaWQgY29sb3JNYXNrKEdD
M0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Ri
b29sZWFuIGFscGhhKTsKKyAgICB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqLCBFeGNl
cHRpb25Db2RlJik7CisgICAgCisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZp
ZXcqIGRhdGEpOworICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVm
ZmVyVmlldyogZGF0YSk7CisgICAgCisgICAgdm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlcik7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICAKKyAgICBQ
YXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVhdGVCdWZmZXIoKTsKKyAgICBQYXNzUmVmUHRyPFdl
YkdMRnJhbWVidWZmZXI+IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxXZWJH
TFByb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVm
ZmVyPiBjcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBj
cmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQ
dHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CisgICAgCisgICAgdm9pZCBjdWxsRmFj
ZShHQzNEZW51bSBtb2RlKTsKKyAgICAKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZl
ciopOworICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOworICAg
IHZvaWQgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKKyAgICB2b2lkIGRlbGV0ZVJlbmRl
cmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOworICAgIHZvaWQgZGVsZXRlU2hhZGVyKFdlYkdM
U2hhZGVyKik7CisgICAgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSopOworICAgIAor
ICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsKKyAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9v
bGVhbik7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpG
YXIpOworICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApOworICAgIHZv
aWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdD
M0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdD
M0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAgIAorICAgIHZvaWQgZW5hYmxlKEdDM0RlbnVtIGNh
cCk7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZmluaXNoKCk7CisgICAgdm9pZCBmbHVzaCgpOworICAg
IHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVy
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdM
VGV4dHVyZSosIEdDM0RpbnQgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGZyb250
RmFjZShHQzNEZW51bSBtb2RlKTsKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRh
cmdldCk7CisgICAgCisgICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2ZUF0
dHJpYihXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3Jh
bSosIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBnZXRBdHRhY2hl
ZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0QnVmZmVyUGFyYW1l
dGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGdldENvbnRleHRBdHRyaWJ1dGVz
KCk7CisgICAgR0MzRGVudW0gZ2V0RXJyb3IoKTsKKyAgICBXZWJHTEV4dGVuc2lvbiogZ2V0RXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgV2ViR0xHZXRJbmZvIGdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdl
dFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdMR2V0
SW5mbyBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSosIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3Jh
bSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBXZWJHTEdldEluZm8gZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiwgR0MzRGVu
dW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhX
ZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVy
UHJlY2lzaW9uRm9ybWF0PiBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVy
VHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmlu
ZyBnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgVmVj
dG9yPFN0cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworICAgIFdlYkdMR2V0SW5mbyBn
ZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFdlYkdMR2V0SW5mbyBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8
V2ViR0xVbmlmb3JtTG9jYXRpb24+IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBj
b25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFZlcnRl
eEF0dHJpYihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBsb25nIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNE
ZW51bSBwbmFtZSk7CisgICAgCisgICAgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gbW9kZSk7CisgICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZmZXIqKTsKKyAgICBi
b29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKKyAgICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0Mz
RGVudW0gY2FwKTsKKyAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZm
ZXIqKTsKKyAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7CisgICAgR0Mz
RGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKKyAgICBHQzNEYm9v
bGVhbiBpc1NoYWRlcihXZWJHTFNoYWRlciopOworICAgIEdDM0Rib29sZWFuIGlzVGV4dHVyZShX
ZWJHTFRleHR1cmUqKTsKKyAgICAKKyAgICB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpOworICAg
IHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOworICAgIHZvaWQg
cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpOworICAgIHZv
aWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVy
VmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KTsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xlYW4g
aW52ZXJ0KTsKKyAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xT
aGFkZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzdGVuY2ls
RnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7CisgICAgdm9p
ZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0Rp
bnQgcmVmLCBHQzNEdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50KTsK
KyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFz
ayk7CisgICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdD
M0RlbnVtIHpwYXNzKTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7CisgICAgCisg
ICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgQXJyYXlCdWZmZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSos
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2lmIEVOQUJMRShW
SURFTykKKyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisg
ICAgCisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RmbG9hdCBwYXJhbSk7CisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOworICAgIAorICAgIHZvaWQgdGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZm
ZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSosIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9u
Q29kZSYpOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVt
ZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisgICAgCisgICAgdm9pZCB1bmlmb3JtMWYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0x
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVu
aWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2
LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTJmKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0yaXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtM2koY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGlu
dCB6LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1
bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTRm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0Mz
RHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00aShjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
aW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTRpdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2
YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1N
YXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXpl
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMy
QXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIAorICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIAorICAgIHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCB4KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFy
cmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmli
MmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSk7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAg
ICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMs
IEdDM0RzaXplaSBzaXplKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKKyAgICB2b2lkIHZlcnRl
eEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZv
aWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0Mz
RHNpemVpIHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMp
OworICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZh
bHVlcywgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihHQzNE
dWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3Jt
YWxpemVkLAorICAgICAgICBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJik7CisgICAgCisgICAgdm9pZCB2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICAKKyAgICAvLyBXRUJL
SVRfbG9zZV9jb250ZXh0IHN1cHBvcnQKKyAgICBlbnVtIExvc3RDb250ZXh0TW9kZSB7CisgICAg
ICAgIC8vIExvc3QgY29udGV4dCBvY2N1cnJlZCBhdCB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGxldmVs
LgorICAgICAgICBSZWFsTG9zdENvbnRleHQsCisgICAgICAgIAorICAgICAgICAvLyBMb3N0IGNv
bnRleHQgcHJvdm9rZWQgYnkgV0VCS0lUX2xvc2VfY29udGV4dC4KKyAgICAgICAgU3ludGhldGlj
TG9zdENvbnRleHQKKyAgICB9OworICAgIHZvaWQgZm9yY2VMb3N0Q29udGV4dChMb3N0Q29udGV4
dE1vZGUpOworICAgIHZvaWQgZm9yY2VSZXN0b3JlQ29udGV4dCgpOworICAgIHZvaWQgbG9zZUNv
bnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Cisg
ICAgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dEdyb3VwLmdldCgpOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCk7CisgICAgCisgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgb3ZlcnJpZGU7Cisg
ICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KCk7CisgICAgCisgICAgdm9pZCByZW1vdmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3Qq
KTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0Kik7Cisg
ICAgCisgICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmlicygpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4VmVydGV4QXR0cmliczsgfQorICAgIAorICAgIC8vIEFOR0xFX2luc3RhbmNlZF9hcnJheXMg
ZXh0ZW5zaW9uIGZ1bmN0aW9ucy4KKyAgICB2b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVu
dW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNv
dW50KTsKKyAgICB2b2lkIGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNE
c2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBw
cmltY291bnQpOworICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwg
R0MzRHVpbnQgZGl2aXNvcik7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBXZWJH
TERyYXdCdWZmZXJzOworICAgIGZyaWVuZCBjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOworICAgIGZy
aWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKKyAgICBmcmllbmQgY2xhc3MgT0VTVmVydGV4QXJyYXlP
YmplY3Q7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMRGVidWdTaGFkZXJzOworICAgIGZyaWVuZCBj
bGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOworICAgIGZyaWVuZCBjbGFzcyBXZWJHTENv
bXByZXNzZWRUZXh0dXJlUFZSVEM7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDOworICAgIGZyaWVuZCBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjazsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
UzsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CisgICAgdm9pZCBzZXR1
cEZsYWdzKCk7CisgICAgCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0CisgICAgdmlydHVhbCBib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBz
dG9wKCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBhZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFy
ZWRPYmplY3QqKTsKKyAgICB2b2lkIGFkZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0
Kik7CisgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisgICAgCisgICAgdm9p
ZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB2b2lkIG1hcmtDb250ZXh0Q2hhbmdl
ZCgpOworICAgIAorICAgIC8vIFF1ZXJ5IHdoZXRoZXIgaXQgaXMgYnVpbHQgb24gdG9wIG9mIGNv
bXBsaWFudCBHTEVTMiBpbXBsZW1lbnRhdGlvbi4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSB7IHJldHVybiBtX2lzR0xFUzJDb21wbGlhbnQ7IH0KKyAgICAvLyBRdWVyeSBpZiB0aGUgR0wg
aW1wbGVtZW50YXRpb24gaXMgTlBPVCBzdHJpY3QuCisgICAgYm9vbCBpc0dMRVMyTlBPVFN0cmlj
dCgpIHsgcmV0dXJuIG1faXNHTEVTMk5QT1RTdHJpY3Q7IH0KKyAgICAvLyBRdWVyeSBpZiB0aGUg
R0wgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVzIGVycm9ycyBvbiBvdXQtb2YtYm91bmRzIGJ1ZmZl
ciBhY2Nlc3Nlcy4KKyAgICBib29sIGlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNz
ZXMoKSB7IHJldHVybiBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7IH0K
KyAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gaW5pdGlhbGl6ZXMgdGV4dHVy
ZXMvcmVuZGVyYnVmZmVycyB0byAwLgorICAgIGJvb2wgaXNSZXNvdXJjZVNhZmUoKSB7IHJldHVy
biBtX2lzUmVzb3VyY2VTYWZlOyB9CisgICAgLy8gUXVlcnkgaWYgZGVwdGhfc3RlbmNpbCBidWZm
ZXIgaXMgc3VwcG9ydGVkLgorICAgIGJvb2wgaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSB7IHJl
dHVybiBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkOyB9CisgICAgCisgICAgLy8gSGVscGVyIHRv
IHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBlcworICAgIC8vIGxp
a2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKEdDM0Rl
bnVtIHR5cGUpOworICAgIAorICAgIC8vIEJhc2ljIHZhbGlkYXRpb24gb2YgY291bnQgYW5kIG9m
ZnNldCBhZ2FpbnN0IG51bWJlciBvZiBlbGVtZW50cyBpbiBlbGVtZW50IGFycmF5IGJ1ZmZlcgor
ICAgIGJvb2wgdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpOworICAgIAorICAgIC8vIENvbnNlcnZhdGl2ZSBi
dXQgcXVpY2sgaW5kZXggdmFsaWRhdGlvbgorICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29u
c2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsK
KyAgICAKKyAgICAvLyBQcmVjaXNlIGJ1dCBzbG93IGluZGV4IHZhbGlkYXRpb24gLS0gb25seSBk
b25lIGlmIGNvbnNlcnZhdGl2ZSBjaGVja3MgZmFpbAorICAgIGJvb2wgdmFsaWRhdGVJbmRleEFy
cmF5UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zm
c2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCk7CisgICAgYm9vbCB2YWxpZGF0ZVZl
cnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmltaXRpdmVD
b3VudCA9IDApOworICAgIAorICAgIGJvb2wgdmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBjaGFy
KiwgV2ViR0xPYmplY3QqKTsKKyAgICAKKyAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0Rz
aXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7CisgICAgYm9vbCB2YWxpZGF0ZURyYXdF
bGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVs
ZW1lbnRzKTsKKyAgICAKKyAgICAvLyBBZGRzIGEgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdC4K
KyAgICB2b2lkIGFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtKTsKKyAgICAKKyAg
ICBQYXNzUmVmUHRyPEltYWdlPiBkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBpbnQgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIAorI2lmIEVOQUJMRShW
SURFTykKKyAgICBQYXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9F
bGVtZW50KiwgQmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisgICAg
CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPFdl
YkdMQ29udGV4dEdyb3VwPiBtX2NvbnRleHRHcm91cDsKKyAgICAKKyAgICAvLyBPcHRpb25hbCBz
dHJ1Y3R1cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQgb2YgZGly
ZWN0bHkKKyAgICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0LgorICAgIFJlZlB0
cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CisgICAgCisgICAgLy8gRGlzcGF0Y2hl
cyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0IGlzIGRldGVybWluZWQgdGhhdCBvbmUgaXMg
bmVlZGVkLgorICAgIC8vIFRoaXMgaXMgdXNlZCBib3RoIGZvciBzeW50aGV0aWMgYW5kIHJlYWwg
Y29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMsIGl0J3MKKyAgICAvLyBsaWtlbHkgdGhhdCB0
aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0YWNrLCBidXQgdGhhdCBtaWdodCBiZSBkZXBl
bmRlbnQKKyAgICAvLyBvbiBob3cgZXhhY3RseSB0aGUgcGxhdGZvcm0gZGlzY292ZXJzIHRoYXQg
dGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBiZXR0ZXIKKyAgICAvLyBwb3J0YWJpbGl0eSB3ZSBh
bHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBldmVudC4KKyAgICBUaW1lciBtX2Rpc3Bh
dGNoQ29udGV4dExvc3RFdmVudFRpbWVyOworICAgIGJvb2wgbV9yZXN0b3JlQWxsb3dlZDsKKyAg
ICBUaW1lciBtX3Jlc3RvcmVUaW1lcjsKKyAgICAKKyAgICBib29sIG1fbmVlZHNVcGRhdGU7Cisg
ICAgYm9vbCBtX21hcmtlZENhbnZhc0RpcnR5OworICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0T2Jq
ZWN0Kj4gbV9jb250ZXh0T2JqZWN0czsKKyAgICAKKyAgICAvLyBMaXN0IG9mIGJvdW5kIFZCTydz
LiBVc2VkIHRvIG1haW50YWluIGluZm8gYWJvdXQgc2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBhbmQg
c3RvcmVkIHZhbHVlcyBmb3IgRUxFTUVOVF9BUlJBWV9CVUZGRVIKKyAgICBSZWZQdHI8V2ViR0xC
dWZmZXI+IG1fYm91bmRBcnJheUJ1ZmZlcjsKKyAgICAKKyAgICBSZWZQdHI8V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUz4gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CisgICAgUmVmUHRyPFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdDsKKyAgICB2
b2lkIHNldEJvdW5kVmVydGV4QXJyYXlPYmplY3QoUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTPiBhcnJheU9iamVjdCkKKyAgICB7CisgICAgICAgIGlmIChhcnJheU9iamVjdCkK
KyAgICAgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IGFycmF5T2JqZWN0OworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1
bHRWZXJ0ZXhBcnJheU9iamVjdDsKKyAgICB9CisgICAgCisgICAgY2xhc3MgVmVydGV4QXR0cmli
VmFsdWUgeworICAgIHB1YmxpYzoKKyAgICAgICAgVmVydGV4QXR0cmliVmFsdWUoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbml0VmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBpbml0VmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZVswXSA9IDAu
MGY7CisgICAgICAgICAgICB2YWx1ZVsxXSA9IDAuMGY7CisgICAgICAgICAgICB2YWx1ZVsyXSA9
IDAuMGY7CisgICAgICAgICAgICB2YWx1ZVszXSA9IDEuMGY7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEdDM0RmbG9hdCB2YWx1ZVs0XTsKKyAgICB9OworICAgIFZlY3RvcjxWZXJ0ZXhB
dHRyaWJWYWx1ZT4gbV92ZXJ0ZXhBdHRyaWJWYWx1ZTsKKyAgICB1bnNpZ25lZCBtX21heFZlcnRl
eEF0dHJpYnM7CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7
CisgICAgbG9uZyBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplOworICAgIEdDM0RmbG9hdCBtX3Zl
cnRleEF0dHJpYjBCdWZmZXJWYWx1ZVs0XTsKKyAgICBib29sIG1fZm9yY2VBdHRyaWIwQnVmZmVy
UmVmaWxsOworICAgIGJvb2wgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZTsKKyAgICAKKyAgICBS
ZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOworICAgIFJlZlB0cjxXZWJHTEZy
YW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKKyAgICBSZWZQdHI8V2ViR0xSZW5kZXJi
dWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKKyAgICBzdHJ1Y3QgVGV4dHVyZVVuaXRTdGF0
ZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmUyREJpbmRpbmc7CisgICAg
ICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmVDdWJlTWFwQmluZGluZzsKKyAgICB9Owor
ICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0czsKKyAgICB1bnNpZ25l
ZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7CisgICAgCisgICAgUmVmUHRyPFdlYkdMVGV4dHVy
ZT4gbV9ibGFja1RleHR1cmUyRDsKKyAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4
dHVyZUN1YmVNYXA7CisgICAgCisgICAgVmVjdG9yPEdDM0RlbnVtPiBtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0czsKKyAgICAKKyAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJldXNhYmxlIGlt
YWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCisgICAgY2xhc3MgTFJVSW1h
Z2VCdWZmZXJDYWNoZSB7CisgICAgcHVibGljOgorICAgICAgICBMUlVJbWFnZUJ1ZmZlckNhY2hl
KGludCBjYXBhY2l0eSk7CisgICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93bmVk
IGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgorICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBidWJi
bGVUb0Zyb250KGludCBpZHgpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7CisgICAgICAgIGludCBtX2NhcGFjaXR5Owor
ICAgIH07CisgICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZEltYWdlQ2FjaGU7Cisg
ICAgCisgICAgR0MzRGludCBtX21heFRleHR1cmVTaXplOworICAgIEdDM0RpbnQgbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemU7CisgICAgR0MzRGludCBtX21heFJlbmRlcmJ1ZmZlclNpemU7CisgICAg
R0MzRGludCBtX21heFZpZXdwb3J0RGltc1syXTsKKyAgICBHQzNEaW50IG1fbWF4VGV4dHVyZUxl
dmVsOworICAgIEdDM0RpbnQgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOworICAgIAorICAgIEdD
M0RpbnQgbV9tYXhEcmF3QnVmZmVyczsKKyAgICBHQzNEaW50IG1fbWF4Q29sb3JBdHRhY2htZW50
czsKKyAgICBHQzNEZW51bSBtX2JhY2tEcmF3QnVmZmVyOworICAgIGJvb2wgbV9kcmF3QnVmZmVy
c1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZDsKKyAgICBib29sIG1fZHJhd0J1ZmZlcnNTdXBwb3J0
ZWQ7CisgICAgCisgICAgR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7CisgICAgR0MzRGludCBtX3Vu
cGFja0FsaWdubWVudDsKKyAgICBib29sIG1fdW5wYWNrRmxpcFk7CisgICAgYm9vbCBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGE7CisgICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVy
c2lvbjsKKyAgICBib29sIG1fY29udGV4dExvc3Q7CisgICAgTG9zdENvbnRleHRNb2RlIG1fY29u
dGV4dExvc3RNb2RlOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmli
dXRlczsKKyAgICAKKyAgICBib29sIG1fbGF5ZXJDbGVhcmVkOworICAgIEdDM0RmbG9hdCBtX2Ns
ZWFyQ29sb3JbNF07CisgICAgYm9vbCBtX3NjaXNzb3JFbmFibGVkOworICAgIEdDM0RmbG9hdCBt
X2NsZWFyRGVwdGg7CisgICAgR0MzRGludCBtX2NsZWFyU3RlbmNpbDsKKyAgICBHQzNEYm9vbGVh
biBtX2NvbG9yTWFza1s0XTsKKyAgICBHQzNEYm9vbGVhbiBtX2RlcHRoTWFzazsKKyAgICAKKyAg
ICBib29sIG1fc3RlbmNpbEVuYWJsZWQ7CisgICAgR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywgbV9z
dGVuY2lsTWFza0JhY2s7CisgICAgR0MzRGludCBtX3N0ZW5jaWxGdW5jUmVmLCBtX3N0ZW5jaWxG
dW5jUmVmQmFjazsgLy8gTm90ZSB0aGF0IHRoZXNlIGFyZSB0aGUgdXNlciBzcGVjaWZpZWQgdmFs
dWVzLCBub3QgdGhlIGludGVybmFsIGNsYW1wZWQgdmFsdWUuCisgICAgR0MzRHVpbnQgbV9zdGVu
Y2lsRnVuY01hc2ssIG1fc3RlbmNpbEZ1bmNNYXNrQmFjazsKKyAgICAKKyAgICBib29sIG1faXNH
TEVTMkNvbXBsaWFudDsKKyAgICBib29sIG1faXNHTEVTMk5QT1RTdHJpY3Q7CisgICAgYm9vbCBt
X2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7CisgICAgYm9vbCBtX2lzUmVz
b3VyY2VTYWZlOworICAgIGJvb2wgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKKyAgICBib29s
IG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkOworICAgIAorICAgIGJvb2wgbV9zeW50aGVzaXpl
ZEVycm9yc1RvQ29uc29sZTsKKyAgICBpbnQgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQ7
CisgICAgCisgICAgLy8gQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgY2FuIGJlIGNyZWF0ZWQgaW4g
YSBzdGF0ZSB3aGVyZSBpdCBhcHBlYXJzIGFzCisgICAgLy8gYSB2YWxpZCBhbmQgYWN0aXZlIGNv
bnRleHQsIGJ1dCB3aWxsIG5vdCBleGVjdXRlIGFueSBpbXBvcnRhbnQgb3BlcmF0aW9ucworICAg
IC8vIHVudGlsIGl0cyBsb2FkIHBvbGljeSBpcyBjb21wbGV0ZWx5IHJlc29sdmVkLgorICAgIGJv
b2wgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uOworICAgIGJvb2wgbV9oYXNSZXF1ZXN0ZWRQ
b2xpY3lSZXNvbHV0aW9uOworICAgIGJvb2wgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpOworICAg
IAorICAgIC8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVjdHMuCisgICAgc3RkOjp1bmlxdWVfcHRy
PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRleHR1cmVMT0Q+IG1fZXh0U2hhZGVy
VGV4dHVyZUxPRDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZsb2F0PiBtX29lc1Rl
eHR1cmVGbG9hdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZsb2F0TGluZWFyPiBt
X29lc1RleHR1cmVGbG9hdExpbmVhcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUhh
bGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNU
ZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXI7CisgICAg
c3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+IG1fb2VzU3RhbmRhcmREZXJp
dmF0aXZlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVmVydGV4QXJyYXlPYmplY3Q+IG1fb2Vz
VmVydGV4QXJyYXlPYmplY3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9FU0VsZW1lbnRJbmRleFVp
bnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xMb3Nl
Q29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERl
YnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJlckluZm87CisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFkZXJzOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDPiBtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVBVEM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJU
Qz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVyZT4gbV93ZWJnbERlcHRoVGV4dHVy
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVmZmVycz4gbV93ZWJnbERyYXdCdWZm
ZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3RhbmNlZEFycmF5cz4gbV9hbmdsZUlu
c3RhbmNlZEFycmF5czsKKyAgICAKKyAgICAvLyBIZWxwZXJzIGZvciBnZXRQYXJhbWV0ZXIgYW5k
IG90aGVycworICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtKTsK
KyAgICBXZWJHTEdldEluZm8gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAg
ICBXZWJHTEdldEluZm8gZ2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0pOworICAgIFdlYkdMR2V0
SW5mbyBnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihHQzNEZW51bSk7CisgICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMRmxv
YXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CisgICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMSW50
QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0pOworICAgIAorICAgIC8vIENsZWFyIHRoZSBiYWNrYnVm
ZmVyIGlmIGl0IHdhcyBjb21wb3NpdGVkIHNpbmNlIHRoZSBsYXN0IG9wZXJhdGlvbi4KKyAgICAv
LyBjbGVhck1hc2sgaXMgc2V0IHRvIHRoZSBiaXRmaWVsZCBvZiBhbnkgY2xlYXIgdGhhdCB3b3Vs
ZCBoYXBwZW4gYW55d2F5IGF0IHRoaXMgdGltZQorICAgIC8vIGFuZCB0aGUgZnVuY3Rpb24gcmV0
dXJucyB0cnVlIGlmIHRoYXQgY2xlYXIgaXMgbm93IHVubmVjZXNzYXJ5LgorICAgIGJvb2wgY2xl
YXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZpZWxkIGNsZWFyTWFzayA9IDApOworICAgIAorICAgIC8v
IEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1lYnVmZmVyIG1h
eSBkZXN0cm95LgorICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIAorICAg
IHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleEltYWdlMkRJbXBsKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleFN1Yklt
YWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2Uq
LCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAKKyAgICB2b2lkIGNoZWNr
VGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7CisgICAgCisgICAgdm9pZCBj
cmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIGNvcHlUZXh7U3VifUltYWdlLCBjaGVjayB3aGV0aGVyIHRoZSBpbnRlcm5hbGZv
cm1hdAorICAgIC8vIGFuZCB0aGUgY29sb3IgYnVmZmVyIGZvcm1hdCBvZiB0aGUgY3VycmVudCBi
b3VuZCBmcmFtZWJ1ZmZlciBjb21iaW5hdGlvbgorICAgIC8vIGlzIHZhbGlkLgorICAgIGJvb2wg
aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChHQzNEZW51bSB0
ZXhJbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpOwor
ICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVy
J3MgY29sb3IgYnVmZmVyIGZvcm1hdC4KKyAgICBHQzNEZW51bSBnZXRCb3VuZEZyYW1lYnVmZmVy
Q29sb3JGb3JtYXQoKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBi
b3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgorICAgIGludCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lk
dGgoKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFt
ZWJ1ZmZlcidzIGhlaWdodC4KKyAgICBpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpOwor
ICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2ZXJpZnkgbGltaXRzIG9uIHRoZSBsZW5n
dGggb2YgdW5pZm9ybSBhbmQgYXR0cmlidXRlIGxvY2F0aW9ucy4KKyAgICBib29sIHZhbGlkYXRl
TG9jYXRpb25MZW5ndGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmKTsK
KyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgc2l6ZSBpcyBub24tbmVn
YXRpdmUuCisgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVybiBmYWxzZSBmb3IgbmVn
YXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgorICAgIGJvb2wgdmFsaWRhdGVT
aXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpOworICAg
IAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBhbGwgY2hhcmFjdGVycyBpbiB0
aGUgc3RyaW5nIGJlbG9uZyB0byB0aGUKKyAgICAvLyBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBp
biBHTFNMIEVTIDEuMCBzcGVjIHNlY3Rpb24gMy4xLgorICAgIGJvb2wgdmFsaWRhdGVTdHJpbmco
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmKTsKKyAgICAKKyAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGFyZ2V0IGFuZCB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0
YXJnZXQuCisgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3JzIGFuZCByZXR1cm4gMCBpZiB0YXJnZXQg
aXMgaW52YWxpZCBvciB0ZXh0dXJlIGJvdW5kIGlzCisgICAgLy8gbnVsbC4gT3RoZXJ3aXNlLCBy
ZXR1cm4gdGhlIHRleHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KKyAgICBXZWJHTFRleHR1cmUq
IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKTsKKyAgICAKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgZm9ybWF0L3R5cGUgZm9yIGZ1bmN0aW9ucyB7Y29w
eX1UZXh7U3VifUltYWdlLgorICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBm
YWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5j
Rm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZlbCk7CisgICAgCisgICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFn
ZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwg
aXMgaW52YWxpZC4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKKyAgICAKKyAgICBl
bnVtIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIHsKKyAgICAgICAgTm90VGV4U3ViSW1h
Z2UyRCwKKyAgICAgICAgVGV4U3ViSW1hZ2UyRCwKKyAgICB9OworICAgIAorICAgIGVudW0gVGV4
RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHsKKyAgICAgICAgU291cmNlQXJyYXlCdWZmZXJWaWV3
LAorICAgICAgICBTb3VyY2VJbWFnZURhdGEsCisgICAgICAgIFNvdXJjZUhUTUxJbWFnZUVsZW1l
bnQsCisgICAgICAgIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LAorICAgICAgICBTb3VyY2VIVE1M
VmlkZW9FbGVtZW50LAorICAgIH07CisgICAgCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0
ZXh7U3VifUltYWdlMkQgdG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3Rh
cmdldC93aWR0aC9oZWlnaHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCisgICAg
Ly8gT3RoZXJ3aXNlLCBpdCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVy
IHdvcmsuCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VU
eXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsCisgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0KTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sg
aW5wdXQgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCisgICAg
Ly8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJl
IGludmFsaWQuCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsCisg
ICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCisgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSk7CisgICAgCisgICAgZW51bSBOdWxsRGlzcG9zaXRpb24geworICAgICAgICBOdWxsQWxsb3dl
ZCwKKyAgICAgICAgTnVsbE5vdEFsbG93ZWQKKyAgICB9OworICAgIAorICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKKyAgICAv
LyBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3IgdGhl
IHRleEltYWdlIGNhbGwuCisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZh
bHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNE
YXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsCisgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAg
ICBOdWxsRGlzcG9zaXRpb24pOworICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxp
ZGF0ZSBhIGdpdmVuIHRleHR1cmUgZm9ybWF0IGlzIHNldHRhYmxlIGFzIGluCisgICAgLy8geW91
IGNhbiBzdXBwbHkgZGF0YSB0byB0ZXhJbWFnZTJELCBvciBjYWxsIHRleEltYWdlMkQsIGNvcHlU
ZXhJbWFnZTJEIGFuZAorICAgIC8vIGNvcHlUZXhTdWJJbWFnZTJELgorICAgIC8vIEdlbmVyYXRl
cyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGUgZm9ybWF0IGlzIG5vdCBzZXR0YWJs
ZS4KKyAgICBib29sIHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBmb3JtYXQpOworICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0
byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1cmUgZGF0YSBpcyBjb3JyZWN0IHNpemUKKyAgICAv
LyBmb3IgdGhlIGdpdmVuIGZvcm1hdCBhbmQgZGltZW5zaW9ucy4KKyAgICBib29sIHZhbGlkYXRl
Q29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gZm9yIHZhbGlkYXRpbmcgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdHMuCisgICAgYm9vbCB2
YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KTsKKyAgICAKKyAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRpbWVuc2lv
bnMgYXJlIHZhbGlkIGZvcgorICAgIC8vIHRoZSBnaXZlbiBmb3JtYXQuCisgICAgYm9vbCB2YWxp
ZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKKyAg
ICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4U3Vi
RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRl
eHR1cmUqKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgbW9kZSBm
b3IgZHJhd3tBcnJheXMvRWxlbWVudHN9LgorICAgIGJvb2wgdmFsaWRhdGVEcmF3TW9kZShjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdG8gdmFsaWRhdGUgaWYgZnJvbnQvYmFjayBzdGVuY2lsTWFzayBhbmQgc3RlbmNpbEZ1
bmMgc2V0dGluZ3MgYXJlIHRoZSBzYW1lLgorICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsU2V0dGlu
Z3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgc3RlbmNpbCBmdW5jLgorICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVu
Yyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKyAgICAKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gZm9yIHRleFBhcmFtZXRlcmYgYW5kIHRleFBhcmFtZXRlcmkuCisgICAgdm9p
ZCB0ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0
IHBhcmFtaSwgR0MzRGludCBwYXJhbWYsIGJvb2wgaXNGbG9hdCk7CisgICAgCisgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHByaW50IEdMIGVycm9ycyB0byBjb25zb2xlLgorICAgIHZvaWQgcHJp
bnRHTEVycm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcHJpbnRHTFdhcm5p
bmdUb0NvbnNvbGUoY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIHJlYXNvbik7Cisg
ICAgCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50IHdhcm5pbmdzIHRvIGNvbnNvbGUu
IEN1cnJlbnRseQorICAgIC8vIHVzZWQgb25seSB0byB3YXJuIGFib3V0IHVzZSBvZiBvYnNvbGV0
ZSBmdW5jdGlvbnMuCisgICAgdm9pZCBwcmludFdhcm5pbmdUb0NvbnNvbGUoY29uc3QgU3RyaW5n
Jik7CisgICAgCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFt
ZXRlcnMgZm9yIGZyYW1lYnVmZmVyIGZ1bmN0aW9ucy4KKyAgICAvLyBHZW5lcmF0ZSBHTCBlcnJv
ciBpZiBwYXJhbWV0ZXJzIGFyZSBpbGxlZ2FsLgorICAgIGJvb2wgdmFsaWRhdGVGcmFtZWJ1ZmZl
ckZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50KTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
dmFsaWRhdGUgYmxlbmQgZXF1YXRpb24gbW9kZS4KKyAgICBib29sIHZhbGlkYXRlQmxlbmRFcXVh
dGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKyAgICAKKyAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0b3JzLgorICAgIGJvb2wg
dmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gc3JjLCBHQzNEZW51bSBkc3QpOworICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2
YWxpZGF0ZSBhIEdMIGNhcGFiaWxpdHkuCisgICAgYm9vbCB2YWxpZGF0ZUNhcGFiaWxpdHkoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CisgICAgCisgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIHVuaWZvcm0gZnVuY3Rpb25z
LgorICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgRmxvYXQzMkFycmF5KiwgR0MzRHNp
emVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBJbnQzMkFycmF5Kiwg
R0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCB2b2lkKiwg
R0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKKyAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJp
eFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVp
IG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBtb2QpOworICAgIAorICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJEYXRh
LgorICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAw
IGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVm
ZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHVzYWdlKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRl
eHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkgYW5kIHdvdWxkbid0IHRh
aW50IE9yaWdpbi4KKyAgICBib29sIHZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAg
CisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJl
IGNhbnZhcyBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgorICAgIGJvb2wgdmFs
aWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52
YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIAorI2lmIEVOQUJMRShWSURFTykKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlk
ZW8gaXMgcmVhZHkgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1M
VmlkZW9FbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCos
IEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgorICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbnMg
Zm9yIHZlcnRleEF0dHJpYk5me3Z9LgorICAgIHZvaWQgdmVydGV4QXR0cmliZkltcGwoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6
ZSwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KTsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGlu
ZGV4LCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKKyAgICB2b2lkIHZl
cnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOworICAgIAor
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgZGVsZXRlKiAoZGVsZXRlQnVmZmVyLCBkZWxldGVQ
cm9ncmFtLCBldGMpIGZ1bmN0aW9ucy4KKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNo
b3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCisgICAgYm9vbCBkZWxldGVP
YmplY3QoV2ViR0xPYmplY3QqKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJp
bmQqIChiaW5kQnVmZmVyLCBiaW5kVGV4dHVyZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KKyAgICAv
LyBJZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8g
dHJ1ZSB1cG9uIHJldHVybi4KKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCBy
ZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCisgICAgYm9vbCBjaGVja09iamVjdFRv
QmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVs
ZXRlZCk7CisgICAgCisgICAgLy8gSGVscGVycyBmb3Igc2ltdWxhdGluZyB2ZXJ0ZXhBdHRyaWIw
CisgICAgdm9pZCBpbml0VmVydGV4QXR0cmliMCgpOworICAgIGJvb2wgc2ltdWxhdGVWZXJ0ZXhB
dHRyaWIwKEdDM0RzaXplaSBudW1WZXJ0ZXgpOworICAgIHZvaWQgcmVzdG9yZVN0YXRlc0FmdGVy
VmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICAKKyAgICB2b2lkIGRpc3BhdGNoQ29udGV4
dExvc3RFdmVudCgpOworICAgIC8vIEhlbHBlciBmb3IgcmVzdG9yYXRpb24gYWZ0ZXIgY29udGV4
dCBsb3N0LgorICAgIHZvaWQgbWF5YmVSZXN0b3JlQ29udGV4dCgpOworICAgIAorICAgIC8vIERl
dGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxlZ2VkIGNvZGUgaW4gdGhlIGJyb3dzZXIs
IGZvciBleGFtcGxlLAorICAgIC8vIGEgU2FmYXJpIG9yIENocm9tZSBleHRlbnNpb24uCisgICAg
Ym9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3Q7CisgICAgCisgICAgZW51bSBD
b25zb2xlRGlzcGxheVByZWZlcmVuY2UgeworICAgICAgICBEaXNwbGF5SW5Db25zb2xlLAorICAg
ICAgICBEb250RGlzcGxheUluQ29uc29sZQorICAgIH07CisgICAgCisgICAgLy8gV3JhcHBlciBm
b3IgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yIHRoYXQgc2VuZHMgYSBtZXNz
YWdlCisgICAgLy8gdG8gdGhlIEphdmFTY3JpcHQgY29uc29sZS4KKyAgICB2b2lkIHN5bnRoZXNp
emVHTEVycm9yKEdDM0RlbnVtLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIq
IGRlc2NyaXB0aW9uLCBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgPSBEaXNwbGF5SW5Db25zb2xl
KTsKKyAgICAKKyAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBjb25zdDsK
KyAgICAKKyAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBzdGVuY2lsIHRlc3QgYmFzZWQgb24gdXNl
ciBzZXR0aW5nIGFuZAorICAgIC8vIHdoZXRoZXIgdGhlIGN1cnJlbnQgRkJPIGhhcyBhIHN0ZW5j
aWwgYnVmZmVyLgorICAgIHZvaWQgYXBwbHlTdGVuY2lsVGVzdCgpOworICAgIAorICAgIC8vIEhl
bHBlciBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEgY2FwYWJpbGl0eS4KKyAgICB2b2lkIGVu
YWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5LCBib29sIGVuYWJsZSk7CisgICAgCisg
ICAgLy8gQ2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMu
CisgICAgSW50U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworICAgIAorICAgIC8vIEZpcnN0IHRp
bWUgY2FsbGVkLCBpZiBFWFRfZHJhd19idWZmZXJzIGlzIHN1cHBvcnRlZCwgcXVlcnkgdGhlIHZh
bHVlOyBvdGhlcndpc2UgcmV0dXJuIDAuCisgICAgLy8gTGF0ZXIsIHJldHVybiB0aGUgY2FjaGVk
IHZhbHVlLgorICAgIEdDM0RpbnQgZ2V0TWF4RHJhd0J1ZmZlcnMoKTsKKyAgICBHQzNEaW50IGdl
dE1heENvbG9yQXR0YWNobWVudHMoKTsKKyAgICAKKyAgICB2b2lkIHNldEJhY2tEcmF3QnVmZmVy
KEdDM0RlbnVtKTsKKyAgICAKKyAgICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsK
KyAgICB2b2lkIHJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKCk7CisgICAgCisgICAgLy8gQ2hlY2sg
aWYgRVhUX2RyYXdfYnVmZmVycyBleHRlbnNpb24gaXMgc3VwcG9ydGVkIGFuZCBpZiBpdCBzYXRp
c2ZpZXMgdGhlIFdlYkdMIHJlcXVpcmVtZW50cy4KKyAgICBib29sIHN1cHBvcnRzRHJhd0J1ZmZl
cnMoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjY5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwordHlwZWRl
ZiB1bnNpZ25lZCBsb25nICBHTGVudW07Cit0eXBlZGVmIGJvb2xlYW4gICAgICAgIEdMYm9vbGVh
bjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0xiaXRmaWVsZDsKK3R5cGVkZWYgYnl0ZSAgICAg
ICAgICAgR0xieXRlOyAgICAgICAgIC8qICdieXRlJyBzaG91bGQgYmUgYSBzaWduZWQgOCBiaXQg
dHlwZS4gKi8KK3R5cGVkZWYgc2hvcnQgICAgICAgICAgR0xzaG9ydDsKK3R5cGVkZWYgbG9uZyAg
ICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgIEdMc2l6ZWk7Cit0eXBlZGVm
IGxvbmcgbG9uZyAgICAgIEdMaW50cHRyOwordHlwZWRlZiBsb25nIGxvbmcgICAgICBHTHNpemVp
cHRyOwordHlwZWRlZiBvY3RldCAgICAgICAgICBHTHVieXRlOyAgICAgICAgLyogJ29jdGV0JyBz
aG91bGQgYmUgYW4gdW5zaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hv
cnQgR0x1c2hvcnQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMdWludDsKK3R5cGVkZWYgdW5y
ZXN0cmljdGVkIGZsb2F0IEdMZmxvYXQ7Cit0eXBlZGVmIHVucmVzdHJpY3RlZCBmbG9hdCBHTGNs
YW1wZjsKKworWworICAgIENvbmRpdGlvbmFsPVdFQkdMLAorICAgIEpTQ3VzdG9tTWFya0Z1bmN0
aW9uLAorICAgIERvTm90Q2hlY2tDb25zdGFudHMsCitdIGludGVyZmFjZSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CisKKy8qIENsZWFyQnVmZmVy
TWFzayAqLworY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4
MDAwMDAxMDA7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgID0g
MHgwMDAwMDQwMDsKK2NvbnN0IEdMZW51bSBDT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAg
PSAweDAwMDA0MDAwOworCisvKiBCZWdpbk1vZGUgKi8KK2NvbnN0IEdMZW51bSBQT0lOVFMgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA7Citjb25zdCBHTGVudW0gTElORVMgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwMDAxOworY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDAwMjsKK2NvbnN0IEdMZW51bSBMSU5FX1NUUklQICAgICAg
ICAgICAgICAgICAgICAgPSAweDAwMDM7Citjb25zdCBHTGVudW0gVFJJQU5HTEVTICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwMDA0OworY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAg
ICAgICAgICAgICA9IDB4MDAwNTsKK2NvbnN0IEdMZW51bSBUUklBTkdMRV9GQU4gICAgICAgICAg
ICAgICAgICAgPSAweDAwMDY7CisKKy8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4g
RVMyMCkgKi8KKy8qICAgICAgTkVWRVIgKi8KKy8qICAgICAgTEVTUyAqLworLyogICAgICBFUVVB
TCAqLworLyogICAgICBMRVFVQUwgKi8KKy8qICAgICAgR1JFQVRFUiAqLworLyogICAgICBOT1RF
UVVBTCAqLworLyogICAgICBHRVFVQUwgKi8KKy8qICAgICAgQUxXQVlTICovCisKKy8qIEJsZW5k
aW5nRmFjdG9yRGVzdCAqLworY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDA7Citjb25zdCBHTGVudW0gT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MTsKK2NvbnN0IEdMZW51bSBTUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDA7
Citjb25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOwor
Y29uc3QgR0xlbnVtIFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMjsKK2Nv
bnN0IEdMZW51bSBPTkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgPSAweDAzMDM7Citjb25z
dCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0OworY29uc3Qg
R0xlbnVtIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA9IDB4MDMwNTsKKworLyogQmxl
bmRpbmdGYWN0b3JTcmMgKi8KKy8qICAgICAgWkVSTyAqLworLyogICAgICBPTkUgKi8KK2NvbnN0
IEdMZW51bSBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDY7Citjb25zdCBH
TGVudW0gT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgID0gMHgwMzA3OworY29uc3QgR0xl
bnVtIFNSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAgICA9IDB4MDMwODsKKy8qICAgICAgU1JD
X0FMUEhBICovCisvKiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KKy8qICAgICAgRFNUX0FM
UEhBICovCisvKiAgICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVhdGlv
blNlcGFyYXRlICovCitjb25zdCBHTGVudW0gRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4MDA2OworY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OICAgICAgICAgICAgICAgICA9
IDB4ODAwOTsKK2NvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgPSAw
eDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworY29uc3QgR0xlbnVtIEJMRU5E
X0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA9IDB4ODgzRDsKKworLyogQmxlbmRTdWJ0cmFjdCAq
LworY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAgICAgICA9IDB4ODAwQTsK
K2NvbnN0IEdMZW51bSBGVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgPSAweDgwMEI7CisK
Ky8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLworY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9S
R0IgICAgICAgICAgICAgICAgICA9IDB4ODBDODsKK2NvbnN0IEdMZW51bSBCTEVORF9TUkNfUkdC
ICAgICAgICAgICAgICAgICAgPSAweDgwQzk7Citjb25zdCBHTGVudW0gQkxFTkRfRFNUX0FMUEhB
ICAgICAgICAgICAgICAgID0gMHg4MENBOworY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAg
ICAgICAgICAgICAgICA9IDB4ODBDQjsKK2NvbnN0IEdMZW51bSBDT05TVEFOVF9DT0xPUiAgICAg
ICAgICAgICAgICAgPSAweDgwMDE7Citjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5UX0NP
TE9SICAgICAgID0gMHg4MDAyOworY29uc3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAgICAg
ICAgICAgICA9IDB4ODAwMzsKK2NvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEg
ICAgICAgPSAweDgwMDQ7Citjb25zdCBHTGVudW0gQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAg
ICAgID0gMHg4MDA1OworCisvKiBCdWZmZXIgT2JqZWN0cyAqLworY29uc3QgR0xlbnVtIEFSUkFZ
X0JVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4ODg5MjsKK2NvbnN0IEdMZW51bSBFTEVNRU5U
X0FSUkFZX0JVRkZFUiAgICAgICAgICAgPSAweDg4OTM7Citjb25zdCBHTGVudW0gQVJSQVlfQlVG
RkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0OworY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkcgICA9IDB4ODg5NTsKKworY29uc3QgR0xlbnVtIFNUUkVBTV9EUkFX
ICAgICAgICAgICAgICAgICAgICA9IDB4ODhFMDsKK2NvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAg
ICAgICAgICAgICAgICAgICAgPSAweDg4RTQ7Citjb25zdCBHTGVudW0gRFlOQU1JQ19EUkFXICAg
ICAgICAgICAgICAgICAgID0gMHg4OEU4OworCitjb25zdCBHTGVudW0gQlVGRkVSX1NJWkUgICAg
ICAgICAgICAgICAgICAgID0gMHg4NzY0OworY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAg
ICAgICAgICAgICAgICA9IDB4ODc2NTsKKworY29uc3QgR0xlbnVtIENVUlJFTlRfVkVSVEVYX0FU
VFJJQiAgICAgICAgICA9IDB4ODYyNjsKKworLyogQ3VsbEZhY2VNb2RlICovCitjb25zdCBHTGVu
dW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OworY29uc3QgR0xlbnVt
IEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNTsKK2NvbnN0IEdMZW51bSBG
Uk9OVF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgPSAweDA0MDg7CisKKy8qIERlcHRoRnVuY3Rp
b24gKi8KKy8qICAgICAgTkVWRVIgKi8KKy8qICAgICAgTEVTUyAqLworLyogICAgICBFUVVBTCAq
LworLyogICAgICBMRVFVQUwgKi8KKy8qICAgICAgR1JFQVRFUiAqLworLyogICAgICBOT1RFUVVB
TCAqLworLyogICAgICBHRVFVQUwgKi8KKy8qICAgICAgQUxXQVlTICovCisKKy8qIEVuYWJsZUNh
cCAqLworY29uc3QgR0xlbnVtIFRFWFRVUkVfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4MERF
MTsKK2NvbnN0IEdMZW51bSBDVUxMX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgPSAweDBCNDQ7
Citjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkUyOwor
Y29uc3QgR0xlbnVtIERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJEMDsKK2Nv
bnN0IEdMZW51bSBTVEVOQ0lMX1RFU1QgICAgICAgICAgICAgICAgICAgPSAweDBCOTA7Citjb25z
dCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjcxOworY29uc3Qg
R0xlbnVtIFNDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA9IDB4MEMxMTsKK2NvbnN0IEdM
ZW51bSBQT0xZR09OX09GRlNFVF9GSUxMICAgICAgICAgICAgPSAweDgwMzc7Citjb25zdCBHTGVu
dW0gU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAgICAgID0gMHg4MDlFOworY29uc3QgR0xlbnVt
IFNBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICA9IDB4ODBBMDsKKworLyogRXJyb3JDb2Rl
ICovCitjb25zdCBHTGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKK2Nv
bnN0IEdMZW51bSBJTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgPSAweDA1MDA7Citjb25z
dCBHTGVudW0gSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgID0gMHgwNTAxOworY29uc3Qg
R0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsKK2NvbnN0IEdM
ZW51bSBPVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgPSAweDA1MDU7CisKKy8qIEZyb250
RmFjZURpcmVjdGlvbiAqLworY29uc3QgR0xlbnVtIENXICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDkwMDsKK2NvbnN0IEdMZW51bSBDQ1cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDA5MDE7CisKKy8qIEdldFBOYW1lICovCitjb25zdCBHTGVudW0gTElORV9XSURUSCAg
ICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOworY29uc3QgR0xlbnVtIEFMSUFTRURfUE9JTlRf
U0laRV9SQU5HRSAgICAgICA9IDB4ODQ2RDsKK2NvbnN0IEdMZW51bSBBTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0UgICAgICAgPSAweDg0NkU7Citjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAg
ICAgICAgICAgICAgID0gMHgwQjQ1OworY29uc3QgR0xlbnVtIEZST05UX0ZBQ0UgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEI0NjsKK2NvbnN0IEdMZW51bSBERVBUSF9SQU5HRSAgICAgICAgICAg
ICAgICAgICAgPSAweDBCNzA7Citjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAg
ICAgICAgID0gMHgwQjcyOworY29uc3QgR0xlbnVtIERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAg
ICAgICA9IDB4MEI3MzsKK2NvbnN0IEdMZW51bSBERVBUSF9GVU5DICAgICAgICAgICAgICAgICAg
ICAgPSAweDBCNzQ7Citjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAg
ID0gMHgwQjkxOworY29uc3QgR0xlbnVtIFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA9
IDB4MEI5MjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgPSAw
eDBCOTQ7Citjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgID0gMHgw
Qjk1OworY29uc3QgR0xlbnVtIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA9IDB4MEI5
NjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX1JFRiAgICAgICAgICAgICAgICAgICAgPSAweDBCOTc7
Citjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAgICAgID0gMHgwQjkzOwor
Y29uc3QgR0xlbnVtIFNURU5DSUxfV1JJVEVNQVNLICAgICAgICAgICAgICA9IDB4MEI5ODsKK2Nv
bnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAgICAgICAgPSAweDg4MDA7Citjb25z
dCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOworY29uc3Qg
R0xlbnVtIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICA9IDB4ODgwMjsKK2NvbnN0IEdM
ZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTICAgPSAweDg4MDM7Citjb25zdCBHTGVu
dW0gU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOworY29uc3QgR0xlbnVt
IFNURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICA9IDB4OENBNDsKK2NvbnN0IEdMZW51bSBT
VEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAgICAgICAgPSAweDhDQTU7Citjb25zdCBHTGVudW0gVklF
V1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOworY29uc3QgR0xlbnVtIFNDSVNT
T1JfQk9YICAgICAgICAgICAgICAgICAgICA9IDB4MEMxMDsKKy8qICAgICAgU0NJU1NPUl9URVNU
ICovCitjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQzIy
OworY29uc3QgR0xlbnVtIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEMyMzsK
K2NvbnN0IEdMZW51bSBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgPSAweDBDRjU7Citj
b25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAgID0gMHgwRDA1OworY29u
c3QgR0xlbnVtIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICA9IDB4MEQzMzsKK2NvbnN0
IEdMZW51bSBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgPSAweDBEM0E7Citjb25zdCBH
TGVudW0gU1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOworY29uc3QgR0xl
bnVtIFJFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MjsKK2NvbnN0IEdMZW51
bSBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTM7Citjb25zdCBHTGVudW0g
QkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OworY29uc3QgR0xlbnVtIEFM
UEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NTsKK2NvbnN0IEdMZW51bSBERVBU
SF9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTY7Citjb25zdCBHTGVudW0gU1RFTkNJ
TF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OworY29uc3QgR0xlbnVtIFBPTFlHT05f
T0ZGU0VUX1VOSVRTICAgICAgICAgICA9IDB4MkEwMDsKKy8qICAgICAgUE9MWUdPTl9PRkZTRVRf
RklMTCAqLworY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA9IDB4
ODAzODsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0JJTkRJTkdfMkQgICAgICAgICAgICAgPSAweDgw
Njk7Citjb25zdCBHTGVudW0gU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAgICAgID0gMHg4MEE4
OworY29uc3QgR0xlbnVtIFNBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsK
K2NvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0VfVkFMVUUgICAgICAgICAgPSAweDgwQUE7Citj
b25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgID0gMHg4MEFCOworCisv
KiBHZXRUZXh0dXJlUGFyYW1ldGVyICovCisvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqLwor
LyogICAgICBURVhUVVJFX01JTl9GSUxURVIgKi8KKy8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8K
Ky8qICAgICAgVEVYVFVSRV9XUkFQX1QgKi8KKworY29uc3QgR0xlbnVtIENPTVBSRVNTRURfVEVY
VFVSRV9GT1JNQVRTICAgICA9IDB4ODZBMzsKKworLyogSGludE1vZGUgKi8KK2NvbnN0IEdMZW51
bSBET05UX0NBUkUgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDA7Citjb25zdCBHTGVudW0g
RkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAxOworY29uc3QgR0xlbnVtIE5J
Q0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMjsKKworLyogSGludFRhcmdldCAq
LworY29uc3QgR0xlbnVtIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgPSAweDgxOTI7
CisKKy8qIERhdGFUeXBlICovCitjb25zdCBHTGVudW0gQllURSAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxNDAwOworY29uc3QgR0xlbnVtIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAg
ICAgICA9IDB4MTQwMTsKK2NvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDE0MDI7Citjb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAg
ID0gMHgxNDAzOworY29uc3QgR0xlbnVtIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MTQwNDsKK2NvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgPSAw
eDE0MDU7Citjb25zdCBHTGVudW0gRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgx
NDA2OworCisvKiBQaXhlbEZvcm1hdCAqLworY29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVCAg
ICAgICAgICAgICAgICA9IDB4MTkwMjsKK2NvbnN0IEdMZW51bSBBTFBIQSAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDE5MDY7Citjb25zdCBHTGVudW0gUkdCICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgxOTA3OworY29uc3QgR0xlbnVtIFJHQkEgICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MTkwODsKK2NvbnN0IEdMZW51bSBMVU1JTkFOQ0UgICAgICAgICAgICAgICAg
ICAgICAgPSAweDE5MDk7Citjb25zdCBHTGVudW0gTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAg
ICAgID0gMHgxOTBBOworCisvKiBQaXhlbFR5cGUgKi8KKy8qICAgICAgVU5TSUdORURfQllURSAq
LworY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICA9IDB4ODAzMzsK
K2NvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7Citj
b25zdCBHTGVudW0gVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgID0gMHg4MzYzOworCisv
KiBTaGFkZXJzICovCitjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAg
ICAgPSAweDhCMzA7Citjb25zdCBHTGVudW0gVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAg
ICAgPSAweDhCMzE7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAg
ICAgPSAweDg4Njk7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAg
ICAgPSAweDhERkI7Citjb25zdCBHTGVudW0gTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAg
ICAgPSAweDhERkM7Citjb25zdCBHTGVudW0gTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFMgPSAweDhCNEQ7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
ICAgPSAweDhCNEM7Citjb25zdCBHTGVudW0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAg
ICAgPSAweDg4NzI7Citjb25zdCBHTGVudW0gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyAg
ICAgPSAweDhERkQ7Citjb25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAg
ICAgPSAweDhCNEY7Citjb25zdCBHTGVudW0gREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAg
ICAgPSAweDhCODA7Citjb25zdCBHTGVudW0gTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAg
ICAgPSAweDhCODI7Citjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAg
ICAgPSAweDhCODM7Citjb25zdCBHTGVudW0gQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAg
ICAgPSAweDhCODU7Citjb25zdCBHTGVudW0gQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAg
ICAgPSAweDhCODY7Citjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAg
ICAgPSAweDhCODk7Citjb25zdCBHTGVudW0gU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAg
ICAgPSAweDhCOEM7Citjb25zdCBHTGVudW0gQ1VSUkVOVF9QUk9HUkFNICAgICAgICAgICAgICAg
ICAgPSAweDhCOEQ7CisKKy8qIFN0ZW5jaWxGdW5jdGlvbiAqLworY29uc3QgR0xlbnVtIE5FVkVS
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMDsKK2NvbnN0IEdMZW51bSBMRVNTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDE7Citjb25zdCBHTGVudW0gRVFVQUwgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAyOworY29uc3QgR0xlbnVtIExFUVVBTCAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMzsKK2NvbnN0IEdMZW51bSBHUkVBVEVSICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDAyMDQ7Citjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwMjA1OworY29uc3QgR0xlbnVtIEdFUVVBTCAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MDIwNjsKK2NvbnN0IEdMZW51bSBBTFdBWVMgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDAyMDc7CisKKy8qIFN0ZW5jaWxPcCAqLworLyogICAgICBaRVJPICov
Citjb25zdCBHTGVudW0gS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAwOwor
Y29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMTsKK2Nv
bnN0IEdMZW51bSBJTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDI7Citjb25z
dCBHTGVudW0gREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAzOworY29uc3Qg
R0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTUwQTsKK2NvbnN0IEdM
ZW51bSBJTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgPSAweDg1MDc7Citjb25zdCBHTGVu
dW0gREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0gMHg4NTA4OworCisvKiBTdHJpbmdO
YW1lICovCitjb25zdCBHTGVudW0gVkVORE9SICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgx
RjAwOworY29uc3QgR0xlbnVtIFJFTkRFUkVSICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYw
MTsKK2NvbnN0IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7
CisKKy8qIFRleHR1cmVNYWdGaWx0ZXIgKi8KK2NvbnN0IEdMZW51bSBORUFSRVNUICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDI2MDA7Citjb25zdCBHTGVudW0gTElORUFSICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgyNjAxOworCisvKiBUZXh0dXJlTWluRmlsdGVyICovCisvKiAgICAg
IE5FQVJFU1QgKi8KKy8qICAgICAgTElORUFSICovCitjb25zdCBHTGVudW0gTkVBUkVTVF9NSVBN
QVBfTkVBUkVTVCAgICAgICAgID0gMHgyNzAwOworY29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBf
TkVBUkVTVCAgICAgICAgICA9IDB4MjcwMTsKK2NvbnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9M
SU5FQVIgICAgICAgICAgPSAweDI3MDI7Citjb25zdCBHTGVudW0gTElORUFSX01JUE1BUF9MSU5F
QVIgICAgICAgICAgID0gMHgyNzAzOworCisvKiBUZXh0dXJlUGFyYW1ldGVyTmFtZSAqLworY29u
c3QgR0xlbnVtIFRFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKK2NvbnN0
IEdMZW51bSBURVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgPSAweDI4MDE7Citjb25zdCBH
TGVudW0gVEVYVFVSRV9XUkFQX1MgICAgICAgICAgICAgICAgID0gMHgyODAyOworY29uc3QgR0xl
bnVtIFRFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKKworLyogVGV4dHVy
ZVRhcmdldCAqLworLyogICAgICBURVhUVVJFXzJEICovCitjb25zdCBHTGVudW0gVEVYVFVSRSAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOworCitjb25zdCBHTGVudW0gVEVYVFVSRV9D
VUJFX01BUCAgICAgICAgICAgICAgID0gMHg4NTEzOworY29uc3QgR0xlbnVtIFRFWFRVUkVfQklO
RElOR19DVUJFX01BUCAgICAgICA9IDB4ODUxNDsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7Citjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YICAgID0gMHg4NTE2OworY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWSAgICA9IDB4ODUxNzsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1kgICAgPSAweDg1MTg7Citjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aICAgID0gMHg4NTE5OworY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWiAgICA9IDB4ODUxQTsKK2NvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpF
ICAgICAgPSAweDg1MUM7CisKKy8qIFRleHR1cmVVbml0ICovCitjb25zdCBHTGVudW0gVEVYVFVS
RTAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMwOworY29uc3QgR0xlbnVtIFRFWFRVUkUx
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMiAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzI7Citjb25zdCBHTGVudW0gVEVYVFVSRTMgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEMzOworY29uc3QgR0xlbnVtIFRFWFRVUkU0ICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKK2NvbnN0IEdMZW51bSBURVhUVVJFNSAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0QzU7Citjb25zdCBHTGVudW0gVEVYVFVSRTYgICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEM2OworY29uc3QgR0xlbnVtIFRFWFRVUkU3ICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODRDNzsKK2NvbnN0IEdMZW51bSBURVhUVVJFOCAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0Qzg7Citjb25zdCBHTGVudW0gVEVYVFVSRTkgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEM5OworY29uc3QgR0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRDQTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTEgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0Q0I7Citjb25zdCBHTGVudW0gVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NENDOworY29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODRDRDsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0Q0U7Citjb25zdCBHTGVudW0gVEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NENGOworY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
MDsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDE7
Citjb25zdCBHTGVudW0gVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQyOwor
Y29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMzsKK2Nv
bnN0IEdMZW51bSBURVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDQ7Citjb25z
dCBHTGVudW0gVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ1OworY29uc3Qg
R0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENjsKK2NvbnN0IEdM
ZW51bSBURVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDc7Citjb25zdCBHTGVu
dW0gVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ4OworY29uc3QgR0xlbnVt
IFRFWFRVUkUyNSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREOTsKK2NvbnN0IEdMZW51bSBU
RVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REE7Citjb25zdCBHTGVudW0gVEVY
VFVSRTI3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERCOworY29uc3QgR0xlbnVtIFRFWFRV
UkUyOCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREQzsKK2NvbnN0IEdMZW51bSBURVhUVVJF
MjkgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REQ7Citjb25zdCBHTGVudW0gVEVYVFVSRTMw
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERFOworY29uc3QgR0xlbnVtIFRFWFRVUkUzMSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKK2NvbnN0IEdMZW51bSBBQ1RJVkVfVEVYVFVS
RSAgICAgICAgICAgICAgICAgPSAweDg0RTA7CisKKy8qIFRleHR1cmVXcmFwTW9kZSAqLworY29u
c3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjkwMTsKK2NvbnN0
IEdMZW51bSBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgPSAweDgxMkY7Citjb25zdCBH
TGVudW0gTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgID0gMHg4MzcwOworCisvKiBVbmlm
b3JtIFR5cGVzICovCitjb25zdCBHTGVudW0gRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjUwOworY29uc3QgR0xlbnVtIEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1MTsKK2NvbnN0IEdMZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNTI7Citjb25zdCBHTGVudW0gSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjUzOworY29uc3QgR0xlbnVtIElOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
NDsKK2NvbnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7
Citjb25zdCBHTGVudW0gQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU2Owor
Y29uc3QgR0xlbnVtIEJPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NzsKK2Nv
bnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTg7Citjb25z
dCBHTGVudW0gQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU5OworY29uc3Qg
R0xlbnVtIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QTsKK2NvbnN0IEdM
ZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUI7Citjb25zdCBHTGVu
dW0gRkxPQVRfTUFUNCAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVDOworY29uc3QgR0xlbnVt
IFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1RTsKK2NvbnN0IEdMZW51bSBT
QU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgPSAweDhCNjA7CisKKy8qIFZlcnRleCBBcnJh
eXMgKi8KK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgID0g
MHg4NjIyOworY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAg
PSAweDg2MjM7Citjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAg
ICA9IDB4ODYyNDsKK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAg
ICAgID0gMHg4NjI1OworY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpF
RCAgICAgPSAweDg4NkE7Citjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVS
ICAgICAgICA9IDB4ODY0NTsKK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZF
Ul9CSU5ESU5HID0gMHg4ODlGOworCisvKiBTaGFkZXIgU291cmNlICovCitjb25zdCBHTGVudW0g
Q09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgID0gMHg4QjgxOworCisvKiBTaGFkZXIgUHJl
Y2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLworY29uc3QgR0xlbnVtIExPV19GTE9BVCAgICAgICAg
ICAgICAgICAgICAgICA9IDB4OERGMDsKK2NvbnN0IEdMZW51bSBNRURJVU1fRkxPQVQgICAgICAg
ICAgICAgICAgICAgPSAweDhERjE7Citjb25zdCBHTGVudW0gSElHSF9GTE9BVCAgICAgICAgICAg
ICAgICAgICAgID0gMHg4REYyOworY29uc3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4OERGMzsKK2NvbnN0IEdMZW51bSBNRURJVU1fSU5UICAgICAgICAgICAgICAg
ICAgICAgPSAweDhERjQ7Citjb25zdCBHTGVudW0gSElHSF9JTlQgICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4REY1OworCisvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCitjb25zdCBHTGVudW0g
RlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgID0gMHg4RDQwOworY29uc3QgR0xlbnVtIFJF
TkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MTsKKworY29uc3QgR0xlbnVtIFJH
QkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKK2NvbnN0IEdMZW51bSBSR0I1
X0ExICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwNTc7Citjb25zdCBHTGVudW0gUkdCNTY1
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RDYyOworY29uc3QgR0xlbnVtIERFUFRIX0NP
TVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0lO
REVYICAgICAgICAgICAgICAgICAgPSAweDE5MDE7Citjb25zdCBHTGVudW0gU1RFTkNJTF9JTkRF
WDggICAgICAgICAgICAgICAgID0gMHg4RDQ4OworY29uc3QgR0xlbnVtIERFUFRIX1NURU5DSUwg
ICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKKworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9X
SURUSCAgICAgICAgICAgICA9IDB4OEQ0MjsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfSEVJ
R0hUICAgICAgICAgICAgPSAweDhENDM7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVS
TkFMX0ZPUk1BVCAgID0gMHg4RDQ0OworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9SRURfU0la
RSAgICAgICAgICA9IDB4OEQ1MDsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfR1JFRU5fU0la
RSAgICAgICAgPSAweDhENTE7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVfU0laRSAg
ICAgICAgID0gMHg4RDUyOworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFICAg
ICAgICA9IDB4OEQ1MzsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAg
ICAgPSAweDhENTQ7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAg
ID0gMHg4RDU1OworCitjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
VFlQRSAgICAgICAgICAgPSAweDhDRDA7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgPSAweDhDRDE7Citjb25zdCBHTGVudW0gRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAweDhDRDI7Citjb25zdCBH
TGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgPSAweDhD
RDM7CisKK2NvbnN0IEdMZW51bSBDT0xPUl9BVFRBQ0hNRU5UMCAgICAgICAgICAgICAgPSAweDhD
RTA7Citjb25zdCBHTGVudW0gREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4RDAw
OworY29uc3QgR0xlbnVtIFNURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICA9IDB4OEQyMDsK
K2NvbnN0IEdMZW51bSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgPSAweDgyMUE7CisK
K2NvbnN0IEdMZW51bSBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworCitjb25z
dCBHTGVudW0gRlJBTUVCVUZGRVJfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhD
RDU7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAg
ICAgPSAweDhDRDY7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5H
X0FUVEFDSE1FTlQgPSAweDhDRDc7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9ESU1FTlNJT05TICAgICAgICAgPSAweDhDRDk7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAweDhDREQ7CisKK2NvbnN0IEdMZW51bSBG
UkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Citjb25zdCBHTGVudW0gUkVO
REVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4Q0E3OworY29uc3QgR0xlbnVtIE1BWF9S
RU5ERVJCVUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRFODsKKworY29uc3QgR0xlbnVtIElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUwNjsKKworLyogV2ViR0wtc3BlY2lmaWMg
ZW51bXMgKi8KK2NvbnN0IEdMZW51bSBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAgICAgICAg
ID0gMHg5MjQwOworY29uc3QgR0xlbnVtIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAg
ICAgPSAweDkyNDE7Citjb25zdCBHTGVudW0gQ09OVEVYVF9MT1NUX1dFQkdMICAgICAgICAgICAg
ICAgICA9IDB4OTI0MjsKK2NvbnN0IEdMZW51bSBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9O
X1dFQkdMID0gMHg5MjQzOworY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAg
ICAgICAgICAgPSAweDkyNDQ7CisKK3JlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdC
dWZmZXJXaWR0aDsKK3JlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJIZWln
aHQ7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtLCBHTHVpbnQgaW5kZXgsIERPTVN0cmluZyBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRCdWZmZXIoR0xlbnVtIHRhcmdldCwg
V2ViR0xCdWZmZXIgYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1l
YnVmZmVyIGZyYW1lYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIGJpbmRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xSZW5k
ZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdMZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVy
ZSB0ZXh0dXJlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZENvbG9y
KEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFs
cGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uKEdM
ZW51bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0
aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOworW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVuYyhHTGVudW0gc2ZhY3RvciwgR0xlbnVt
IGRmYWN0b3IpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVuY1Nl
cGFyYXRlKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xl
bnVtIGRzdEFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdM
ZW51bSB1c2FnZSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICBidWZmZXJEYXRhKEdMZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldz8gZGF0YSwg
R0xlbnVtIHVzYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBHTGVu
dW0gdXNhZ2UpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFycmF5
QnVmZmVyPyBkYXRhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBB
cnJheUJ1ZmZlclZpZXc/IGRhdGEpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVudW0gICAg
ICAgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0gdGFyZ2V0KTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZpZWxkIG1hc2spOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBn
cmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpOworW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoR0xjbGFtcGYgZGVwdGgpOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNpbChHTGludCBzKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBjb2xvck1hc2soR0xib29sZWFuIHJlZCwgR0xib29sZWFu
IGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFuIGFscGhhKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGNvbXBpbGVTaGFkZXIoV2ViR0xT
aGFkZXIgc2hhZGVyKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXBy
ZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBB
cnJheUJ1ZmZlclZpZXcgZGF0YSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3IGRhdGEpOworCitbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgY29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgY29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xCdWZm
ZXIgY3JlYXRlQnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTEZyYW1lYnVmZmVy
IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFByb2dyYW0g
Y3JlYXRlUHJvZ3JhbSgpOworW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xSZW5kZXJidWZmZXIg
Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIFdlYkdMU2hhZGVyIGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSBXZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVyZSgpOworCitbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2UoR0xlbnVtIG1vZGUpOworCitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyIGJ1ZmZlcik7Citb
U3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xG
cmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CitbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJl
bmRlcmJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlU2hh
ZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CisKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBkZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoTWFzayhHTGJvb2xlYW4gZmxhZyk7CitbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhSYW5nZShHTGNsYW1wZiB6TmVhciwgR0xj
bGFtcGYgekZhcik7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIFdlYkdMU2hhZGVyIHNo
YWRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGlzYWJsZShHTGVudW0g
Y2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOworW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0FycmF5cyhHTGVudW0gbW9k
ZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNp
emVpIGNvdW50LCBHTGVudW0gdHlwZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGVuYWJsZShHTGVudW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdMdWludCBpbmRleCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmlu
aXNoKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVu
ZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOworW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJn
ZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlLCBHTGludCBsZXZlbCk7CitbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBnZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KTsKKworW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0
aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgpOworW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlVW5p
Zm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsKKworW1N0cmljdFR5cGVD
aGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJz
KFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gR0xpbnQgICAg
ICAgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBET01TdHJpbmcgbmFt
ZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdldEJ1ZmZlclBhcmFtZXRl
cihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSBX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisKK1tTdHJpY3RU
eXBlQ2hlY2tpbmddIEdMZW51bSBnZXRFcnJvcigpOworCisvLyBvYmplY3QgZ2V0RXh0ZW5zaW9u
KERPTVN0cmluZyBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdldEV4
dGVuc2lvbihET01TdHJpbmcgbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwg
UmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOworW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRQYXJhbWV0ZXIoR0xl
bnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSBhbnkgZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0xlbnVtIHBu
YW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVs
bCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9n
cmFtIHByb2dyYW0pOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIGFueSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBu
YW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkg
Z2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyIHNoYWRlciwgR0xlbnVtIHBuYW1lKTsKKwor
W1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlz
ZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNo
YWRlcik7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdMZW51bSBzaGFkZXJ0
eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0
UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgICAg
Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7
CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0
VGV4UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7CisKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VW5pZm9ybShXZWJHTFBy
b2dyYW0gcHJvZ3JhbSwgV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24pOworCitbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVu
aWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOworCitb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFZlcnRl
eEF0dHJpYihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tp
bmddIEdMc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdMdWludCBpbmRleCwgR0xlbnVt
IHBuYW1lKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIG1vZGUpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAg
IGlzQnVmZmVyKFdlYkdMQnVmZmVyIGJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJv
b2xlYW4gICAgaXNDb250ZXh0TG9zdCgpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFu
ICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVh
biAgICBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOworW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3Jh
bSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNSZW5kZXJidWZmZXIoV2Vi
R0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9v
bGVhbiAgICBpc1NoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOworW1N0cmljdFR5cGVDaGVja2lu
Z10gR0xib29sZWFuICAgIGlzVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CitbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgbGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOworW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgbGlua1Byb2dy
YW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHBpeGVsU3RvcmVpKEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxv
YXQgdW5pdHMpOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3IHBp
eGVscyk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZW5kZXJidWZm
ZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IHNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lzc29yKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHNoYWRlclNvdXJjZShXZWJHTFNoYWRlciBzaGFkZXIs
IERPTVN0cmluZyBzdHJpbmcpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0
ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKTsKK1tTdHJpY3RU
eXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNl
LCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7CitbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE1hc2soR0x1aW50IG1hc2spOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdM
dWludCBtYXNrKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3Ao
R0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3BTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVt
IGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKKworW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
LCBHTGZsb2F0IHBhcmFtKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQ
YXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworCisv
LyBTdXBwb3J0ZWQgZm9ybXM6CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorR0xpbnQg
Ym9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhl
bHMpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
dGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9y
bWF0LAorR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdl
MkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKK0dM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFnZSk7CitbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCitHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ/IGNhbnZhcyk7CisjaWYg
ZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAorR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/IHZpZGVvKTsKKyNlbmRpZgorCitbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAor
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKK0dMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAorR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCitHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ/IGNhbnZhcyk7CisjaWYgZGVm
aW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKK0dMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRlbyk7CisjZW5kaWYKKworW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIEdMaW50IHgpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgdW5pZm9ybTFpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJB
cnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtMmYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVu
aWZvcm0yZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmkoV2Vi
R0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpOworW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2YoV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOworW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmdihXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOworW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zaShXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7CitbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2l2KFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOworW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00
ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGkoV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcp
OworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5p
Zm9ybTRpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKwor
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9y
bU1hdHJpeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5z
cG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSBhcnJheSk7Citb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3Jt
TWF0cml4NGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNw
b3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZhbGlk
YXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGlu
ZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHZlcnRleEF0dHJpYjJmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7Citb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdMdWludCBp
bmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdM
ZmxvYXQgeik7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmli
M2Z2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1
ZXMpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
dmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5keCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUs
IEdMYm9vbGVhbiBub3JtYWxpemVkLAorR0xzaXplaSBzdHJpZGUsIEdMaW50cHRyIG9mZnNldCk7
CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2aWV3cG9ydChHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Cit9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAkocmV2aXNpb24gMTc2OTk0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxNiArMzAsMTYgQEAKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogCiAjaW5j
bHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xTaGFkZXI6OmNyZWF0
ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgR0MzRGVudW0gdHlwZSkKK1Bhc3NSZWZQdHI8
V2ViR0xTaGFkZXI+IFdlYkdMU2hhZGVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY3R4LCBHQzNEZW51bSB0eXBlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xT
aGFkZXIoY3R4LCB0eXBlKSk7CiB9CiAKLVdlYkdMU2hhZGVyOjpXZWJHTFNoYWRlcihXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGN0eCwgR0MzRGVudW0gdHlwZSkKK1dlYkdMU2hhZGVyOjpXZWJHTFNo
YWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgsIEdDM0RlbnVtIHR5cGUpCiAgICAg
OiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fc291
cmNlKCIiKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCShy
ZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIFdlYkdMU2hhZGVyIGZp
bmFsIDogcHVibGljIFdlYkdMU2gKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTFNoYWRlcigp
OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHQqLCBHQzNEZW51bSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xTaGFk
ZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiwgR0MzRGVudW0pOwogCiAgICAg
R0MzRGVudW0gZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGNvbnN0IFN0
cmluZyYgZ2V0U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KQEAgLTQ3LDcgKzQ3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmFsaWQoYm9vbCB2YWxpZCkgeyBtX2lzVmFsaWQg
PSB2YWxpZDsgfQogCiBwcml2YXRlOgotICAgIFdlYkdMU2hhZGVyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCosIEdDM0RlbnVtKTsKKyAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiwgR0MzRGVudW0pOwogCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3Jh
cGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAkocmV2
aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJX
ZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xTaGFyZWRPYmpl
Y3Q6OldlYkdMU2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dl
YkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xPYmplY3QoY29udGV4dCksCiAgICAgICBtX2NvbnRl
eHRHcm91cChjb250ZXh0LT5jb250ZXh0R3JvdXAoKSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaAkocmV2aXNpb24gMTc2OTk0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwogY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7Ci1jbGFzcyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCiAvLyBX
ZWJHTFNoYXJlZE9iamVjdCB0aGUgYmFzZSBjbGFzcyBmb3Igb2JqZWN0cyB0aGF0IGNhbiBiZSBz
aGFyZWQgYnkgbXVsdGlwbGUKIC8vIFdlYkdMUmVuZGVyaW5nQ29udGV4dHMuCkBAIC00OCw3ICs0
OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCi0gICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdy
b3VwKiBjb250ZXh0R3JvdXAsIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dCopIGNvbnN0IG92
ZXJyaWRlCisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3Vw
KiBjb250ZXh0R3JvdXAsIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKSBjb25zdCBv
dmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbnRleHRHcm91cCA9PSBtX2NvbnRleHRH
cm91cDsKICAgICB9CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFjaENv
bnRleHRHcm91cCgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xTaGFyZWRPYmplY3QoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CisgICAgV2ViR0xTaGFyZWRPYmplY3QoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSopOwogCiAgICAgdmlydHVhbCBib29sIGhhc0dyb3VwT3JDb250ZXh0KCkgY29u
c3Qgb3ZlcnJpZGUKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFRleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVGV4dHVyZS5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICszMSwxNiBA
QAogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTEZyYW1l
YnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAi
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBh
c3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFRleHR1cmU6OmNyZWF0ZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGN0eCkKK1Bhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFRleHR1cmU6OmNy
ZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCiB7CiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXZWJHTFRleHR1cmUoY3R4KSk7CiB9CiAKLVdlYkdMVGV4dHVyZTo6V2ViR0xUZXh0
dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQorV2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1
cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmpl
Y3QoY3R4KQogICAgICwgbV90YXJnZXQoMCkKICAgICAsIG1fbWluRmlsdGVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRleHR1cmUuaAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+V2ViR0xUZXh0dXJlKCk7CiAKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQq
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2b2lkIHNldFRhcmdldChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbWF4TGV2ZWwpOwogICAgIHZvaWQgc2V0UGFyYW1ldGVyaShHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCBwYXJhbSk7CkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
R0MzRGludCBjb21wdXRlTGV2ZWxDb3VudChHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpOwogCiBwcml2YXRlOgotICAgIFdlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQq
KTsKKyAgICBXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9y
bTNET2JqZWN0KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAJKHJldmlzaW9uIDE3
Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNiArMzAsMTYgQEAKICNpbmNsdWRlICJX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCiAKICNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIK
LSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpjcmVh
dGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIFZhb1R5cGUgdHlwZSkKK1Bhc3NSZWZQdHI8
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3Jl
YXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCwgVmFvVHlwZSB0eXBlKQogewogICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhjdHgsIHR5cGUp
KTsKIH0KIAotV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgVmFvVHlwZSB0eXBlKQorV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiBjdHgsIFZhb1R5cGUgdHlwZSkKICAgICA6IFdlYkdMQ29udGV4dE9iamVj
dChjdHgpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1faGFzRXZlckJlZW5Cb3VuZChmYWxz
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTLmgJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUygpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUz4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFZhb1R5cGUpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IGNyZWF0ZShXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlKiwgVmFvVHlwZSk7CiAgICAgCiAgICAgLy8gQ2FjaGVkIHZh
bHVlcyBmb3IgdmVydGV4IGF0dHJpYiByYW5nZSBjaGVja3MKICAgICBzdHJ1Y3QgVmVydGV4QXR0
cmliU3RhdGUgewpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKTsKIAogcHJpdmF0
ZToKLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dCos
IFZhb1R5cGUpOworICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSosIFZhb1R5cGUpOwogCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdElt
cGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244537</attachid>
            <date>2015-01-13 13:01:11 -0800</date>
            <delta_ts>2015-01-13 13:44:52 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>1575736</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAxNS0wMS0xMyAgUm9nZXIg
Rm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkdMMjogU3VwcG9ydCB3
ZWJnbDIgY29udGV4dCBjcmVhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjQwOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUwMDIxNzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMg
Y292ZXJlZCBieSBleGlzdGluZyBLaHJvbm9zIHRlc3RzIGZvciBXZWJHTCAxLjAgY29uZm9ybWFu
Y2UuCisKKyAgICAgICAgQ3JlYXRlIGEgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSBjbGFzcyB0
aGF0IGV4dGVuZHMgdG8gYSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0IGFuZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LgorICAgICAgICBSZXBsYWNlIGFsbCBwcmV2aW91cyBpbnN0YW5jZXMgb2YgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IHVzYWdlcyB3aXRoIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Ug
dXNhZ2VzIGZvciBub3cuCisgICAgICAgIEFzIHRoZSBmaXJzdCBzdGVwLCB0aGUgV2ViR0wxIGFu
ZCBXZWJHTDIgY29udGV4dHMgd2lsbCBoYXZlIHRoZSBleGFjdCBzYW1lIGZ1bmN0aW9uYWxpdHku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5t
YWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1
c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3Vz
dG9tLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcDogQWRk
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXMz
ZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRUlu
c3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6
QU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
QU5HTEVJbnN0YW5jZWRBcnJheXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
Ojp0eXBlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVYVEJsZW5kTWluTWF4OjpFWFRCbGVuZE1pbk1heCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9FWFRGcmFnRGVwdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RVhURnJhZ0RlcHRo
OjpFWFRGcmFnRGVwdGgpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEZyYWdEZXB0aC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RVhUU2hhZGVyVGV4dHVyZUxPRDo6RVhUU2hhZGVyVGV4dHVyZUxPRCk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5oOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM6OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yyk6CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmg6
CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUc1JHQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
WFRzUkdCOjpFWFRzUkdCKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFRzUkdCLmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpPRVNFbGVtZW50SW5kZXhVaW50OjpPRVNFbGVtZW50SW5kZXhVaW50KToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50Lmg6CisgICAgICAgICogaHRtbC9jYW52
YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPRVNTdGFu
ZGFyZERlcml2YXRpdmVzOjpPRVNTdGFuZGFyZERlcml2YXRpdmVzKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUZsb2F0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1RleHR1cmVGbG9hdDo6
T0VTVGV4dHVyZUZsb2F0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQu
aDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6T0VTVGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRMaW5l
YXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVhci5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6T0VTVGV4dHVyZUhhbGZGbG9hdDo6T0VTVGV4dHVyZUhhbGZGbG9hdCk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5oOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcik6CisgICAg
ICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok9FU1ZlcnRleEFycmF5T2JqZWN0OjpPRVNWZXJ0ZXhBcnJheU9iamVjdCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcC4KKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oLgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsLgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaDogQWRkZWQuCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGw6IEFkZGVkLgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OldlYkdM
QnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0
ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUFZSVEMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4
dHVyZVBWUlRDOjpzdXBwb3J0ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMQ29udGV4dEdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdy
b3VwOjpnZXRBR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250
ZXh0R3JvdXA6OmFkZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3Jv
dXA6OnJlbW92ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6
Omxvc2VDb250ZXh0R3JvdXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdy
b3VwLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6V2ViR0xDb250ZXh0T2JqZWN0KToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6Y29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTERl
YnVnUmVuZGVyZXJJbmZvOjpXZWJHTERlYnVnUmVuZGVyZXJJbmZvKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xEZWJ1Z1NoYWRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEZWJ1Z1NoYWRl
cnM6OldlYkdMRGVidWdTaGFkZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlYnVn
U2hhZGVycy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMRGVwdGhUZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZSk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RHJhd0J1ZmZlcnM6OldlYkdMRHJhd0J1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xE
cmF3QnVmZmVyczo6c3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRHJhd0J1ZmZl
cnM6OnNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTERyYXdCdWZmZXJzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xFeHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xFeHRlbnNpb246OmNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZm
ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMTG9zZUNvbnRleHQ6OldlYkdMTG9zZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMb3NlQ29udGV4dDo6bG9zZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
TG9zZUNvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6V2ViR0xPYmplY3QpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9n
cmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZl
cik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw6IFJlbW92ZWQuCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDogQWRkZWQu
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGw6IEFk
ZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hhZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFk
ZXI6OldlYkdMU2hhZGVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaDoKKwogMjAxNS0wMS0xMyAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFJlbW92ZSB1bnVzZWQgUmVzaXplSW1hZ2UgYW5kIERlY29kZUltYWdlRGF0YSB0aW1lbGlu
ZSBldmVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzgzNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTQwLDYgKzU0
MCw4IEBAIHNldChXZWJDb3JlX05PTl9TVkdfSURMX0ZJTEVTCiAgICAgaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUhhbGZGbG9hdC5pZGwKICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0
TGluZWFyLmlkbAogICAgIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmlkbAorICAg
IGh0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCisgICAgaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUlu
Zm8uaWRsCiAgICAgaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsCiAgICAgaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwKQEAgLTU1NSw3ICs1NTcsNyBAQCBzZXQoV2Vi
Q29yZV9OT05fU1ZHX0lETF9GSUxFUwogICAgIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQu
aWRsCiAgICAgaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmlkbAogICAgIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmlkbAotICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5pZGwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbAogICAg
IGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVy
UHJlY2lzaW9uRm9ybWF0LmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5pZGwKQEAg
LTExNDUsNyArMTE0Nyw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9K
U1RyZWVXYWxrZXJDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9t
LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCi0gICAgYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCisgICAgYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pz
L0pTV2ViS2l0UG9pbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20u
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCkBAIC0xNjY5
LDYgKzE2NzEsOCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9jYW52YXMvT0VTVGV4
dHVyZUhhbGZGbG9hdC5jcHAKICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGlu
ZWFyLmNwcAogICAgIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAorICAgIGh0
bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAgaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAK
ICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcAogICAgIGh0bWwv
Y2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAKQEAgLTE2ODgsNyArMTY5Miw3
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAK
ICAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuY3BwCi0gICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAorICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCiAgICAgaHRt
bC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVj
aXNpb25Gb3JtYXQuY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCkBA
IC0yNzY3LDYgKzI3NzEsOCBAQCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBodG1sL2NhbnZh
cy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcAogICAgICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJl
SGFsZkZsb2F0TGluZWFyLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9i
amVjdC5jcHAKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAK
KyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICAgICAg
aHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVBVEMuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQy5jcHAKQEAgLTI3ODYsNyArMjc5Miw3IEBAIGlmIChFTkFCTEVfV0VCR0wp
CiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAogICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVy
LmNwcAotICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCiAgICAgICAgIGh0
bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRl
clByZWNpc2lvbkZvcm1hdC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmpl
Y3QuY3BwCkBAIC0yODA4LDYgKzI4MTQsOCBAQCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBo
dG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmlkbAogICAgICAgICBodG1sL2NhbnZhcy9P
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmlkbAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0
ZXhBcnJheU9iamVjdC5pZGwKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29u
dGV4dC5pZGwKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwK
ICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbAogICAgICAgICBodG1sL2Nh
bnZhcy9XZWJHTEJ1ZmZlci5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQy5pZGwKQEAgLTI4MjMsNyArMjgzMSw3IEBAIGlmIChFTkFCTEVfV0VCR0wpCiAg
ICAgICAgIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuaWRsCiAgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuaWRsCi0gICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKKyAg
ICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwKICAgICAgICAg
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRsCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyUHJlY2lzaW9uRm9ybWF0LmlkbAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUu
aWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE3ODM3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTQ0NCwxMiArNDQ0LDE0IEBAIE5PTl9TVkdfQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29y
ZSkvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29udGV4dC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvV2ViR0xQcm9ncmFtLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVjaXNp
b25Gb3JtYXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5p
ZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRs
IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMu
aWRsIFwKKyAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaWRsIFwKKyAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuaWRsIFwKKwkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvdHJhY2svQXVkaW9UcmFjay5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5pZGwgXAogICAgICQoV2ViQ29yZSkv
aHRtbC90cmFjay9EYXRhQ3VlLmlkbCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MjcsOCArMTcyNyw4IEBACiAJCTQ5QzdCOURBMTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlDN0I5QkExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmgg
Ki87IH07CiAJCTQ5QzdCOURDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
QzdCOUJDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsg
fTsKIAkJNDlDN0I5REQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUJE
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi87IH07Ci0JCTQ5
QzdCOURGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkYxMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07Ci0JCTQ5QzdCOUUw
MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0
NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJNDlDN0I5REYxMDQyRDMyRjAw
MDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9OworCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJl
bmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlDN0I5RTIxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMU2hhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAgKi87IH07CiAJ
CTQ5QzdCOUUzMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzMxMDQyRDMyRjAwMDlENDQ3
IC8qIFdlYkdMU2hhZGVyLmggKi87IH07CiAJCTQ5QzdCOUU1MTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFRleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlDN0I5QzUxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMVGV4dHVyZS5jcHAgKi87IH07
CkBAIC0xNzY4LDEwICsxNzY4LDEwIEBACiAJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5OUZBQiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAgKi87IH07CiAJCTQ5RUVEMTQ1MTA1MTk2OTQwMDA5OUZBQiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0YxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmggKi87IH07Ci0JCTQ5RUVEMTQ2MTA1MTk2OTQwMDA5OUZBQiAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwICovOyB9OwotCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oICovOyB9OworCQk0OUVFRDE0NjEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVEMTQwMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0Nv
bnRleHQuY3BwICovOyB9OworCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250
ZXh0LmggKi87IH07CiAJCTQ5RUVEMTRFMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVFRDE0QjEwNTE5NzE5MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwICovOyB9OwotCQk0OUVFRDE0RjEwNTE5NzFBMDAwOTlGQUIg
LyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxNEMxMDUxOTcxQTAwMDk5RkFCIC8qIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNDlFRUQxNEYxMDUxOTcx
QTAwMDk5RkFCIC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0QzEwNTE5NzFBMDAw
OTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJNDlF
RUQxNTAxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0
RDEwNTE5NzFBMDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAq
LzsgfTsKIAkJNDlGQzdBNTAxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZD
N0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLzsgfTsK
IAkJNDlGRkJGMUQxMUM4NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGRkJGMUMxMUM4
NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLm1tICovOyB9OwpAQCAtNTg0MCw2
ICs1ODQwLDEyIEBACiAJCUQzNTlENzkzMTI5Q0EzQzAwMDA2RTVEMiAvKiBET01IVE1MRGV0YWls
c0VsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDM1OUQ3OTAxMjlDQTNDMDAwMDZFNUQyIC8qIERPTUhUTUxEZXRhaWxzRWxlbWVu
dEludGVybmFsLmggKi87IH07CiAJCUQzNTlEOEJFMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxE
ZXRhaWxzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEMzU5RDhCQzEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0VsZW1lbnQu
Y3BwICovOyB9OwogCQlEMzU5RDhCRjEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQz
NTlEOEJEMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5oICovOyB9Owor
CQlEMzlDNzJENzFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJE
NTFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi87IH07
CisJCUQzOUM3MkQ4MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJE
NjFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovOyB9Owor
CQlEMzlDNzJERDFBNUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJEQjFB
NUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CisJCUQz
OUM3MkRFMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJEQzFBNUM4QzhF
MDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OworCQlEMzlDNzJFNDFB
NUM5M0FGMDBBRUQ4OUMgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkUzMUE1Qzkz
QUYwMEFFRDg5QyAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovOyB9Owor
CQlEMzlDNzJFNjFBNUM5NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQzOUM3MkU1MUE1Qzk0MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VD
dXN0b20uY3BwICovOyB9OwogCQlEM0E5NEEzODEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVy
eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDNBOTRBMzExMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmNwcCAqLzsgfTsKIAkJ
RDNBOTRBMzkxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0E5NEEzMjEyMkRBQkFDMDBBMzdC
QkMgLyogTWVkaWFRdWVyeUxpc3QuaCAqLzsgfTsKIAkJRDNBOTRBM0IxMjJEQUJBQzAwQTM3QkJD
IC8qIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQzQTk0QTM0MTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmggKi87IH07CkBAIC01ODQ5LDYgKzU4NTUsMTAgQEAKIAkJRDNBQTEwRjQx
MjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0FBMTBGMjEyM0E5OEFBMDA5MjE1MkIgLyog
TWVkaWFRdWVyeU1hdGNoZXIuaCAqLzsgfTsKIAkJRDNENEU5NzIxMzBDN0NGRTAwN0JBNTQwIC8q
IEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEM0Q0RTk3MDEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVt
ZW50LmNwcCAqLzsgfTsKIAkJRDNENEU5NzMxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDNENEU5NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oICovOyB9Owor
CQlEM0UxNEJCNTFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRTE0QkIz
MUE1RENGNEIwMDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9Owor
CQlEM0UxNEJCNjFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0UxNEJCNDFB
NURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi87IH07CisJCUQz
RTE0QkI5MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNFMTRCQjcx
QTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi87IH07
CisJCUQzRTE0QkJBMUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRTE0
QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLzsg
fTsKIAkJRDYxOUEzMDcxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDYxOUEz
MDUxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwICovOyB9Owog
CQlENjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDYxOUEzMDYxNDRF
MDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAqLzsgfTsKIAkJRDY0ODlE
MjUxNjZGRkNGMTAwN0MwMzFCIC8qIEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENjQ4OUQyMzE2NkZGQ0YxMDA3
QzAzMUIgLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCAqLzsgfTsKQEAgLTg3OTYsOSArODgw
Niw5IEBACiAJCTQ5QzdCOUJDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlCRDEwNDJEMzJGMDAwOUQ0NDcg
LyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBjYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlCRTEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdC
OUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDsg
cGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OUM3QjlDMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5n
Q29udGV4dC5oOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMMVJl
bmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlD
MDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBj
YW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGw7IHBh
dGggPSBjYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTFNoYWRlci5jcHA7IHBh
dGggPSBjYW52YXMvV2ViR0xTaGFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xTaGFkZXIuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNo
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlDNDEwNDJEMzJGMDAw
OUQ0NDcgLyogV2ViR0xTaGFkZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMU2hh
ZGVyLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNoYWRlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC04ODQwLDEwICs4ODUwLDEwIEBACiAJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFRDE0MDEwNTE5Njk0MDAw
OTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUQx
NDAxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlG
QUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUVFRDE0QjEwNTE5NzE5MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wx
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5RUVEMTREMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlG
QzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTgg
LyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzMzIwLDYgKzEzMzMwLDEyIEBACiAJCUQzNTlENzkwMTI5Q0EzQzAwMDA2RTVE
MiAvKiBET01IVE1MRGV0YWlsc0VsZW1lbnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01IVE1MRGV0YWlsc0VsZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlEMzU5RDhCQzEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0
YWlsc0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNI
VE1MRGV0YWlsc0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMzU5
RDhCRDEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0VsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MRGV0YWlsc0VsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDM5QzcyRDUxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3
MkQ2MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDsg
cGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUQzOUM3MkRCMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMzlDNzJEQzFBNUM4QzhFMDBB
RUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBjYW52YXMvV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMzlDNzJF
MzFBNUM5M0FGMDBBRUQ4OUMgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3MkU1MUE1
Qzk0MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNBOTRBMzEx
MjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDNBOTRBMzIxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQTk0QTMzMTIyREFCQUMwMEEzN0JCQyAvKiBNZWRp
YVF1ZXJ5TGlzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3QuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMzMzEsNiArMTMzNDcsMTIgQEAKIAkJ
RDNBQTEwRjIxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlNYXRjaGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQzRDRFOTcwMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFy
eUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFN1
bW1hcnlFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNENEU5NzEx
MzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRDNFMTRCQjMxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0Ux
NEJCNDFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0UxNEJCNzFBNURDRjdCMDA5N0E2RTkgLyog
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUQzRTE0QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUQzRTE0QkJCMUE1REU4RjUwMDk3QTZFOSAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDsgcGF0aCA9
IGNhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRDNFMTRCQkMxQTVERThGNTAwOTdBNkU5IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hp
bGRMaXN0TXV0YXRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRDYxOUEzMDYxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjQ4OUQyMzE2NkZGQ0YxMDA3QzAz
MUIgLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNTgzNiw5ICsxNTg1OCwxNSBAQAogCQkJCTQ5QzdCOUI5MTA0MkQzMkYw
MDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5QkExMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmggKi8sCiAJCQkJNDlDN0I5QkIxMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmlkbCAqLywKLQkJCQk0OUM3QjlCRjEwNDJE
MzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKLQkJCQk0OUM3QjlD
MDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggKi8sCi0JCQkJNDlD
N0I5QzExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8sCisJ
CQkJNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3Bw
ICovLAorCQkJCTQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250
ZXh0LmggKi8sCisJCQkJNDlDN0I5QzExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmlu
Z0NvbnRleHQuaWRsICovLAorCQkJCUQzOUM3MkRCMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKKwkJCQlEMzlDNzJEQzFBNUM4QzhFMDBBRUQ4OUMgLyog
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovLAorCQkJCUQzRTE0QkJCMUE1REU4RjUwMDk3QTZF
OSAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCAqLywKKwkJCQlEMzlDNzJENTFBNUM4QjBC
MDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi8sCisJCQkJRDM5Qzcy
RDYxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLywKKwkJ
CQlEM0UxNEJCQzFBNURFOEY1MDA5N0E2RTkgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5p
ZGwgKi8sCiAJCQkJNDlDN0I5QzIxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmNwcCAq
LywKIAkJCQk0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCAqLywKIAkJ
CQk0OUM3QjlDNDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaWRsICovLApAQCAtMTg5
MDcsOCArMTg5MzUsMTIgQEAKIAkJCQk0OUM3Qjk4OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJH
TFByb2dyYW0uaCAqLywKIAkJCQk0OUM3Qjk4QTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJl
bmRlcmJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5OEIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2Vi
R0xSZW5kZXJidWZmZXIuaCAqLywKLQkJCQk0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovLAotCQkJCTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZB
QiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oICovLAorCQkJCUQzRTE0QkI3MUE1RENGN0Iw
MDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwICovLAorCQkJCUQzRTE0
QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLywK
KwkJCQk0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0
LmNwcCAqLywKKwkJCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJp
bmdDb250ZXh0LmggKi8sCisJCQkJRDNFMTRCQjMxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCisJCQkJRDNFMTRCQjQxQTVEQ0Y0QjAwOTdBNkU5IC8q
IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCTQ5QzdCOThGMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU1dlYkdMU2hhZGVyLmNwcCAqLywKIAkJCQk0OUM3Qjk5MDEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNXZWJHTFNoYWRlci5oICovLAogCQkJCUEwN0QzMzUzMTUyQjYzMEUwMDFCNjM5MyAv
KiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCAqLywKQEAgLTIxMDA1LDcgKzIxMDM3
LDkgQEAKIAkJCQk3QzczRkIxNzE5MUVGODA4MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhhbmRs
ZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZERjcwODE3MUNBMkM1MDBERDUyQjgg
LyogSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZERjcwQTE3MUNBMkM1MDBERDUy
QjggLyogSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAgKi8sCi0JCQkJNDlFRUQxNEMxMDUxOTcx
QTAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKKwkJCQlE
MzlDNzJFNTFBNUM5NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3Vz
dG9tLmNwcCAqLywKKwkJCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKKwkJCQlEMzlDNzJFMzFBNUM5M0FGMDBBRUQ4OUMg
LyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzI3NUI3ODEx
QzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi8sCiAJCQkJRTFDQTVD
QkIwRThDRENBRjAwRThFRjkwIC8qIEpTV29ya2VyQ3VzdG9tLmNwcCAqLywKIAkJCQlFMTgyNThB
QjBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgKi8sCkBA
IC0yNTIxOCw3ICsyNTI1Miw3IEBACiAJCQkJOTNGMUQ1QzExMkQ1MzM1NjAwODMyQkVDIC8qIEpT
V2ViR0xMb3NlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5OUMxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3Qjk5RTEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDlFRUQxNDcxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlBMzEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA3RDMzNTYxNTJC
NjMwRTAwMUI2MzkzIC8qIEpTV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5QzdCOUE1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMVGV4dHVyZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNTQ1Niw2ICsyNTQ5MCw3IEBACiAJCQkJMTQxMTVCNTIwOUY4NEI3
MTAwQ0E0RkMxIC8qIE5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZFNzMxMEEyMjk3QkUw
MDU4RDdBRCAvKiBOb2RlRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczMzBBMjI5
N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RDNFMTRCQjYxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzUwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJdGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMUIwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2MzE4OUFFMzBFODNBMzMzMDAwMTJFNDEgLyogTm9k
ZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI1Njg2LDYgKzI1NzIxLDcgQEAKIAkJCQlF
NDNBMDIzQjE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1QjdBNTUxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzNDNDBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVyRmll
bGRzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUQzRTE0QkJBMUE1RENGN0IwMDk3QTZFOSAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2NkM3NzMx
MEFCNjAzRkQwMDIzOENDNCAvKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTNDODI5OEUxM0Q4RDkyNzAwREUyREVCIC8qIFJlbmRlckZsZXhpYmxlQm94Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MDhDQ0E0RjEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxv
d1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTk1Niw2ICsyNTk5Miw3IEBACiAJCQkJQUI3
MTcwODkwQjMxMTgwODAwMTcxMjNFIC8qIFNlYXJjaFBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNGMUUxRUMxQTQwRkREQzAwMzQ4RDEzIC8qIE5TUG9wb3ZlclNQSS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc2RjM2RUIxNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRDM5QzcyRDgxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDBFMEZCMEU5NzJDMzUw
MDI2NURFQSAvKiBTZWN1cml0eU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMEUwRkMw
RTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc0RDJEQTUxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NjMxLDcgKzI2NjY4LDcgQEAKIAkJCQk0OUM3QjlENTEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUQ3MTA0MkQzMkYw
MDA5RDQ0NyAvKiBXZWJHTFByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOURBMTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NDlDN0I5RTAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNDlDN0I5RTAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmlu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUUzMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA3RDMzNTgxNTJCNjMyRDAwMUI2
MzkzIC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
MUQzQ0Y4NzE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xTaGFyZWRPYmplY3QuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY3MDAsNiArMjY3MzcsNyBAQAogCQkJCUExNDgzMkMxMTg3RjY1N0EwMERBNjNB
NiAvKiBXS1R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ4MzJDMzE4N0Y2NURGMDBEQTYz
QTYgLyogV0tVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDgzMkM0MTg3RjY2M0Mw
MERBNjNBNiAvKiBXS1ZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCUQzOUM3MkRFMUE1QzhDOEUw
MEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MTQ4MzJDNjE4N0Y2NjhGMDBEQTYzQTYgLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzc5OTE5OTcxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRTQzNDY0NjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI3NjkzLDYgKzI3NzMxLDcgQEAKIAkJCQlCQzUzREE0ODExNDMxMzREMDAw
RDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUQxMzgx
MEE1MzI1NTIwMDY0QkY1RiAvKiBET01YUGF0aC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1RTlF
MEEyMEFCM0EwQzcwMDA2OUNEMCAvKiBET01YUGF0aEV4cHJlc3Npb24ubW0gaW4gU291cmNlcyAq
LywKKwkJCQlEMzlDNzJENzFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NUU5RTBBNjBBQjNBMEM3MDAwNjlDRDAgLyog
RE9NWFBhdGhSZXN1bHQubW0gaW4gU291cmNlcyAqLywKIAkJCQlGRDE3NjJFMzE3NjY4NkVBMDBE
ODM2QTggLyogRG93blNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQTU5NUUwQjI3
QkQ5RTAwRkEwMjFEIC8qIERyYWdDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg3
NDMsNiArMjg3ODIsNyBAQAogCQkJCTI2NzcyNjA0MUE1REY2RjIwMDNDMjRERCAvKiBVUkxGaWx0
ZXJQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEQTdDMTYxODgzMjJFQjAwQzk1NEI1
IC8qIEpTVG91Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEQTdDMTgxODgzMjJFQjAwQzk1
NEI1IC8qIEpTVG91Y2hFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlEMzlDNzJFNjFBNUM5
NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGREE3QzFBMTg4MzIyRUIwMEM5NTRCNSAvKiBKU1RvdWNoTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzAzMzRFOTE0NUExRjM2MDA4RDhENDUgLyogSlNUcmFj
a0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzg0NjM0MjE0NUIxNTFBMDBBNThERjEg
LyogSlNUcmFja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg3ODIsOCArMjg4MjIsOCBA
QAogCQkJCTkzRjFENUMwMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYkdMTG9zZUNvbnRleHQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5OUIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQ
cm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOTlEMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU1dlYkdMUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVEMTQ2MTA1
MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk0OUVFRDE0RjEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUQxNDYxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVF
RDE0RjEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOUEyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdM
U2hhZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEwN0QzMzU1MTUyQjYzMEUwMDFCNjM5MyAv
KiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5
QzdCOUE0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMVGV4dHVyZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI4OTQ1LDYgKzI4OTg1LDcgQEAKIAkJCQkwNzhFMDkwMzE3RDE0Q0VFMDA0MjBBQTEg
LyogTWVkaWFTdHJlYW1UcmFja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3RkZERTY4
MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwNzYzMDZEMjE3RTE0NzhEMDA1QTdDNEUgLyogTWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXNSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQzRTE0QkI1MUE1RENGNEIwMDk3
QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Q0Q2NDFFQkYxODE5QjM2MDAwRUU0QzQxIC8qIE1lZGlhVGltZUFWRm91bmRhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDRDYwQzBDNjE5M0U4N0M3MDAzQzY1NkIgLyogTWVkaWFUaW1lUVRL
aXQubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNzA1ODUzQTE3RkUwNzcwMDA1RjJCQ0IgLyogTWVk
aWFUcmFja0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTQzOSw2ICsyOTQ4MCw3
IEBACiAJCQkJNEI2RkE2RjcwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUU0QUZEMDBCMERBRjMzNTQwMEY1RjU1QyAvKiBTTUlMVGltZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEFGRDAwRDBEQUYzMzU1MDBGNUY1NUMgLyogU01JTFRp
bWVDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDM5QzcyRTQxQTVDOTNBRjAwQUVE
ODlDIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTBENEEzMzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQUJBRTFGMTAzQzE5MTMw
MDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI5NzI3LDYgKzI5NzY5LDcgQEAKIAkJCQk2NTUwQjZBNTA5OURGMDI3MDA5MEQ3ODEgLyogVGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTdCMkRCNjE1ODZBQkFEMDA5OEIzRkEgLyogVGV4
dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NERDRTUxODgx
MDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQz
RTE0QkI5MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzcyQzAwQzQxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3Vu
ZGFyaWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzk3MEQwMEE1REYwMDMwMDc0RCAv
KiBUZXh0Qm91bmRhcmllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRDhBNUYwMTVGNTZGMkMw
MDk4RDA3MSAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5OTIw
LDcgKzI5OTYzLDcgQEAKIAkJCQk0OUM3QjlENDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5RDYxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlEOTEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xSZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlDN0I5REYx
MDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0OUM3QjlERjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlFMjEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTA4Q0YxNTQxNTJCNzdCMzAwOUM1Nzc1
IC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAx
RDNDRjg2MTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI5OTcwLDYgKzMwMDEzLDcgQEAKIAkJCQk5M0VDNDRBMTE4OEY0QkI4MDA2NjFE
RjEgLyogV2hlZWxFdmVudERlbHRhVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5Mzgw
RjQ3MzA5QTExQUI0MDAxRkRCMzQgLyogV2lkZ2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0
NTM5MDREMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gaW4gU291cmNlcyAqLywKKwkJ
CQlEMzlDNzJERDFBNUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzgwRjQ3ODA5QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0TWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5QjAyRUUwRUEyREJDNDAwQzU0NTcwIC8qIFdpZHRo
SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4MjQzRTgwRDBDRkQ3NTAwNDYwQzhG
IC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw4ICsz
MiwxMCBAQAogI2luY2x1ZGUgIkpTTm9kZS5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKQotI2luY2x1
ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCisjaW5jbHVkZSAiSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKICNlbmRpZgog
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNTEsOCArNTMsMTIgQEAgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICNp
ZiBFTkFCTEUoV0VCR0wpCi0gICAgaWYgKG9iamVjdC0+aXMzZCgpKQotICAgICAgICByZXR1cm4g
d3JhcDxKU1dlYkdMUmVuZGVyaW5nQ29udGV4dD4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICBpZiAob2JqZWN0LT5pczNkKCkp
IHsKKyAgICAgICAgaWYgKG9iamVjdC0+dHlwZSgpID09ICJ3ZWJnbDEiKQorICAgICAgICAgICAg
cmV0dXJuIHdyYXA8SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PFdlYkdMMVJlbmRlcmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICAgICAgaWYgKG9i
amVjdC0+dHlwZSgpID09ICJ3ZWJnbDIiKQorICAgICAgICAgICAgcmV0dXJuIHdyYXA8SlNXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICB9CiAjZW5kaWYKICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihvYmplY3QtPmlzMmQoKSk7CiAgICAgcmV0dXJuIHdyYXA8SlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKj4ob2JqZWN0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKICNpZiBF
TkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzgzNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQog
I2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAjaW5jbHVk
ZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc2OTk0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6MTc2OTk0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV0VCR0wpCisKKyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJFWFRCbGVuZE1pbk1heC5o
IgorI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgorI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVM
T0QuaCIKKyNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKKyNpbmNsdWRl
ICJFWFRzUkdCLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU0VYVEJsZW5kTWluTWF4Lmgi
CisjaW5jbHVkZSAiSlNFWFRGcmFnRGVwdGguaCIKKyNpbmNsdWRlICJKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCIKKyNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2lu
Y2x1ZGUgIkpTRVhUc1JHQi5oIgorI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIkpTT0VTRWxlbWVudEluZGV4VWludC5oIgorI2luY2x1ZGUgIkpTT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVk
ZSAiSlNPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxm
RmxvYXQuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNs
dWRlICJKU09FU1ZlcnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgorI2luY2x1ZGUgIkpT
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgor
I2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKKyNpbmNsdWRlICJKU1dlYkdMRGVwdGhU
ZXh0dXJlLmgiCisjaW5jbHVkZSAiSlNXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVkZSAiSlNX
ZWJHTEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmgiCisjaW5j
bHVkZSAiSlNXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgi
CisjaW5jbHVkZSAiSlNXZWJHTFNoYWRlci5oIgorI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgi
CisjaW5jbHVkZSAiSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgorI2luY2x1ZGUgIkpTV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgorI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50
LmgiCisjaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIk9FU1Rl
eHR1cmVGbG9hdC5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1
ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0
TGluZWFyLmgiCisjaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJX
ZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNp
bmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJXZWJHTENv
bXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8u
aCIKKyNpbmNsdWRlICJXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1ZGUgIldlYkdMRGVwdGhU
ZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgorI2luY2x1ZGUgIldlYkdM
RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldl
YkdMR2V0SW5mby5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNpbmNsdWRlICJX
ZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworI2lmIEVOQUJMRShWSURFTykKKyNpbmNs
dWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50Lmgi
CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvKQoreworICAgIHN3aXRjaCAo
aW5mby5nZXRUeXBlKCkpIHsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sOgorICAg
ICAgICByZXR1cm4ganNCb29sZWFuKGluZm8uZ2V0Qm9vbCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVCb29sQXJyYXk6IHsKKyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlz
dDsKKyAgICAgICAgY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZSA9IGluZm8uZ2V0Qm9vbEFycmF5
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsraWkp
CisgICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWVbaWldKSk7CisgICAgICAg
IHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QsIGxpc3QpOworICAg
IH0KKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVGbG9hdDoKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGluZm8uZ2V0RmxvYXQoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlSW50
OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRJbnQoKSk7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlTnVsbDoKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIGNhc2Ug
V2ViR0xHZXRJbmZvOjprVHlwZVN0cmluZzoKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsIGluZm8uZ2V0U3RyaW5nKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlw
ZVVuc2lnbmVkSW50OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRVbnNpZ25lZElu
dCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEJ1ZmZlcjoKKyAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMQnVmZmVyKCkpOwor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRmxvYXRBcnJheToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMRmxvYXRBcnJheSgpKTsK
KyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEZyYW1lYnVmZmVyOgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGcmFtZWJ1ZmZlcigp
KTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEludEFycmF5OgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xJbnRBcnJheSgpKTsK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkKKyAgICAvLyBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9iamVjdEFycmF5OgorICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZVdlYkdMUHJvZ3JhbToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3JhbSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5
cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVyYnVmZmVyKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZVdlYkdMVGV4dHVyZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVyZSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5
cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSgpKTsKKyAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkSW50QXJyYXkoKSk7
CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzoK
KyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorfQorCitlbnVtIE9i
amVjdFR5cGUgeworICAgIGtCdWZmZXIsIGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4
QXR0cmliCit9OworCitzdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmplY3RUeXBlIG9iamVjdFR5
cGUpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1
cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
dW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm87CisgICAgc3dpdGNoIChvYmplY3RUeXBlKSB7
CisgICAgY2FzZSBrQnVmZmVyOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRCdWZmZXJQYXJh
bWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtSZW5k
ZXJidWZmZXI6CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cih0YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1RleHR1cmU6
CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1ZlcnRleEF0dHJpYjoKKyAgICAgICAgLy8g
dGFyZ2V0ID0+IGluZGV4CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFZlcnRleEF0dHJpYih0
YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0
KCksIGluZm8pOworfQorCitlbnVtIFdoaWNoUHJvZ3JhbUNhbGwgeworICAgIGtQcm9ncmFtUGFy
YW1ldGVyLCBrVW5pZm9ybQorfTsKKworc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdMRXh0ZW5zaW9uKiBleHRl
bnNpb24pCit7CisgICAgaWYgKCFleHRlbnNpb24pCisgICAgICAgIHJldHVybiBqc051bGwoKTsK
KyAgICBzd2l0Y2ggKGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7CisgICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6V2ViR0xMb3NlQ29udGV4dE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbikpOwor
ICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVMT0ROYW1lOgorICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFNoYWRlclRl
eHR1cmVMT0QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRUZXh0
dXJlRmlsdGVyQW5pc290cm9waWNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyo+KGV4dGVu
c2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVHNSR0JOYW1lOgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVHNSR0IqPihleHRl
bnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRGcmFnRGVwdGhOYW1lOgorICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVEZyYWdE
ZXB0aCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEJsZW5kTWlu
TWF4TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxFWFRCbGVuZE1pbk1heCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246Ok9FU1N0YW5kYXJkRGVyaXZhdGl2ZXNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRl
bnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgor
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1Rl
eHR1cmVGbG9hdCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1Rl
eHR1cmVGbG9hdExpbmVhck5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6CisgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhh
bGZGbG9hdCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1
cmVIYWxmRmxvYXRMaW5lYXJOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24p
KTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6Cisg
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVy
dGV4QXJyYXlPYmplY3QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpP
RVNFbGVtZW50SW5kZXhVaW50TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6CisgICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Oldl
YkdMRGVidWdTaGFkZXJzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOworICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgorICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVENOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+
KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBz
dGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOworICAg
IGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVy
ZSo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZl
cnNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PFdlYkdMRHJhd0J1ZmZlcnMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpBTkdMRUluc3RhbmNlZEFycmF5c05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNp
b24pKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGpzTnVs
bCgpOworfQorCit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoJmltcGwoKSk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0
dGFjaGVkU2hhZGVycyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7
CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNo
YWRlcnM7CisgICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgc2hhZGVycywgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfQorICAgIGlmICgh
c3VjY2VlZCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXpl
KCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IHNoYWRlcnNbaWldLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAs
IGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0RXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworCisgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOworICAgIGNvbnN0IFN0cmluZyBu
YW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQuZ2V0RXh0
ZW5zaW9uKG5hbWUpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBleHRl
bnNpb24pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQ
YXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0
ZXIodGhpcywgZXhlYywga0J1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHVuc2lnbmVk
IGF0dGFjaG1lbnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0lu
dDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBp
bXBsKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBh
cmFtZXRlcihwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dy
YW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhl
Yyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFt
ZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhl
Yywga1JlbmRlcmJ1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQg
PSBpbXBsKCk7CisgICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pbmhlcml0cyhKU1dlYkdM
U2hhZGVyOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Cisg
ICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8g
PSBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1
cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoY29udGV4dC5pc0NvbnRleHRMb3N0
KCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZSA9
IGNvbnRleHQuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGxpc3Q7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytp
aSkKKyAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFsdWVbaWld
KSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBs
aXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1l
dGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRo
aXMsIGV4ZWMsIGtUZXh0dXJlKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBs
KCk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBl
ZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFVuaWZvcm0ocHJvZ3Jh
bSwgbG9jYXRpb24sIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Citib29s
IHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKK3sKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KHZhbHVlKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9IG9iamVjdC0+Z2V0KGV4ZWMs
IGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOworCisgICAg
aWYgKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB2ZWN0b3IucmVzaXplKGxlbmd0aCk7CisKKyAgICBmb3IgKGludDMyX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+
Z2V0KGV4ZWMsIGkpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYu
dG9OdW1iZXIoZXhlYykpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitlbnVtIERh
dGFGdW5jdGlvblRvQ2FsbCB7CisgICAgZl91bmlmb3JtMXYsIGZfdW5pZm9ybTJ2LCBmX3VuaWZv
cm0zdiwgZl91bmlmb3JtNHYsCisgICAgZl92ZXJ0ZXhBdHRyaWIxdiwgZl92ZXJ0ZXhBdHRyaWIy
diwgZl92ZXJ0ZXhBdHRyaWIzdiwgZl92ZXJ0ZXhBdHRyaWI0dgorfTsKKworZW51bSBEYXRhRnVu
Y3Rpb25NYXRyaXhUb0NhbGwgeworICAgIGZfdW5pZm9ybU1hdHJpeDJmdiwgZl91bmlmb3JtTWF0
cml4M2Z2LCBmX3VuaWZvcm1NYXRyaXg0ZnYKK307CisKK3N0YXRpYyBib29sIGZ1bmN0aW9uRm9y
VW5pZm9ybShEYXRhRnVuY3Rpb25Ub0NhbGwgZikKK3sKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBj
YXNlIGZfdW5pZm9ybTF2OgorICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgY2FzZSBmX3VuaWZv
cm0zdjoKKyAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgSlND
OjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Cisg
ICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gMDsKKyAgICBsb25nIGlu
ZGV4ID0gLTE7CisgICAgCisgICAgaWYgKGZ1bmN0aW9uRm9yVW5pZm9ybShmKSkgeworICAgICAg
ICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgfSBlbHNlCisgICAgICAgIGluZGV4ID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAg
IFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGlmICh3ZWJHTEFycmF5KSB7CisgICAgICAgIHN3aXRjaCAoZikgewor
ICAgICAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWZ2
KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm0ydjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0
aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjF2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIx
ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
MmZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjNmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRy
aWI0ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFZlY3RvcjxmbG9hdCwgNjQ+
IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworCisgICAg
c3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4dC51bmlm
b3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0y
ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTNmdihs
b2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0
aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIGZfdmVydGV4QXR0cmliMXY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2
KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYo
aW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjNmdihp
bmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIGZfdmVydGV4QXR0cmliNHY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliNGZ2KGlu
ZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0
aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQm
IGNvbnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAg
ICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjKTsKKyAgCisgICAgUmVmUHRyPEludDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJy
YXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgaWYgKHdlYkdMQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoIChmKSB7CisgICAgICAg
IGNhc2UgZl91bmlmb3JtMXY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRp
b24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9u
LCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwg
d2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Zl91bmlmb3JtNHY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIHdl
YkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IH0KKworCisgICAgVmVjdG9yPGludCwgNjQ+IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhl
YywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworCisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZv
cm0xdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2
OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6Cisg
ICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAg
ICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUo
KSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgo
RGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSAhPSAzKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgICAgCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAKKyAgICBS
ZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMikpOworICAgICAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAgICAgICAgY2Fz
ZSBmX3VuaWZvcm1NYXRyaXgyZnY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgy
ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OgorICAgICAgICAgICAg
Y29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXku
Z2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybU1h
dHJpeDRmdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwg
dHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgVmVjdG9yPGZsb2F0LCA2
ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgyKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisKKyAg
ICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoKKyAgICAgICAgY29u
dGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwg
YXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtTWF0
cml4M2Z2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgZXhl
YywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rp
b25mKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Cit9CisK
K0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihKU0M6OkV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwg
ZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwoKSk7Cit9
CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00
diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4MmZ2LCBleGVjLCBpbXBsKCkpOwor
fQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgz
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJp
eChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRm
diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlND
OjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRy
aWIydiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIzdiwgZXhlYywgaW1wbCgpKTsKK30KKwor
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhB
dHRyaWI0diwgZXhlYywgaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3MjcgKzI2LDE3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0KLSNpbmNsdWRlICJKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNp
bmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhU
TUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1
ZGUgIkpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNpbmNsdWRlICJKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCIKLSNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgotI2lu
Y2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTT0VTRWxlbWVudElu
ZGV4VWludC5oIgotI2luY2x1ZGUgIkpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1
ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXRMaW5l
YXIuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJKU09F
U1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJKU09FU1ZlcnRleEFycmF5T2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBW
UlRDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgotI2luY2x1
ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1No
YWRlcnMuaCIKLSNpbmNsdWRlICJKU1dlYkdMRGVwdGhUZXh0dXJlLmgiCi0jaW5jbHVkZSAiSlNX
ZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiSlNXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiSlNXZWJHTFByb2dyYW0uaCIK
LSNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFNoYWRl
ci5oIgotI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5oIgotI2luY2x1ZGUgIkpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgot
I2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1ZGUg
Ik9FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQu
aCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiT0VT
VmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUg
IldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgot
I2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKLSNpbmNsdWRlICJXZWJHTERlYnVn
U2hhZGVycy5oIgotI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0dXJlLmgiCi0jaW5jbHVkZSAiV2Vi
R0xEcmF3QnVmZmVycy5oIgotI2luY2x1ZGUgIldlYkdMRXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSAi
V2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMR2V0SW5mby5oIgotI2luY2x1ZGUg
IldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTLmgiCi0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNUeXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4K
LSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KLQotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50LmgiCi0jZW5kaWYKKyNpbmNsdWRlICJKU1dl
YkdMMVJlbmRlcmluZ0NvbnRleHQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvKQot
ewotICAgIHN3aXRjaCAoaW5mby5nZXRUeXBlKCkpIHsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6
a1R5cGVCb29sOgotICAgICAgICByZXR1cm4ganNCb29sZWFuKGluZm8uZ2V0Qm9vbCgpKTsKLSAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sQXJyYXk6IHsKLSAgICAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZSA9IGlu
Zm8uZ2V0Qm9vbEFycmF5KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1
ZS5zaXplKCk7ICsraWkpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWVb
aWldKSk7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmpl
Y3QsIGxpc3QpOwotICAgIH0KLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVGbG9hdDoKLSAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZm8uZ2V0RmxvYXQoKSk7Ci0gICAgY2FzZSBXZWJHTEdl
dEluZm86OmtUeXBlSW50OgotICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRJbnQoKSk7
Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlTnVsbDoKLSAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVN0cmluZzoKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGluZm8uZ2V0U3RyaW5nKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVVuc2lnbmVkSW50OgotICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5m
by5nZXRVbnNpZ25lZEludCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEJ1
ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdl
YkdMQnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRmxvYXRBcnJh
eToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdM
RmxvYXRBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEZyYW1lYnVm
ZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xGcmFtZWJ1ZmZlcigpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEludEFy
cmF5OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xJbnRBcnJheSgpKTsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkK
LSAgICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9iamVjdEFycmF5OgotICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3JhbSgpKTsKLSAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVyYnVmZmVyKCkpOwotICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVGV4dHVyZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVyZSgpKTsKLSAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSgp
KTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkSW50QXJyYXk6Ci0g
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2ln
bmVkSW50QXJyYXkoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
fQotfQotCi1lbnVtIE9iamVjdFR5cGUgewotICAgIGtCdWZmZXIsIGtSZW5kZXJidWZmZXIsIGtU
ZXh0dXJlLCBrVmVydGV4QXR0cmliCi19OwotCi1zdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJh
bWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmpl
Y3RUeXBlIG9iamVjdFR5cGUpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAy
KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm87Ci0gICAgc3dpdGNo
IChvYmplY3RUeXBlKSB7Ci0gICAgY2FzZSBrQnVmZmVyOgotICAgICAgICBpbmZvID0gY29udGV4
dC5nZXRCdWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGtSZW5kZXJidWZmZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2Uga1RleHR1cmU6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0
YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga1ZlcnRleEF0dHJp
YjoKLSAgICAgICAgLy8gdGFyZ2V0ID0+IGluZGV4Ci0gICAgICAgIGluZm8gPSBjb250ZXh0Lmdl
dFZlcnRleEF0dHJpYih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIG9i
ai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1lbnVtIFdoaWNoUHJvZ3JhbUNhbGwgewot
ICAgIGtQcm9ncmFtUGFyYW1ldGVyLCBrVW5pZm9ybQotfTsKLQotc3RhdGljIEpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdM
RXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAgaWYgKCFleHRlbnNpb24pCi0gICAgICAgIHJl
dHVybiBqc051bGwoKTsKLSAgICBzd2l0Y2ggKGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7Ci0gICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xMb3NlQ29udGV4dE5hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+
KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVM
T0ROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PEVYVFNoYWRlclRleHR1cmVMT0QqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNOYW1lOgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRlbnNpb24pKTsKLSAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgotICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVGbG9hdCo+
KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdExp
bmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdCo+KGV4
dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXJOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKLSAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVydGV4QXJyYXlPYmpl
Y3QqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNFbGVtZW50SW5k
ZXhVaW50TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1JlbmRlcmVySW5m
byo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVidWdTaGFk
ZXJzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUFZSVENOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+KGV4dGVuc2lvbikp
OwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDTmFt
ZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVyZSo+KGV4dGVuc2lv
bikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZlcnNOYW1lOgotICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRHJh
d0J1ZmZlcnMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpBTkdMRUlu
c3RhbmNlZEFycmF5c05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNpb24pKTsKLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGpzTnVsbCgpOwotfQotCi12
b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QoJmltcGwoKSk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEF0dGFjaGVkU2hhZGVycyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQg
PSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRv
V3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYm
ICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNo
YWRlcj4+IHNoYWRlcnM7Ci0gICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgc2hhZGVycywgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgfQot
ICAgIGlmICghc3VjY2VlZCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHNoYWRlcnMu
c2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCgpLCBzaGFkZXJzW2lpXS5nZXQoKSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVj
LCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBjb25zdCBTdHJp
bmcgbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24gPSBjb250ZXh0Lmdl
dEV4dGVuc2lvbihuYW1lKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
ZXh0ZW5zaW9uKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVm
ZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFy
YW1ldGVyKHRoaXMsIGV4ZWMsIGtCdWZmZXIpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKLSAgICAgICAgcmV0
dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNp
Z25lZCBhdHRhY2htZW50ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiku
dG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwg
ZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0
ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5n
ZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQot
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFByb2dyYW1Q
YXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQot
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMs
IGV4ZWMsIGtSZW5kZXJidWZmZXIpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250
ZXh0ID0gaW1wbCgpOwotICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRl
ZmluZWRPck51bGwoKSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaW5oZXJpdHMoSlNX
ZWJHTFNoYWRlcjo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OwotICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBp
bmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRTdXBwb3J0ZWRFeHRlbnNpb25zKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgaWYgKGNvbnRleHQuaXNDb250ZXh0
TG9zdCgpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFs
dWUgPSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKLSAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBsaXN0OwotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7
ICsraWkpCi0gICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHZhbHVl
W2lpXSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3Qo
KSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBh
cmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRl
cih0aGlzLCBleGVjLCBrVGV4dHVyZSk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFVuaWZvcm0oRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0g
aW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dy
YXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAmJiAh
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRVbmlmb3JtKHBy
b2dyYW0sIGxvY2F0aW9uLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYihFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVmVydGV4QXR0
cmliKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgot
Ym9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgaW50MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9JbnQzMihleGVjKTsKLQot
ICAgIGlmICghdmVjdG9yLnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgdmVjdG9yLnJlc2l6ZShsZW5ndGgpOwotCi0gICAgZm9yIChpbnQzMl90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBvYmpl
Y3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2ZWN0b3JbaV0gPSBzdGF0aWNfY2FzdDxU
Pih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZW51
bSBEYXRhRnVuY3Rpb25Ub0NhbGwgewotICAgIGZfdW5pZm9ybTF2LCBmX3VuaWZvcm0ydiwgZl91
bmlmb3JtM3YsIGZfdW5pZm9ybTR2LAotICAgIGZfdmVydGV4QXR0cmliMXYsIGZfdmVydGV4QXR0
cmliMnYsIGZfdmVydGV4QXR0cmliM3YsIGZfdmVydGV4QXR0cmliNHYKLX07Ci0KLWVudW0gRGF0
YUZ1bmN0aW9uTWF0cml4VG9DYWxsIHsKLSAgICBmX3VuaWZvcm1NYXRyaXgyZnYsIGZfdW5pZm9y
bU1hdHJpeDNmdiwgZl91bmlmb3JtTWF0cml4NGZ2Ci19OwotCi1zdGF0aWMgYm9vbCBmdW5jdGlv
bkZvclVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCi17Ci0gICAgc3dpdGNoIChmKSB7Ci0g
ICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgIGNhc2UgZl91
bmlmb3JtM3Y6Ci0gICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGlj
IEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwotICAgIAotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IDA7Ci0gICAgbG9u
ZyBpbmRleCA9IC0xOwotICAgIAotICAgIGlmIChmdW5jdGlvbkZvclVuaWZvcm0oZikpIHsKLSAg
ICAgICAgbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgICAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIH0gZWxzZQotICAgICAgICBpbmRleCA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAK
LSAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ICAgCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAKLSAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkgewotICAgICAgICBzd2l0Y2ggKGYp
IHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9y
bTFmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0y
ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2
KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0
cmliMWZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0
dHJpYjJmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgotICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhB
dHRyaWIzZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4
QXR0cmliNGZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8ZmxvYXQs
IDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQot
ICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQu
dW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgY29udGV4dC51bmlm
b3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0z
ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihs
b2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjFmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
MmZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIz
ZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRm
dihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFG
dW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250
ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAg
ICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZXhlYyk7Ci0gIAotICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9JbnQz
MkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGlmICh3ZWJHTEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikgewotICAg
ICAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxv
Y2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJpdihsb2Nh
dGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRp
b24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIGZfdW5pZm9ybTR2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9u
LCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0KLQotICAgIFZlY3RvcjxpbnQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9y
KGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91
bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuZGF0
YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZv
cm0ydjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTN2
OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0g
ICAgICAgIGNvbnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0
cml4KERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgIT0gMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVk
KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYmICFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBib29sIHRyYW5zcG9zZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0g
ICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAgc3dpdGNoIChmKSB7Ci0gICAgICAg
IGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDNmdjoKLSAgICAgICAg
ICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFy
cmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZv
cm1NYXRyaXg0ZnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIFZlY3RvcjxmbG9h
dCwgNjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMiksIGFycmF5KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwot
Ci0gICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6Ci0gICAgICAg
IGNvbnRleHQudW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRh
KCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9y
bU1hdHJpeDNmdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4NGZ2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm1N
YXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOwotfQot
Ci1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYs
IGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOwot
fQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3Jt
M3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTNpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uaShmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkp
OwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlm
b3JtNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDJmdiwgZXhlYywgaW1wbCgp
KTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0
cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25N
YXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRy
aXg0ZnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0K
LUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4
QXR0cmliMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliM3YsIGV4ZWMsIGltcGwoKSk7Ci19
Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVy
dGV4QXR0cmliNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJKU1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCgmaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCisKKyNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUg
IkVYVEJsZW5kTWluTWF4LmgiCisjaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgiCisjaW5jbHVkZSAi
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3BpYy5oIgorI2luY2x1ZGUgIkVYVHNSR0IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpT
RVhUQmxlbmRNaW5NYXguaCIKKyNpbmNsdWRlICJKU0VYVEZyYWdEZXB0aC5oIgorI2luY2x1ZGUg
IkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRlckFu
aXNvdHJvcGljLmgiCisjaW5jbHVkZSAiSlNFWFRzUkdCLmgiCisjaW5jbHVkZSAiSlNIVE1MQ2Fu
dmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5j
bHVkZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCisjaW5jbHVkZSAiSlNPRVNUZXh0dXJl
RmxvYXQuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1ZGUg
IkpTT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9h
dExpbmVhci5oIgorI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
LmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlYnVn
UmVuZGVyZXJJbmZvLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1
ZGUgIkpTV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMu
aCIKKyNpbmNsdWRlICJKU1dlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMTG9z
ZUNvbnRleHQuaCIKKyNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkpTV2Vi
R0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAi
SlNXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCisj
aW5jbHVkZSAiSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisjaW5jbHVkZSAiSlNXZWJL
aXRDU1NNYXRyaXguaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9F
U0VsZW1lbnRJbmRleFVpbnQuaCIKKyNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgi
CisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0
TGluZWFyLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIk9F
U1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVj
dC5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgor
I2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiV2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5j
bHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgi
CisjaW5jbHVkZSAiV2ViR0xFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVy
LmgiCisjaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4
dC5oIgorI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaCIKKyNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisj
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5
cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworI2lm
IEVOQUJMRShWSURFTykKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAi
SlNIVE1MVmlkZW9FbGVtZW50LmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMR2V0SW5m
byYgaW5mbykKK3sKKyAgICBzd2l0Y2ggKGluZm8uZ2V0VHlwZSgpKSB7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlQm9vbDoKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihpbmZvLmdldEJv
b2woKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlQm9vbEFycmF5OiB7CisgICAgICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGNvbnN0IFZlY3Rvcjxib29sPiYg
dmFsdWUgPSBpbmZvLmdldEJvb2xBcnJheSgpOworICAgICAgICBmb3IgKHNpemVfdCBpaSA9IDA7
IGlpIDwgdmFsdWUuc2l6ZSgpOyArK2lpKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQoanNCb29s
ZWFuKHZhbHVlW2lpXSkpOworICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwg
Z2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBl
RmxvYXQ6CisgICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEZsb2F0KCkpOworICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZUludDoKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZm8u
Z2V0SW50KCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZU51bGw6CisgICAgICAgIHJl
dHVybiBqc051bGwoKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVTdHJpbmc6CisgICAg
ICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbmZvLmdldFN0cmluZygpKTsKKyAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVVbnNpZ25lZEludDoKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGluZm8uZ2V0VW5zaWduZWRJbnQoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xCdWZmZXI6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
aW5mby5nZXRXZWJHTEJ1ZmZlcigpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJH
TEZsb2F0QXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5m
by5nZXRXZWJHTEZsb2F0QXJyYXkoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2Vi
R0xGcmFtZWJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMRnJhbWVidWZmZXIoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBl
V2ViR0xJbnRBcnJheToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMSW50QXJyYXkoKSk7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgV2Vi
R0xPYmplY3RBcnJheQorICAgICAgICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9i
amVjdEFycmF5OgorICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3Jh
bSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVy
YnVmZmVyKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVGV4dHVyZToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVy
ZSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
OgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xV
bnNpZ25lZEJ5dGVBcnJheSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVu
c2lnbmVkSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
aW5mby5nZXRXZWJHTFVuc2lnbmVkSW50QXJyYXkoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86
OmtUeXBlV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKSk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgfQorfQorCitlbnVtIE9iamVjdFR5cGUgeworICAgIGtCdWZmZXIs
IGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4QXR0cmliCit9OworCitzdGF0aWMgSlNW
YWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBvYmos
IEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0VHlwZSBvYmplY3RUeXBlKQoreworICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAg
IAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgcG5h
bWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
V2ViR0xHZXRJbmZvIGluZm87CisgICAgc3dpdGNoIChvYmplY3RUeXBlKSB7CisgICAgY2FzZSBr
QnVmZmVyOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRCdWZmZXJQYXJhbWV0ZXIodGFyZ2V0
LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtSZW5kZXJidWZmZXI6Cisg
ICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBu
YW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1RleHR1cmU6CisgICAgICAgIGlu
Zm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Uga1ZlcnRleEF0dHJpYjoKKyAgICAgICAgLy8gdGFyZ2V0ID0+IGlu
ZGV4CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFZlcnRleEF0dHJpYih0YXJnZXQsIHBuYW1l
LCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwor
fQorCitlbnVtIFdoaWNoUHJvZ3JhbUNhbGwgeworICAgIGtQcm9ncmFtUGFyYW1ldGVyLCBrVW5p
Zm9ybQorfTsKKworc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7Cisg
ICAgaWYgKCFleHRlbnNpb24pCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBzd2l0Y2gg
KGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xM
b3NlQ29udGV4dE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVMT0ROYW1lOgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFNoYWRlclRleHR1cmVMT0QqPihl
eHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyo+KGV4dGVuc2lvbikpOworICAg
IGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVHNSR0JOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVHNSR0IqPihleHRlbnNpb24pKTsKKyAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRGcmFnRGVwdGhOYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVEZyYWdEZXB0aCo+KGV4dGVu
c2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEJsZW5kTWluTWF4TmFtZToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRCbGVu
ZE1pbk1heCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRlbnNpb24pKTsKKyAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgorICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVGbG9hdCo+
KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdExp
bmVhck5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6CisgICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdCo+KGV4
dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXJOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKKyAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6CisgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVydGV4QXJyYXlPYmpl
Y3QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNFbGVtZW50SW5k
ZXhVaW50TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1JlbmRlcmVySW5m
byo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVidWdTaGFk
ZXJzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUFZSVENOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+KGV4dGVuc2lvbikp
OworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDTmFt
ZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVyZSo+KGV4dGVuc2lv
bikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZlcnNOYW1lOgorICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRHJh
d0J1ZmZlcnMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpBTkdMRUlu
c3RhbmNlZEFycmF5c05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNpb24pKTsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGpzTnVsbCgpOworfQorCit2
b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZpbXBs
KCkpOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7
CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNo
YWRlcnM7CisgICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgc2hhZGVycywgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfQorICAgIGlmICgh
c3VjY2VlZCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXpl
KCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IHNoYWRlcnNbaWldLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAs
IGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAK
KyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAgIGNv
bnN0IFN0cmluZyBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNv
bnRleHQuZ2V0RXh0ZW5zaW9uKG5hbWUpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBleHRlbnNpb24pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
Z2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtCdWZmZXIpOworfQorCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9
IDMpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50
MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFy
Z2V0LCBhdHRhY2htZW50LCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEpCisgICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAgIHVuc2ln
bmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0g
SlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgdW5z
aWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIo
cHJvZ3JhbSwgcG5hbWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVj
LCBrUmVuZGVyYnVmZmVyKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAg
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmluaGVy
aXRzKEpTV2ViR0xTaGFkZXI6OmluZm8oKSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjKTsKKyAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEdl
dEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgaWYgKGNv
bnRleHQuaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgVmVj
dG9yPFN0cmluZz4gdmFsdWUgPSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkg
PCB2YWx1ZS5zaXplKCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsIHZhbHVlW2lpXSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAw
LCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1RleHR1cmUpOworfQorCitKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0q
IHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
KTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGlmICgh
bG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICBXZWJHTEdldElu
Zm8gaW5mbyA9IGNvbnRleHQuZ2V0VW5pZm9ybShwcm9ncmFtLCBsb2NhdGlvbiwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2Jq
ZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Citib29sIHRvVmVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT4mIHZlY3RvcikKK3sKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1
ZSk7CisgICAgaW50MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkudG9JbnQzMihleGVjKTsKKyAgICAKKyAgICBpZiAoIXZlY3Rv
ci50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHZlY3Rvci5yZXNpemUobGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KGV4
ZWMsIGkpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYudG9OdW1i
ZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZW51bSBEYXRh
RnVuY3Rpb25Ub0NhbGwgeworICAgIGZfdW5pZm9ybTF2LCBmX3VuaWZvcm0ydiwgZl91bmlmb3Jt
M3YsIGZfdW5pZm9ybTR2LAorICAgIGZfdmVydGV4QXR0cmliMXYsIGZfdmVydGV4QXR0cmliMnYs
IGZfdmVydGV4QXR0cmliM3YsIGZfdmVydGV4QXR0cmliNHYKK307CisKK2VudW0gRGF0YUZ1bmN0
aW9uTWF0cml4VG9DYWxsIHsKKyAgICBmX3VuaWZvcm1NYXRyaXgyZnYsIGZfdW5pZm9ybU1hdHJp
eDNmdiwgZl91bmlmb3JtTWF0cml4NGZ2Cit9OworCitzdGF0aWMgYm9vbCBmdW5jdGlvbkZvclVu
aWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCit7CisgICAgc3dpdGNoIChmKSB7CisgICAgY2Fz
ZSBmX3VuaWZvcm0xdjoKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgIGNhc2UgZl91bmlmb3Jt
M3Y6CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIEpTQzo6
SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3sKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
KyAgICAKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSAwOworICAgIGxvbmcg
aW5kZXggPSAtMTsKKyAgICAKKyAgICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3JtKGYpKSB7CisgICAg
ICAgIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICAgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICB9IGVsc2UKKyAgICAgICAgaW5kZXggPSBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIAorICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgCisg
ICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAg
IAorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTFmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0yZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdW5pZm9ybTN2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2KGxvY2F0
aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlv
biwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgZl92ZXJ0ZXhBdHRyaWIxdjoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2
KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGZfdmVydGV4QXR0cmliMnY6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjJm
dihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIz
ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
NGZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPGZsb2F0LCA2
ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
CisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4
dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVu
aWZvcm0yZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9y
bTNmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2
KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0
cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRy
aWIyZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjNmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
NGZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0
YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjb250ZXh0KQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0g
MikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFy
cmF5ID0gdG9JbnQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICAKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBz
d2l0Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgICAgIGNvbnRl
eHQudW5pZm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgICAgICBjb250ZXh0
LnVuaWZvcm0yaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgorICAgICAgICAgICAgY29udGV4dC51
bmlmb3JtM2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgICAgIGNvbnRleHQudW5p
Zm9ybTRpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIAorICAgIAorICAgIFZlY3RvcjxpbnQsIDY0PiBh
cnJheTsKKyAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LCBhcnJheSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAKKyAg
ICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgICAgICBjb250ZXh0LnVu
aWZvcm0xaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgIGNvbnRleHQudW5pZm9y
bTJpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtM2l2
KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9j
YXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMg
SlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwg
ZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRl
eHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1
cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CisgICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
ID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7CisgICAgCisgICAgYm9vbCB0cmFuc3Bvc2UgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0Jvb2xlYW4oZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgCisgICAgUmVmUHRyPEZsb2F0MzJBcnJh
eT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIp
KTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkg
eworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6
CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4M2Z2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKKyAgICAgICAgICAg
IGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5
LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OworICAgIGlm
ICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIHN3aXRjaCAoZikg
eworICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1N
YXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6CisgICAg
ICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5k
YXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5p
Zm9ybU1hdHJpeDRmdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25mKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkp
OworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZf
dW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitK
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KEpTQzo6
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2
LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25pKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3Jt
TWF0cml4MmZ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIx
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92
ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMnYsIGV4ZWMsIGlt
cGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZl
cnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0
diwgZXhlYywgaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCi0KLSNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkVY
VEJsZW5kTWluTWF4LmgiCi0jaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgiCi0jaW5jbHVkZSAiRVhU
U2hhZGVyVGV4dHVyZUxPRC5oIgotI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5oIgotI2luY2x1ZGUgIkVYVHNSR0IuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkpTRVhU
QmxlbmRNaW5NYXguaCIKLSNpbmNsdWRlICJKU0VYVEZyYWdEZXB0aC5oIgotI2luY2x1ZGUgIkpT
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIgotI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljLmgiCi0jaW5jbHVkZSAiSlNFWFRzUkdCLmgiCi0jaW5jbHVkZSAiSlNIVE1MQ2FudmFz
RWxlbWVudC5oIgotI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkpT
SW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVk
ZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxv
YXQuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIkpT
T0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdExp
bmVhci5oIgotI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJK
U1dlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgi
Ci0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJK
U1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnUmVu
ZGVyZXJJbmZvLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgotI2luY2x1ZGUg
IkpTV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMuaCIK
LSNpbmNsdWRlICJKU1dlYkdMRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMTG9zZUNv
bnRleHQuaCIKLSNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkpTV2ViR0xS
ZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiSlNX
ZWJHTFRleHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCi0jaW5jbHVkZSAiSlNXZWJLaXRD
U1NNYXRyaXguaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0Vs
ZW1lbnRJbmRleFVpbnQuaCIKLSNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0j
aW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGlu
ZWFyLmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5o
IgotI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgotI2lu
Y2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1
Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCi0jaW5jbHVk
ZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0j
aW5jbHVkZSAiV2ViR0xFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgi
Ci0jaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5o
IgotI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oIgotI2luY2x1ZGUgIldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKLSNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
VHlwZWRBcnJheXMuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotCi0jaWYgRU5BQkxF
KFZJREVPKQotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hUTUxW
aWRlb0VsZW1lbnQuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCi17
Ci0gICAgc3dpdGNoIChpbmZvLmdldFR5cGUoKSkgewotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjpr
VHlwZUJvb2w6Ci0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOwotICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2xBcnJheTogewotICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5m
by5nZXRCb29sQXJyYXkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVl
LnNpemUoKTsgKytpaSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtp
aV0pKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVj
dCwgbGlzdCk7Ci0gICAgfQotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgotICAg
ICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRGbG9hdCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsK
LSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVOdWxsOgotICAgICAgICByZXR1cm4ganNOdWxs
KCk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlU3RyaW5nOgotICAgICAgICByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW5mby5nZXRTdHJpbmcoKSk7Ci0gICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlVW5zaWduZWRJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZv
LmdldFVuc2lnbmVkSW50KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVm
ZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xCdWZmZXIoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xG
bG9hdEFycmF5KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZm
ZXI6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJH
TEZyYW1lYnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJy
YXk6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJH
TEludEFycmF5KCkpOwotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgV2ViR0xPYmplY3RBcnJheQot
ICAgIC8vIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMT2JqZWN0QXJyYXk6Ci0gICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xQcm9ncmFtOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xQcm9ncmFtKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVdlYkdMUmVuZGVyYnVmZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSk7Ci0gICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xUZXh0dXJlOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xUZXh0dXJlKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRCeXRlQXJyYXk6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KCkp
OwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRJbnRBcnJheToKLSAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWdu
ZWRJbnRBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlu
Zm8uZ2V0V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygpKTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
Ci19Ci0KLWVudW0gT2JqZWN0VHlwZSB7Ci0gICAga0J1ZmZlciwga1JlbmRlcmJ1ZmZlciwga1Rl
eHR1cmUsIGtWZXJ0ZXhBdHRyaWIKLX07Ci0KLXN0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFt
ZXRlcihKU1dlYkdMUmVuZGVyaW5nQ29udGV4dCogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVj
dFR5cGUgb2JqZWN0VHlwZSkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIp
Ci0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IG9iai0+aW1wbCgpOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbzsKLSAgICBzd2l0Y2gg
KG9iamVjdFR5cGUpIHsKLSAgICBjYXNlIGtCdWZmZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0
LmdldEJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2Uga1JlbmRlcmJ1ZmZlcjoKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBrVGV4dHVyZToKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VGV4UGFyYW1ldGVyKHRh
cmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVmVydGV4QXR0cmli
OgotICAgICAgICAvLyB0YXJnZXQgPT4gaW5kZXgKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0
VmVydGV4QXR0cmliKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb2Jq
LT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLWVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7Ci0g
ICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCi19OwotCi1zdGF0aWMgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViR0xF
eHRlbnNpb24qIGV4dGVuc2lvbikKLXsKLSAgICBpZiAoIWV4dGVuc2lvbikKLSAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwotICAgIHN3aXRjaCAoZXh0ZW5zaW9uLT5nZXROYW1lKCkpIHsKLSAgICBj
YXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTExvc2VDb250ZXh0TmFtZToKLSAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTExvc2VDb250ZXh0Kj4o
ZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUU2hhZGVyVGV4dHVyZUxP
RE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8RVhUU2hhZGVyVGV4dHVyZUxPRCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY05hbWU6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUc1JHQk5h
bWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
RVhUc1JHQio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEZyYWdE
ZXB0aE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8RVhURnJhZ0RlcHRoKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lv
bjo6RVhUQmxlbmRNaW5NYXhOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PEVYVEJsZW5kTWluTWF4Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6T0VTU3RhbmRhcmREZXJpdmF0aXZlc05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTU3RhbmRhcmREZXJp
dmF0aXZlcyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1
cmVGbG9hdE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4
dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXRMaW5lYXIqPihl
eHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0
TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxPRVNUZXh0dXJlSGFsZkZsb2F0Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVh
cio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1ZlcnRleEFycmF5
T2JqZWN0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246Ok9FU0VsZW1lbnRJbmRleFVpbnROYW1lOgotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU0VsZW1lbnRJbmRleFVpbnQqPihl
eHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlYnVnUmVuZGVyZXJJ
bmZvTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnUmVuZGVyZXJJbmZvKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1NoYWRlcnNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVidWdTaGFkZXJzKj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Q05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQ05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKj4oZXh0
ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZXB0aFRleHR1cmVOYW1l
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdl
YkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6
V2ViR0xEcmF3QnVmZmVyc05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEcmF3QnVmZmVycyo+KGV4dGVuc2lvbikpOwotICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OkFOR0xFSW5zdGFuY2VkQXJyYXlzTmFtZToKLSAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBTkdMRUluc3RhbmNlZEFy
cmF5cyo+KGV4dGVuc2lvbikpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4ganNOdWxsKCk7Ci19Ci0KLXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhy
b3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29u
dGV4dCA9IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3Jh
bTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dy
YW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBWZWN0b3I8UmVmUHRyPFdl
YkdMU2hhZGVyPj4gc2hhZGVyczsKLSAgICBib29sIHN1Y2NlZWQgPSBjb250ZXh0LmdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAg
ICB9Ci0gICAgaWYgKCFzdWNjZWVkKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkg
PCBzaGFkZXJzLnNpemUoKTsgKytpaSkKLSAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhleGVjLCBn
bG9iYWxPYmplY3QoKSwgc2hhZGVyc1tpaV0uZ2V0KCkpKTsKLSAgICByZXR1cm4gY29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOwotfQotCi1KU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7Ci0KLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAg
Y29uc3QgU3RyaW5nIG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0g
Y29udGV4dC5nZXRFeHRlbnNpb24obmFtZSk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGV4dGVuc2lvbik7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdl
dE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrQnVmZmVyKTsKLX0KLQotSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDMpCi0g
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgdW5zaWduZWQgYXR0YWNobWVudCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDIpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNv
bnRleHQuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVu
dCwgcG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgp
LnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9
IGNvbnRleHQuZ2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19
Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIo
RXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikK
LSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5n
ZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5m
byk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFt
ZXRlcih0aGlzLCBleGVjLCBrUmVuZGVyYnVmZmVyKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlu
aGVyaXRzKEpTV2ViR0xTaGFkZXI6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKLSAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9X
cmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJH
TEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUs
IGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIGlmIChjb250ZXh0
LmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIFZlY3RvcjxT
dHJpbmc+IHZhbHVlID0gY29udGV4dC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0gICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgdmFs
dWUuc2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShl
eGVjLCB2YWx1ZVtpaV0pKTsKLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xv
YmFsT2JqZWN0KCksIGxpc3QpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXRPYmpl
Y3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1RleHR1cmUpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYg
Y29udGV4dCA9IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJv
Z3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXBy
b2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0
VW5pZm9ybShwcm9ncmFtLCBsb2NhdGlvbiwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQot
Ci1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywg
a1ZlcnRleEF0dHJpYik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KLWJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotewotICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgIGludDMyX3QgbGVuZ3RoID0gb2Jq
ZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIo
ZXhlYyk7Ci0KLSAgICBpZiAoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZlY3Rvci5yZXNpemUobGVuZ3RoKTsKLQotICAgIGZv
ciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTQzo6SlNWYWx1
ZSB2ID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmVjdG9yW2ldID0gc3Rh
dGljX2Nhc3Q8VD4odi50b051bWJlcihleGVjKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWVudW0gRGF0YUZ1bmN0aW9uVG9DYWxsIHsKLSAgICBmX3VuaWZvcm0xdiwgZl91bmlm
b3JtMnYsIGZfdW5pZm9ybTN2LCBmX3VuaWZvcm00diwKLSAgICBmX3ZlcnRleEF0dHJpYjF2LCBm
X3ZlcnRleEF0dHJpYjJ2LCBmX3ZlcnRleEF0dHJpYjN2LCBmX3ZlcnRleEF0dHJpYjR2Ci19Owot
Ci1lbnVtIERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCB7Ci0gICAgZl91bmlmb3JtTWF0cml4MmZ2
LCBmX3VuaWZvcm1NYXRyaXgzZnYsIGZfdW5pZm9ybU1hdHJpeDRmdgotfTsKLQotc3RhdGljIGJv
b2wgZnVuY3Rpb25Gb3JVbmlmb3JtKERhdGFGdW5jdGlvblRvQ2FsbCBmKQotewotICAgIHN3aXRj
aCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAg
ICBjYXNlIGZfdW5pZm9ybTN2OgotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwg
ZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKLSAgICAKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSAw
OwotICAgIGxvbmcgaW5kZXggPSAtMTsKLSAgICAKLSAgICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3Jt
KGYpKSB7Ci0gICAgICAgIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICAgICAgaWYgKCFsb2NhdGlvbiAm
JiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
aW5kZXggPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotCi0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICAgICAgCi0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQz
MkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAg
c3dpdGNoIChmKSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgICAgICBjb250
ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgICAgICAgICAgY29udGV4
dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAgICAgIGNvbnRleHQu
dW5pZm9ybTNmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgICAgICBjb250ZXh0LnVu
aWZvcm00ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6Ci0gICAgICAgICAgICBjb250ZXh0
LnZlcnRleEF0dHJpYjFmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2OgotICAgICAgICAgICAgY29udGV4
dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAgICAgIGNvbnRl
eHQudmVydGV4QXR0cmliM2Z2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6Ci0gICAgICAgICAgICBjb250
ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgVmVj
dG9yPGZsb2F0LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKGYpIHsKLSAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAg
ICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgp
LCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgIGNv
bnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVj
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAgY29udGV4
dC51bmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTR2OgotICAgICAgICBjb250ZXh0LnVu
aWZvcm00ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjoKLSAgICAgICAgY29udGV4dC52
ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2OgotICAgICAgICBjb250ZXh0LnZl
cnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6Ci0gICAgICAgIGNvbnRleHQudmVy
dGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKLSAgICAgICAgY29udGV4dC52ZXJ0
ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0
aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwotICAKLSAgICBSZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJh
eSA9IHRvSW50MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkgewotICAgICAgICBzd2l0Y2gg
KGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5p
Zm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZv
cm0yaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3Jt
M2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRp
dihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQotCi0KLSAgICBWZWN0b3I8aW50LCA2ND4gYXJyYXk7Ci0gICAgaWYg
KCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKGYpIHsKLSAg
ICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24s
IGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgZl91bmlmb3JtMnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTJpdihsb2NhdGlvbiwgYXJy
YXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBm
X3VuaWZvcm0zdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5k
YXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5p
Zm9ybTR2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmRhdGEo
KSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1zdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFG
dW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICE9IDMpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAg
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246
OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlv
biAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotCi0gICAgYm9vbCB0cmFuc3Bvc2Ug
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgICAgIAotICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJB
cnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIAotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGlmICh3ZWJHTEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikg
ewotICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoKLSAgICAgICAgICAgIGNvbnRleHQu
dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6
Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4NGZ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4
NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBW
ZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDIpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjKTsKLQotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2
OgotICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBmX3VuaWZvcm1NYXRyaXgzZnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihs
b2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKLSAgICAgICAgY29udGV4
dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0xdiwgZXhlYywgaW1w
bCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MWl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZf
dW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0ydiwgZXhlYywg
aW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25m
KGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm00diwgZXhl
YywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rp
b25pKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIGV4
ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwgZXhlYywgaW1wbCgpKTsKLX0KLQot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91
bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjF2LCBleGVjLCBpbXBs
KCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
ZihmX3ZlcnRleEF0dHJpYjJ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBp
bXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uZihmX3ZlcnRleEF0dHJpYjR2LCBleGVjLCBpbXBsKCkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24g
MTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI5ODMsNyArMjk4Myw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkaW50
ZXJmYWNlKSBlcSAiSW1wbCIpIHsKICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAg
ICR7aW1wbFR5cGV9KiByb290ID0gJmpzJHtpbnRlcmZhY2VOYW1lfS0+aW1wbCgpO1xuIjsKICAg
ICAgICAgICAgIH0gZWxzaWYgKEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEg
IkltcGxXZWJHTFJlbmRlcmluZ0NvbnRleHQiKSB7Ci0gICAgICAgICAgICAgICAgJHJvb3RTdHJp
bmcgID0gIiAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIHJvb3QgPSBXVEY6OmdldFB0cihqcyR7
aW50ZXJmYWNlTmFtZX0tPmltcGwoKS5jb250ZXh0KCkpO1xuIjsKKyAgICAgICAgICAgICAgICAk
cm9vdFN0cmluZyAgPSAiICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIHJvb3QgPSBXVEY6
OmdldFB0cihqcyR7aW50ZXJmYWNlTmFtZX0tPmltcGwoKS5jb250ZXh0KCkpO1xuIjsKICAgICAg
ICAgICAgIH0gZWxzaWYgKEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEgIklt
cGxGcmFtZSIpIHsKICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAgIEZyYW1lKiBy
b290ID0gV1RGOjpnZXRQdHIoanMke2ludGVyZmFjZU5hbWV9LT5pbXBsKCkuZnJhbWUoKSk7XG4i
OwogICAgICAgICAgICAgICAgICRyb290U3RyaW5nIC49ICIgICAgaWYgKCFyb290KVxuIjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsOSArNTIsMTAgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCi0jaWYgRU5BQkxFKFdFQkdMKSAg
ICAKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjEyLDcgKzIxMyw4IEBAIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4KICAgICAgICAgICAgIGlmIChtX2NvbnRl
eHQgJiYgIW1fY29udGV4dC0+aXMzZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRl
eHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSh0aGlzLCBzdGF0aWNfY2FzdDxXZWJH
TENvbnRleHRBdHRyaWJ1dGVzKj4oYXR0cnMpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQg
PSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUodGhpcywgc3RhdGljX2Nhc3Q8V2Vi
R0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSwgdHlwZSk7CisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICAvLyBO
ZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQg
Y3JlYXRlZCBmb3IgdGhlIENhbnZhcwogICAgICAgICAgICAgICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKQEAgLTI1NSw3ICsyNTcsNyBAQCBib29sIEhU
TUxDYW52YXNFbGVtZW50OjppczJkVHlwZShjb25zdCBTCiBib29sIEhUTUxDYW52YXNFbGVtZW50
OjppczNkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgLy8gUmV0YWluIHN1cHBvcnQg
Zm9yIHRoZSBsZWdhY3kgIndlYmtpdC0zZCIgbmFtZS4KLSAgICByZXR1cm4gdHlwZSA9PSAid2Vi
Z2wiIHx8IHR5cGUgPT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwgdHlwZSA9PSAid2Via2l0LTNk
IjsKKyAgICByZXR1cm4gdHlwZSA9PSAid2ViZ2wiIHx8IHR5cGUgPT0gImV4cGVyaW1lbnRhbC13
ZWJnbCIgfHwgdHlwZSA9PSAid2Via2l0LTNkIiB8fCB0eXBlID09ICJleHBlcmltZW50YWwtd2Vi
Z2wyIjsKIH0KICNlbmRpZgogCkBAIC0zMjcsNyArMzI5LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6cmVzZXQoKQogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGlmIChpczNEKCkgJiYgb2xk
U2l6ZSAhPSBzaXplKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dCo+KG1fY29udGV4dC5nZXQoKSktPnJlc2hhcGUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAg
ICBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4obV9jb250ZXh0LmdldCgp
KS0+cmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAjZW5kaWYKIAogICAgIGlmIChhdXRvIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgewpAQCAtMzk0LDcgKzM5Niw3IEBAIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ28KIAogI2lmIEVOQUJMRShXRUJHTCkgICAg
CiAgICAgaWYgKGlzM0QoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250
ZXh0Kj4obV9jb250ZXh0LmdldCgpKS0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworICAgICAgICBz
dGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4obV9jb250ZXh0LmdldCgpKS0+
bWFya0xheWVyQ29tcG9zaXRlZCgpOwogI2VuZGlmCiB9CiAKQEAgLTQ3NSw3ICs0NzcsNyBAQCBS
ZWZQdHI8SW1hZ2VEYXRhPiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0CiAgICAgaWYgKCFpczNEKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
dHggPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkp
OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCA9IHN0YXRpY19jYXN0PFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqPihtX2NvbnRleHQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGN0
eC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKICNlbHNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuY3Bw
CShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUlu
c3RhbmNlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1BTkdMRUluc3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRB
cnJheXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorQU5HTEVJbnN0YW5jZWRBcnJh
eXM6OkFOR0xFSW5zdGFuY2VkQXJyYXlzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRl
eHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpAQCAtNDgsNyArNDgsNyBA
QCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBBTkdMRUluc3RhCiAgICAgcmV0dXJuIEFO
R0xFSW5zdGFuY2VkQXJyYXlzTmFtZTsKIH0KIAotYm9vbCBBTkdMRUluc3RhbmNlZEFycmF5czo6
c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgQU5HTEVJbnN0
YW5jZWRBcnJheXM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0
KQogewogI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJy
YXlzLmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FO
R0xFSW5zdGFuY2VkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICszMCwxNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIEFOR0xFSW5zdGFuY2VkQXJy
YXlzIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBs
aWNpdCBBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAg
ICAgdmlydHVhbCB+QU5HTEVJbnN0YW5jZWRBcnJheXMoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5z
aW9uTmFtZSBnZXROYW1lKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZEFOR0xF
KEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVp
IHByaW1jb3VudCk7CiAgICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQs
IEdDM0RzaXplaSBwcmltY291bnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxNzgz
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDcgQEAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpDYW52YXNSZW5kZXJpbgogI2lmICFFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CiAgICAgQVNTRVJUX1VOVVNFRCh1c2VzRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUsICF1c2Vz
RGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpOwogI2VuZGlmCisgICAgbV90eXBlID0gIjJkIjsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnVud2luZFN0YXRlU3RhY2soKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXMyZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKSB7fQogICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KQEAg
LTczLDYgKzc0LDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICB2b2lkIGNoZWNrT3JpZ2luKGNv
bnN0IFVSTCYpOwogCisgICAgU3RyaW5nIG1fdHlwZTsKIHByaXZhdGU6CiAgICAgSFRNTENhbnZh
c0VsZW1lbnQqIG1fY2FudmFzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0VYVEJsZW5kTWluTWF4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9FWFRCbGVuZE1pbk1heC5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVEJsZW5kTWluTWF4OjpFWFRC
bGVuZE1pbk1heChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitFWFRCbGVuZE1pbk1h
eDo6RVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAg
ICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFWFRCbGVuZE1pbk1h
eCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
RVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgRVhU
QmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVY
VEJsZW5kTWluTWF4KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNv
bnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURnJhZ0Rl
cHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFn
RGVwdGguY3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9FWFRGcmFnRGVwdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRVhURnJhZ0RlcHRoOjpFWFRGcmFnRGVwdGgoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQorRVhURnJhZ0RlcHRoOjpFWFRGcmFnRGVwdGgoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRl
eHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGgu
aAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURnJh
Z0RlcHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBFWFRGcmFnRGVwdGggZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24g
ewogcHVibGljOgotICAgIGV4cGxpY2l0IEVYVEZyYWdEZXB0aChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBFWFRGcmFnRGVwdGgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopOwogICAgIHZpcnR1YWwgfkVYVEZyYWdEZXB0aCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNp
b25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwCShyZXZpc2lvbiAxNzgz
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUVYVFNoYWRlclRleHR1cmVMT0Q6OkVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQorRVhUU2hhZGVyVGV4dHVyZUxPRDo6RVhUU2hhZGVyVGV4dHVy
ZUxPRChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRl
bnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VY
VFNoYWRlclRleHR1cmVMT0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVYVFNoYWRlclRl
eHR1cmVMT0QgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4
cGxpY2l0IEVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAg
ZXhwbGljaXQgRVhUU2hhZGVyVGV4dHVyZUxPRChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAgICAgdmlydHVhbCB+RVhUU2hhZGVyVGV4dHVyZUxPRCgpOwogCiAgICAgdmlydHVhbCBFeHRl
bnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
LmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhU
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yzo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzo6RVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4
dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgJKHJldmlzaW9uIDE3
ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljIGZpbmFsIDogcHVibGlj
IFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2
aXJ0dWFsIH5FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMoKTsKIAogICAgIHZpcnR1YWwgRXh0
ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9FWFRzUkdCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9FWFRzUkdCLmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhUc1JHQi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FWFRzUkdCOjpFWFRzUkdCKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK0VYVHNSR0I6OkVYVHNSR0IoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUc1JHQi5oCShyZXZpc2lvbiAxNzgzNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFWFRzUkdCIGZpbmFs
IDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFWFRzUkdC
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0IEVYVHNSR0IoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVYVHNSR0IoKTsKIAogICAgIHZpcnR1
YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmNwcAkocmV2
aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudElu
ZGV4VWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1PRVNFbGVtZW50SW5kZXhVaW50OjpPRVNFbGVtZW50SW5kZXhVaW50KFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU0VsZW1lbnRJbmRleFVpbnQ6Ok9FU0Vs
ZW1lbnRJbmRleFVpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oCShyZXZpc2lvbiAxNzgzNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBP
RVNFbGVtZW50SW5kZXhVaW50IGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBPRVNFbGVtZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIGV4cGxpY2l0IE9FU0VsZW1lbnRJbmRleFVpbnQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU0VsZW1lbnRJbmRleFVpbnQoKTsKIAogICAgIHZp
cnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVz
LmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNTdGFuZGFyZERlcml2YXRpdmVzOjpPRVNTdGFu
ZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU1N0YW5k
YXJkRGVyaXZhdGl2ZXM6Ok9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJp
dmF0aXZlcy5oCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNTdGFuZGFyZERlcml2YXRpdmVzIGZp
bmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBPRVNT
dGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0
IE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAg
IHZpcnR1YWwgfk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5z
aW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNUZXh0
dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
CitPRVNUZXh0dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5oCShyZXZpc2lv
biAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIE9FU1RleHR1cmVGbG9hdCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgT0VTVGV4dHVyZUZsb2F0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAg
IE9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVh
bCB+T0VTVGV4dHVyZUZsb2F0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFt
ZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUZsb2F0TGluZWFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotT0VT
VGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0KQorT0VTVGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRM
aW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0
ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNUZXh0dXJlRmxvYXRMaW5lYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNU
ZXh0dXJlRmxvYXRMaW5lYXIgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGlj
OgotICAgIGV4cGxpY2l0IE9FU1RleHR1cmVGbG9hdExpbmVhcihXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBPRVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVGbG9hdExpbmVhcigpOwogCiAg
ICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQu
Y3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNU
ZXh0dXJlSGFsZkZsb2F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxvYXQ6Ok9FU1RleHR1cmVIYWxm
RmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VTVGV4dHVyZUhhbGZGbG9h
dDo6T0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0
KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmgJKHJldmlzaW9uIDE3
ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXQgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24g
ewogcHVibGljOgotICAgIE9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUhhbGZGbG9hdCgpOwogCiAgICAgdmlydHVhbCBFeHRl
bnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3Bw
CShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0
dXJlSGFsZkZsb2F0TGluZWFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI6Ok9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4
dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxm
RmxvYXRMaW5lYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVi
bGljOgotICAgIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcihXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKik7CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcigpOwogCiAgICAg
dmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5j
cHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1Zl
cnRleEFycmF5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1ZlcnRleEFycmF5T2JqZWN0OjpPRVNWZXJ0ZXhBcnJh
eU9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitPRVNWZXJ0ZXhBcnJheU9i
amVjdDo6T0VTVmVydGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29u
dGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmgJKHJldmlz
aW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwxNCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U7CiBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwogCiB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdCBm
aW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgT0VTVmVydGV4QXJy
YXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgT0VTVmVydGV4QXJyYXlPYmpl
Y3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1ZlcnRleEFy
cmF5T2JqZWN0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3Njk5NCkJKGZyb20gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoxNzY5OTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgi
CisKKyNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJFWFRCbGVuZE1pbk1heC5oIgorI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgorI2lu
Y2x1ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKKyNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMuaCIKKyNpbmNsdWRlICJFWFRzUkdCLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgor
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5jbHVkZSAiT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgorI2lu
Y2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxm
RmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCisjaW5jbHVk
ZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJHTEFjdGl2
ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMu
aCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIldl
YkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5oIgor
I2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiV2Vi
R0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVk
ZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25G
b3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5oIgorCisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMy
QXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0
ZW1wdHMgPSAxLjA7Citjb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2
OworCituYW1lc3BhY2UgeworCisgICAgY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciB7
CisgICAgcHVibGljOgorICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKERyYXdpbmdC
dWZmZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyQmluZGlu
ZykKKyAgICAgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCisgICAgICAg
ICAgICAsIG1fZnJhbWVidWZmZXJCaW5kaW5nKGZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBm
b3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29t
bWl0KCk7CisgICAgICAgIH0KKworICAgICAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQKKyAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7
CisgICAgICAgIFdlYkdMRnJhbWVidWZmZXIqIG1fZnJhbWVidWZmZXJCaW5kaW5nOworICAgIH07
CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwor
ICAgIH0KKworICAgIHZvaWQgY2xpcDFEKEdDM0RpbnQgc3RhcnQsIEdDM0RzaXplaSByYW5nZSwg
R0MzRHNpemVpIHNvdXJjZVJhbmdlLCBHQzNEaW50KiBjbGlwcGVkU3RhcnQsIEdDM0RzaXplaSog
Y2xpcHBlZFJhbmdlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlw
cGVkUmFuZ2UpOworICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CisgICAgICAgICAgICByYW5nZSAr
PSBzdGFydDsKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBHQzNE
aW50IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7CisgICAgICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkK
KyAgICAgICAgICAgIHJhbmdlIC09IGVuZCAtIHNvdXJjZVJhbmdlOworICAgICAgICAqY2xpcHBl
ZFN0YXJ0ID0gc3RhcnQ7CisgICAgICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKKyAgICB9CisK
KyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIG5vIGNsaXBwaW5nIGlzIG5lY2Vzc2FyeSwgaS5lLiwg
eCwgeSwgd2lkdGgsIGhlaWdodCBzdGF5IHRoZSBzYW1lLgorICAgIGJvb2wgY2xpcDJEKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0
LAorICAgICAgICAgICAgICAgIEdDM0RpbnQqIGNsaXBwZWRYLCBHQzNEaW50KiBjbGlwcGVkWSwg
R0MzRHNpemVpKiBjbGlwcGVkV2lkdGgsIEdDM0RzaXplaSpjbGlwcGVkSGVpZ2h0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBwZWRZICYmIGNsaXBwZWRXaWR0aCAmJiBj
bGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgY2xpcDFEKHgsIHdpZHRoLCBzb3VyY2VXaWR0aCwgY2xp
cHBlZFgsIGNsaXBwZWRXaWR0aCk7CisgICAgICAgIGNsaXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhl
aWdodCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOworICAgICAgICByZXR1cm4gKCpjbGlwcGVk
WCAhPSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlwcGVkV2lkdGggIT0gd2lkdGggfHwgKmNs
aXBwZWRIZWlnaHQgIT0gaGVpZ2h0KTsKKyAgICB9CisKKyAgICBHQzNEaW50IGNsYW1wKEdDM0Rp
bnQgdmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZSA8IG1pbikKKyAgICAgICAgICAgIHZhbHVlID0gbWluOworICAgICAgICBpZiAodmFsdWUg
PiBtYXgpCisgICAgICAgICAgICB2YWx1ZSA9IG1heDsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhl
IEFTQ0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCisgICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0
aW9uIDMuMS4KKyAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKKyAg
ICB7CisgICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQg
YCBAIFwgJyBERUwuCisgICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2CisgICAgICAgICAg
ICAmJiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9
ICdcXCcgJiYgYyAhPSAnXCcnKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8v
IEhvcml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJy
aWFnZSByZXR1cm4KKyAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCisgICAgICAgIGlmIChjID49
IDkgJiYgYyA8PSAxMykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc1ByZWZpeFJlc2VydmVkKGNvbnN0IFN0cmluZyYg
bmFtZSkKKyAgICB7CisgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImdsXyIpIHx8IG5hbWUu
c3RhcnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJfd2ViZ2xfIikpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIFN0cmlwcyBjb21tZW50cyBmcm9tIHNoYWRlciB0ZXh0LiBUaGlzIGFsbG93cyBub24tQVND
SUkgY2hhcmFjdGVycworICAgIC8vIHRvIGJlIHVzZWQgaW4gY29tbWVudHMgd2l0aG91dCBwb3Rl
bnRpYWxseSBicmVha2luZyBPcGVuR0wKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVj
dGluZyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgorICAgIGNsYXNzIFN0cmlw
Q29tbWVudHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJp
bmcmIHN0cikKKyAgICAgICAgICAgIDogbV9wYXJzZVN0YXRlKEJlZ2lubmluZ09mTGluZSkKKyAg
ICAgICAgICAgICwgbV9zb3VyY2VTdHJpbmcoc3RyKQorICAgICAgICAgICAgLCBtX2xlbmd0aChz
dHIubGVuZ3RoKCkpCisgICAgICAgICAgICAsIG1fcG9zaXRpb24oMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGFyc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyByZXN1bHQoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0
aCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHBhcnNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgd2hpbGUgKGhhc01vcmVDaGFyYWN0ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICBwcm9j
ZXNzKGN1cnJlbnQoKSk7CisgICAgICAgICAgICAgICAgLy8gcHJvY2VzcygpIG1pZ2h0IGFkdmFu
Y2UgdGhlIHBvc2l0aW9uLgorICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlQ2hhcmFjdGVycygp
KQorICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHByb2Nlc3MoVUNoYXIpOworCisgICAgICAgIGJvb2wgcGVlayhV
Q2hhciYgY2hhcmFjdGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9wb3Np
dGlvbiArIDEgPj0gbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBVQ2hhciBjdXJyZW50
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04obV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Nv
dXJjZVN0cmluZ1ttX3Bvc2l0aW9uXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWR2YW5j
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxpemUgbmV3bGluZSByZWxh
dGVkIGNoYXJhY3RlcnMuCisgICAgICAgICAgICByZXR1cm4gKGNoYXJhY3RlciA9PSAnXG4nIHx8
IGNoYXJhY3RlciA9PSAnXHInKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZW1pdChVQ2hh
ciBjaGFyYWN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoY2hh
cmFjdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGVudW0gUGFyc2VTdGF0ZSB7CisgICAgICAg
ICAgICAvLyBIYXZlIG5vdCBzZWVuIGFuIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB5
ZXQgb24KKyAgICAgICAgICAgIC8vIHRoaXMgbGluZS4gUG9zc2libGUgdGhhdCB3ZSBtaWdodCBz
ZWUgYSBwcmVwcm9jZXNzb3IKKyAgICAgICAgICAgIC8vIGRpcmVjdGl2ZS4KKyAgICAgICAgICAg
IEJlZ2lubmluZ09mTGluZSwKKworICAgICAgICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9u
ZSBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgIC8vIG9uIHRoaXMg
bGluZS4KKyAgICAgICAgICAgIE1pZGRsZU9mTGluZSwKKworICAgICAgICAgICAgLy8gSGFuZGxp
bmcgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBQYXNzZXMgdGhyb3VnaCBhbGwKKyAgICAgICAg
ICAgIC8vIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRGlzYWJsZXMgY29t
bWVudAorICAgICAgICAgICAgLy8gcHJvY2Vzc2luZy4KKyAgICAgICAgICAgIEluUHJlcHJvY2Vz
c29yRGlyZWN0aXZlLAorCisgICAgICAgICAgICAvLyBIYW5kbGluZyBhIHNpbmdsZS1saW5lIGNv
bW1lbnQuIFRoZSBjb21tZW50IHRleHQgaXMKKyAgICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGgg
YSBzaW5nbGUgc3BhY2UuCisgICAgICAgICAgICBJblNpbmdsZUxpbmVDb21tZW50LAorCisgICAg
ICAgICAgICAvLyBIYW5kbGluZyBhIG11bHRpLWxpbmUgY29tbWVudC4gTmV3bGluZXMgYXJlIHBh
c3NlZAorICAgICAgICAgICAgLy8gdGhyb3VnaCB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisg
ICAgICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKKyAgICAgICAgfTsKKworICAgICAgICBQYXJz
ZVN0YXRlIG1fcGFyc2VTdGF0ZTsKKyAgICAgICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOworICAg
ICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKKyAg
ICAgICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7CisgICAgfTsKKworICAgIHZvaWQgU3RyaXBD
b21tZW50czo6cHJvY2VzcyhVQ2hhciBjKQorICAgIHsKKyAgICAgICAgaWYgKGlzTmV3bGluZShj
KSkgeworICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgc3RhdGUgd2UgYXJlIGluLCBwYXNz
IHRocm91Z2ggbmV3bGluZXMKKyAgICAgICAgICAgIC8vIHNvIHdlIHByZXNlcnZlIGxpbmUgbnVt
YmVycy4KKyAgICAgICAgICAgIGVtaXQoYyk7CisKKyAgICAgICAgICAgIGlmIChtX3BhcnNlU3Rh
dGUgIT0gSW5NdWx0aUxpbmVDb21tZW50KQorICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9
IEJlZ2lubmluZ09mTGluZTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgVUNoYXIgdGVtcCA9IDA7CisgICAgICAgIHN3aXRjaCAobV9wYXJzZVN0YXRlKSB7Cisg
ICAgICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgorICAgICAgICAgICAgaWYgKFdURjo6aXNBU0NJ
SVNwYWNlKGMpKSB7CisgICAgICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGMgPT0gJyMnKSB7CisgICAg
ICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7CisgICAg
ICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhh
bmRsZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7
CisgICAgICAgICAgICBwcm9jZXNzKGMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBNaWRkbGVPZkxpbmU6CisgICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1w
KSkgeworICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgeworICAgICAgICAgICAgICAg
ICAgICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OworICAgICAgICAgICAgICAg
ICAgICBlbWl0KCcgJyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKHRlbXAgPT0gJyonKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IElu
TXVsdGlMaW5lQ29tbWVudDsKKyAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgY29tbWVu
dCBzdGFydCBpbiBjYXNlIHRoZSB1c2VyIGhhcworICAgICAgICAgICAgICAgICAgICAvLyBhbiB1
bmNsb3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCisgICAgICAgICAgICAgICAgICAg
IC8vIHNpZ25hbCBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgZW1pdCgnLycpOworICAg
ICAgICAgICAgICAgICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAgICAgICAgIC8vIE5vIG1h
dHRlciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBpdAorICAgICAgICAgICAgLy8g
dGhyb3VnaC4gRG8gbm90IHBhcnNlIGNvbW1lbnRzIGluIHRoaXMgc3RhdGUuIFRoaXMKKyAgICAg
ICAgICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gbG9uZyB0ZXJtLCBi
dXQgaXQKKyAgICAgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNlcnJvciBwcmVwcm9jZXNz
b3IgZGlyZWN0aXZlLgorICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKKyAgICAgICAgICAgIC8vIFRoZSBu
ZXdsaW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUKKyAgICAg
ICAgICAgIC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBnZXQgb3V0IG9mIHRoZQor
ICAgICAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxvdyBhbGwgb3RoZXIgY2hh
cmFjdGVycy4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSW5NdWx0aUxpbmVD
b21tZW50OgorICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9
PSAnLycpIHsKKyAgICAgICAgICAgICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgZW1p
dCgnLycpOworICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKKyAg
ICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuIFVu
Y2xlYXIgd2hldGhlciB3ZSBtYXkKKyAgICAgICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0
IGVtaXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQorICAgICAgICAgICAgLy8gdG8gcHJl
c2VydmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0Nv
bnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxi
YWNrKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNiKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlIHsgbV9jb250ZXh0LT5mb3JjZUxv
c3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6UmVhbExvc3RDb250ZXh0KTsgfQorICAg
IHZpcnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaygpIHt9Citwcml2YXRl
OgorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OworfTsKKworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikg
eyB9CisgICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgR0MzRGludCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1fc3lu
dGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUpCisgICAgICAgICAgICBtX2NvbnRleHQtPnByaW50R0xF
cnJvclRvQ29uc29sZShtZXNzYWdlKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJp
bmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7Cit9OworCitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKiBhdHRycykKK3sKKyAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlv
biBvZiBhIG5ldyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCisg
ICAgLy8gcGFydGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3Jl
IHRpbWVzIHZpYSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgorICAgIGlmICghZnJh
bWUtPmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xF
bmFibGVkKCkpKSB7CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQs
IGZhbHNlLCB0cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdM
IGNvbnRleHQuIikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29s
IGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxzZTsKKyAgICBEb2N1bWVudCYgdG9wRG9j
dW1lbnQgPSBkb2N1bWVudC50b3BEb2N1bWVudCgpOworICAgIFBhZ2UqIHBhZ2UgPSB0b3BEb2N1
bWVudC5wYWdlKCk7CisgICAgaWYgKHBhZ2UgJiYgIXRvcERvY3VtZW50LnVybCgpLmlzTG9jYWxG
aWxlKCkpIHsKKyAgICAgICAgV2ViR0xMb2FkUG9saWN5IHBvbGljeSA9IHBhZ2UtPm1haW5GcmFt
ZSgpLmxvYWRlcigpLmNsaWVudCgpLndlYkdMUG9saWN5Rm9yVVJMKHRvcERvY3VtZW50LnVybCgp
KTsKKworICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikgeworICAgICAg
ICAgICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBpcyB0byBibG9j
ayBXZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwb2xpY3kg
PT0gV2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExPRyhXZWJHTCwgIldlYkdM
IHBvbGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRlci4iKTsKKyAg
ICAgICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGF0
dHJzID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
KCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgaWYgKCFmcmFt
ZS0+c2V0dGluZ3MoKS5vcGVuR0xNdWx0aXNhbXBsaW5nRW5hYmxlZCgpKQorICAgICAgICAgICAg
YXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICB9CisKKyAgICBhdHRyaWJ1dGVzLm5v
RXh0ZW5zaW9ucyA9IHRydWU7CisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNl
OworICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB0cnVlOworCisgICAgaWYgKGZy
YW1lLT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVXZWJHTFJlbmRlcmluZygpKQorICAgICAgICBh
dHRyaWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5kZXJlciA9IHRydWU7CisKKyAgICBpZiAocGFnZSkK
KyAgICAgICAgYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvID0gcGFnZS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKTsKKworICAgIGlmIChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7CisgICAgICAg
IExPRyhXZWJHTCwgIkNyZWF0ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQg
d2lsbCByZXF1aXJlIGEgcG9saWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcg
V2ViR0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOworICAgICAgICByZW5k
ZXJpbmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuIHJlbmRlcmlu
Z0NvbnRleHQ7CisgICAgfQorCisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50
LnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdp
bmRvdykpOworCisgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkgeworICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxz
ZSwgdHJ1ZSwgIkNvdWxkIG5vdCBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0g
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfRVhUX2RlYnVnX21hcmtlciIpKQorICAgICAgICBleHRlbnNpb25zLT5wdXNoR3JvdXBNYXJr
ZXJFWFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOworICAgIHJlbmRlcmluZ0NvbnRl
eHQtPnN1c3BlbmRJZk5lZWRlZCgpOworCisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Cit9
CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52
YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXMpCisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKKyAg
ICAsIEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFzLT5kb2N1bWVudCgpKQorICAgICwgbV9j
b250ZXh0KDApCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKKyAgICAsIG1fZGlzcGF0Y2hDb250
ZXh0TG9zdEV2ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNo
Q29udGV4dExvc3RFdmVudCkKKyAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCisgICAgLCBt
X3Jlc3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3Jl
Q29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQorICAgICwgbV9jb250ZXh0
TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0
KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRoZXNpemVkRXJy
b3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCht
YXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb24odHJ1ZSkKKyAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkK
K3sKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRN
TENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCwKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVz
KQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3Rp
dmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dChj
b250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4
dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENv
bnRleHRMb3N0RXZlbnQpCisgICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQorICAgICwgbV9y
ZXN0b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNv
bnRleHQpCisgICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoNCkKKyAgICAsIG1fY29udGV4dExv
c3QoZmFsc2UpCisgICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkK
KyAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICwgbV9zeW50aGVzaXplZEVycm9y
c1RvQ29uc29sZSh0cnVlKQorICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4
R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQorICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKGZhbHNlKQorICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQor
eworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250
ZXh0R3JvdXA6OmNyZWF0ZSgpOworICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMp
OworCisgICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0RGltc1sxXSA9IDA7
CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworCisgICAgc2V0dXBGbGFncygpOwor
ICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0
KTsKKyAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0g
ZmFsc2U7CisgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7CisgICAgbV9wYWNrQWxpZ25tZW50
ID0gNDsKKyAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7CisgICAgbV91bnBhY2tGbGlwWSA9IGZh
bHNlOworICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOworICAgIG1fdW5wYWNr
Q29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxU
X1dFQkdMOworICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7CisgICAgbV9jdXJyZW50UHJvZ3Jh
bSA9IDA7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgIG1fcmVuZGVyYnVmZmVy
QmluZGluZyA9IDA7CisgICAgbV9kZXB0aE1hc2sgPSB0cnVlOworICAgIG1fc3RlbmNpbEVuYWJs
ZWQgPSBmYWxzZTsKKyAgICBtX3N0ZW5jaWxNYXNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5j
aWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7CisgICAgbV9zdGVuY2lsRnVuY1JlZiA9IDA7CisgICAg
bV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZG
RkZGRjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAweEZGRkZGRkZGOworICAgIG1fbGF5
ZXJDbGVhcmVkID0gZmFsc2U7CisgICAgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBt
YXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7CisgICAgCisgICAgbV9jbGVhckNvbG9yWzBdID0g
bV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsK
KyAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgbV9jbGVhckRlcHRoID0gMTsKKyAg
ICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9jb2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sx
XSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOworCisgICAgR0MzRGlu
dCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fdGV4dHVyZVVuaXRzLmNs
ZWFyKCk7CisgICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMpOworCisgICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZu
dW1WZXJ0ZXhBdHRyaWJzKTsKKyAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRy
aWJzOworICAgIAorICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1
cmVTaXplKTsKKyAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxl
dmVsQ291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhD
dWJlTWFwVGV4dHVyZVNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0
dXJlU2l6ZSk7CisgICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpj
b21wdXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4
dHVyZVNpemUpOworICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7CisgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAm
bV9tYXhSZW5kZXJidWZmZXJTaXplKTsKKworICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBF
WFRfZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4KKyAgICBtX21heERyYXdCdWZmZXJz
ID0gMDsKKyAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOworCisgICAgbV9iYWNrRHJhd0J1
ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOworICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJl
cXVpcmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKKyAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0g
ZmFsc2U7CisKKyAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9U
eXBlRGVmYXVsdCk7CisgICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9i
amVjdC5nZXQoKSk7CisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVy
dGV4QXJyYXlPYmplY3Q7CisgICAgCisgICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9t
YXhWZXJ0ZXhBdHRyaWJzKTsKKworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAg
ICAgY3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisgICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkpCisgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisKKyAgICBJbnRTaXplIGNh
bnZhc1NpemUgPSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoY2FudmFzU2l6ZSk7CisKKyAgICBtX2Nv
bnRleHQtPnJlc2hhcGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsK
KyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFz
U2l6ZS5oZWlnaHQoKSk7CisgICAgbV9jb250ZXh0LT5zY2lzc29yKDAsIDAsIGNhbnZhc1NpemUu
d2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBtX2NvbnRleHQtPnNldENvbnRl
eHRMb3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0
Q2FsbGJhY2s+KHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJh
Y2s+KHRoaXMpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3Mo
KQoreworICAgIEFTU0VSVChtX2NvbnRleHQpOworCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52
YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0Nv
bnNvbGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwor
CisgICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7
CisgICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fc3RyaWN0X2F0dHJpYnMi
KTsKKyAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlz
RW5hYmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOworICAgIGlmIChtX2lzR0xFUzJD
b21wbGlhbnQpIHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7CisgICAgICAg
IG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28iKTsKKyAgICAgICAg
bV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5p
c0VuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAgIH0KKyAgICBtX2lz
Um9idXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0Vu
YWJsZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3QKK3sKKyAgICBpZiAoUGFnZSog
cGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBhZ2Ut
PnNldHRpbmdzKCkucHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYgKCFtX2NvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQorICAgICAgICBtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+
V2ViR0xSZW5kZXJpbmdDb250ZXh0KCkKK3sKKyAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMg
dG8gV2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRoZSBsYXN0IHJlZmVyZW5jZQorICAgIC8v
IHRoZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxhc3QgY29udGV4dCBpcyByZW1vdmVkIGZy
b20gdGhlIGNvbnRleHQgZ3JvdXAuCisgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gbnVsbHB0cjsK
KyAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7CisgICAgbV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBu
dWxscHRyOworICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxscHRyOworICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nID0gbnVsbHB0cjsKKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSBudWxscHRy
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0
cjsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKKyAgICBtX2Js
YWNrVGV4dHVyZUN1YmVNYXAgPSBudWxscHRyOworCisgICAgaWYgKCFtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pIHsKKyAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworICAg
ICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgbV9jb250ZXh0R3JvdXAt
PnJlbW92ZUNvbnRleHQodGhpcyk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQ
b2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgZHJhd2luZyBi
dWZmZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3ll
ZAorICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KKyAgICBp
ZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKKwor
ICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENh
bGxiYWNrKG51bGxwdHIpOworICAgICAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxi
YWNrKG51bGxwdHIpOworICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICB9Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQoreworICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0
LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+bWFya0NvbnRlbnRzQ2hhbmdlZCgpOworCisgICAgbV9sYXll
ckNsZWFyZWQgPSBmYWxzZTsKKyAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5y
ZW5kZXJCb3goKTsKKyAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiByZW5k
ZXJCb3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgeworICAgICAgICBtX21hcmtlZENh
bnZhc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsK
KyAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKKyAgICAgICAgICAg
IG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICAgICAgY2FudmFzKCktPmRpZERy
YXcoRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZD
b21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9jb250ZXh0LT5s
YXllckNvbXBvc2l0ZWQoKSB8fCBtX2xheWVyQ2xlYXJlZAorICAgICAgICB8fCBtX2F0dHJpYnV0
ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyIHx8IChtYXNrICYmIG1fZnJhbWVidWZmZXJCaW5kaW5n
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJp
YnV0ZXM+IGNvbnRleHRBdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAg
IC8vIERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1
c2VyIGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KKyAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBt
YXNrICYmICFtX3NjaXNzb3JFbmFibGVkOworCisgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIGlmIChjb21iaW5lZENsZWFyICYmICht
YXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQorICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29s
b3JbMV0gOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0g
PyBtX2NsZWFyQ29sb3JbMl0gOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
b2xvck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKKyAgICBlbHNlCisgICAgICAgIG1f
Y29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFz
ayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CisgICAgaWYgKGNvbnRleHRBdHRy
aWJ1dGVzLT5kZXB0aCgpKSB7CisgICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0
aE1hc2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOworICAgICAgICBjbGVhck1h
c2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7CisgICAgICAgIG1fY29u
dGV4dC0+ZGVwdGhNYXNrKHRydWUpOworICAgIH0KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMt
PnN0ZW5jaWwoKSkgeworICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQorICAgICAgICAgICAgbV9jb250ZXh0
LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIGNs
ZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgICAg
ICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05U
LCAweEZGRkZGRkZGKTsKKyAgICB9CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVmZmVycyhjbGVhck1hc2spOworICAgIGVsc2Ug
eworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwor
ICAgICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7CisgICAgfQorCisgICAgcmVzdG9y
ZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2xh
eWVyQ2xlYXJlZCA9IHRydWU7CisKKyAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQoreworICAg
IC8vIFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgorICAgIGlmIChtX3Nj
aXNzb3JFbmFibGVkKQorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNvbG9y
WzBdLCBtX2NsZWFyQ29sb3JbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJD
b2xvclsyXSwgbV9jbGVhckNvbG9yWzNdKTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhtX2Nv
bG9yTWFza1swXSwgbV9jb2xvck1hc2tbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
b2xvck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgo
bV9jbGVhckRlcHRoKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNp
bCk7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVCwgbV9zdGVuY2lsTWFzayk7CisgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0
aE1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0xheWVyQ29tcG9z
aXRlZCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICAgICBjYW52YXMoKS0+
Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CisKKyAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlzIHdy
aXR0ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAorICAgIC8vIGhhcHBl
bmVkIGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21w
b3NpdG9yLgorICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFtX2F0dHJp
YnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7CisKKyAgICAgICAg
Y2FudmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7CisgICAgfSBlbHNlCisgICAgICAgIGNh
bnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OworCisgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKKyAgICBt
X21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIG1fY29udGV4dC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBtX2RyYXdpbmdCdWZm
ZXIuZ2V0KCkpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVm
ZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmJpbmQoKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2Ry
YXdpbmdCdWZmZXIuZ2V0KCkpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyht
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IGxldmVsIHdlIGRvbid0CisgICAgLy8ga25vdyBpZiB0aGUgdW5kZXJs
eWluZyBGQk8gdXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgorICAgIEdDM0RpbnQgbWF4
U2l6ZSA9IHN0ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7
CisgICAgLy8gTGltaXQgZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkg
ZXhoYXVzdGlvbi4KKyAgICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OworICAgIG1h
eFNpemUgPSBzdGQ6Om1pbihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7CisgICAgR0MzRGludCBt
YXhXaWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKKyAgICBH
QzNEaW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFd
KTsKKyAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7CisgICAgaGVpZ2h0ID0g
Y2xhbXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOworCisgICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsK
KyAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7Cisg
ICAgICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkpCisgICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0NoYW5n
ZWQpOworICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXdseSBj
cmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCisgICAgLy8gY2xlYXIgKGFu
ZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgorICAgIGlmIChtX2RyYXdpbmdC
dWZmZXIpIHsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpKTsKKyAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIH0gZWxzZQor
ICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisKKyAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclpl
cm8obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5n
ZXQoKSkpOworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgp
KSk7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8o
bV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKKwor
ICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgo
KTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdodCgp
IGNvbnN0Cit7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fZHJh
d2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOworCisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKK30KKwordW5zaWduZWQgaW50IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNo
b3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAg
ICAgcmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1aW50
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgcmV0dXJuIHNp
emVvZihHQzNEZmxvYXQpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUo
R0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0
dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQg
b2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2FjdGl2ZVRleHR1cmVV
bml0ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMDsKKyAgICBtX2NvbnRl
eHQtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEFjdGl2ZVRleHR1cmVVbml0KHRleHR1cmUpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNo
U2hhZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25BdHRhY2hl
ZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9u
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0
cmliTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRh
dGVMb2NhdGlvbkxlbmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1l
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiYmluZEF0dHJpYkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJH
TE9iamVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQoreworICAgIGRlbGV0ZWQgPSBmYWxzZTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG9iamVjdCkgeworICAgICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4
dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBub3Qg
ZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+b2JqZWN0KCk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcihHQzNE
ZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tP
YmplY3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgaWYgKGJ1
ZmZlciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFy
Z2V0KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0
aCBtdWx0aXBsZSB0YXJnZXRzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRh
cmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5k
QXJyYXlCdWZmZXIgPSBidWZmZXI7CisgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJp
bmRCdWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsK
KyAgICBpZiAoYnVmZmVyKQorICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNrT2Jq
ZWN0VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgaWYg
KHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRGcmFt
ZWJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKG9iamVjdE9y
WmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIEluc3RlYWQgb2YgYmlu
ZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOworICAgIGlmIChidWZmZXIpCisgICAg
ICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOworICAgIGFwcGx5U3RlbmNpbFRlc3Qo
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0Mz
RGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAg
ICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVm
ZmVyLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAg
ICByZW5kZXJCdWZmZXIgPSAwOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJl
bmRlckJ1ZmZlcjsKKyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmpl
Y3RPclplcm8ocmVuZGVyQnVmZmVyKSk7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICAgICAg
cmVuZGVyQnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSog
dGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFRleHR1
cmUiLCB0ZXh0dXJlLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVk
KQorICAgICAgICB0ZXh0dXJlID0gMDsKKyAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRU
YXJnZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmlu
ZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0
cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAwOwor
ICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKKyAgICAg
ICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZyA9
IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7CisKKyAgICAg
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4
dHVyZSkpOworCisgICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVApIHsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJl
VW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKKyAgICAgICAgbWF4TGV2ZWwg
PSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJl
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7CisgICAgaWYg
KHRleHR1cmUpCisgICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVsKTsK
KworICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCB0
aGUgVEVYVFVSRV9XUkFQX1IKKyAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFNUF9UT19FREdFIGZv
ciBjdWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKKyAgICAvLyBFUyAyLjAgZG9lc24n
dCBleHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbikgYW5kCisgICAg
Ly8gb3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBvdmVyIHRoZSBzZWFt
cyBpbiB0aGlzCisgICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgc3Vw
cG9ydGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAorICAgIC8vIHBsYXRmb3JtcyBpcyBmYWlybHkg
aW52b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJlIElECisgICAgLy8g
aW4gYWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxhaW50cywgc28gdGhl
IGxvZ2ljIGhhcworICAgIC8vIGJlZW4gcmVtb3ZlZC4KK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNE
ZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGUp
KQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24i
LCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9k
ZUFscGhhKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNl
cGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFj
dG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0Mz
RGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCit7Cisg
ICAgLy8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMg
UkdCLgorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRG
dW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQorICAgICAgICByZXR1cm47
CisgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxw
aGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1
c2FnZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc2l6ZSA8
IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKCFzaXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91
bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0
YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgImludmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwor
ICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0
cj4oc2l6ZSksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0
aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWls
ZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0
IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAgIH0K
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZm
ZXJEYXRhIiwgIm5vIGRhdGEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlz
RXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1
ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwg
ImludmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAg
IG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+
ZGF0YSgpLCB1c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVk
LiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBk
b2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlk
YXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKKyAg
ICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZGF0YSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1
ZmZlckRhdGEiLCAibm8gZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgh
aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICgh
YnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEi
LCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Cisg
ICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRh
LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rp
b24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRo
aW5rcyBpdCBkb2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIGlmICghYnVmZmVyKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwg
Im9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWRhdGEpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNj
ZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShz
dGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJT
dWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCkp
OworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7
CisgICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUg
YnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAg
ICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcg
bG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVm
ZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAg
ICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0Rp
bnRwdHI+KG9mZnNldCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0
IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBt
X2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOworICAgIGlm
IChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAg
IC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0
IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVy
LT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCitHQzNEZW51bSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgaWYgKHRhcmdldCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJT
dGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01Q
TEVURTsKKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7
CisgICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3RhdHVz
KCZyZWFzb24pOworICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0NPTVBMRVRFKSB7CisgICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIiLCAi
aW52YWxpZCBtYXNrIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciog
cmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4
dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
ICJjbGVhciIsIHJlYXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFjbGVh
cklmQ29tcG9zaXRlZChtYXNrKSkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKKyAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MzRGZs
b2F0IGEpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChzdGQ6OmlzbmFuKHIpKQorICAgICAgICByID0gMDsKKyAgICBpZiAoc3Rk
Ojppc25hbihnKSkKKyAgICAgICAgZyA9IDA7CisgICAgaWYgKHN0ZDo6aXNuYW4oYikpCisgICAg
ICAgIGIgPSAwOworICAgIGlmIChzdGQ6OmlzbmFuKGEpKQorICAgICAgICBhID0gMTsKKyAgICBt
X2NsZWFyQ29sb3JbMF0gPSByOworICAgIG1fY2xlYXJDb2xvclsxXSA9IGc7CisgICAgbV9jbGVh
ckNvbG9yWzJdID0gYjsKKyAgICBtX2NsZWFyQ29sb3JbM10gPSBhOworICAgIG1fY29udGV4dC0+
Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsKKyAg
ICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jbGVhclN0ZW5jaWwgPSBzOwor
ICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdD
M0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbG9yTWFza1swXSA9IHJl
ZDsKKyAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOworICAgIG1fY29sb3JNYXNrWzJdID0gYmx1
ZTsKKyAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNr
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVyKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclplcm8o
c2hhZGVyKSk7CisgICAgR0MzRGludCB2YWx1ZTsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2
KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMs
ICZ2YWx1ZSk7CisgICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2
YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVs
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJpbnZhbGlk
IGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJvcmRl
cikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9u
cygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJl
c3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGlu
dGVybmFsZm9ybWF0LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViR0xUZXh0dXJl
KiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRh
cmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkpIHsKKyAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6
aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwg
ImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCk7CisgICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgYm9yZGVyLCBkYXRhLT5ieXRl
TGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVF
cnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBjb21wcmVzc2Vk
VGV4SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vz
bid0IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCisgICAgICAgIHRleC0+bWFya0ludmFs
aWQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0ZXgtPnNl
dExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgIHRleC0+c2V0Q29tcHJlc3Nl
ZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVs
KCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoZm9ybWF0KSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICgh
dGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZm9ybWF0ICE9IHRleC0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1YkltYWdl
MkQiLCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lv
bnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YS0+Ynl0ZUxlbmd0aCgp
LCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYgKEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpICYgKEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVG
RkVSX0JJVCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBiZSBzZXQs
IG9ubHkgcmVuZGVyZWQgdG8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoImNv
cHlUZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRh
dGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29t
YmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9y
bWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29t
cGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhl
aWdodCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJh
bWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVz
b3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFn
ZTJEIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAgICAgIFNjb3BlZERyYXdp
bmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1f
ZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAg
ICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKKyAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRX
aWR0aCwgY2xpcHBlZEhlaWdodDsKKyAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdo
dCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQp
KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAg
ICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBj
bGlwcGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVk
SGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2Nv
bnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIH0KKyAgICAvLyBGSVhNRTogaWYgdGhlIGZy
YW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4
ZWN1dGVkLgorICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdl
dCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Cisg
ICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29w
eVRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5
VGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgLy8g
QmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cg
aGFwcGVucyBmaXJzdC4KKyAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsg
aGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+
Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVp
Z2h0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xl
IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAg
ICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhTdWJJbWFnZTJEIiwgaW50
ZXJuYWxmb3JtYXQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1RleEludGVybmFsRm9y
bWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZy
YW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAi
ZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsK
KyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
bkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlz
UmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5k
ZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Cisg
ICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
R0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CisgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lk
dGgsIGNsaXBwZWRIZWlnaHQ7CisgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQo
KSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkg
eworICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0
YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUgPSB0ZXgtPmdldFR5cGUo
dGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hh
cltdPiB6ZXJvOworICAgICAgICAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkgeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzaXplOworICAgICAgICAgICAgICAgIEdDM0RlbnVtIGVycm9y
ID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRo
LCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7CisgICAgICAgICAgICAgICAg
aWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICAgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJh
ZCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQg
Y2hhcltdPihzaXplKTsKKyAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWVtc2V0
KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jb250
ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY2xp
cHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgIFNj
b3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9m
cmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y29w
eVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBwZWRYIC0geCwgeW9m
ZnNldCArIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFNjb3BlZERy
YXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1
ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTEJ1
ZmZlcj4gbyA9IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0
KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZm
ZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRo
aXMpOworICAgIGFkZENvbnRleHRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisK
K1Bhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRl
eHR1cmUoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6
OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJu
IG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJH
TFByb2dyYW06OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Cisg
ICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2Vi
R0xSZW5kZXJidWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOworICAg
IGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1JlZlB0
cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0MzRGVu
dW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRl
ciIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhp
cywgdHlwZSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG9iamVjdC0+b2JqZWN0KCkpCisg
ICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiBjb250ZXh0IGhlcmUgYmVjYXVzZSB3ZSB3YW50
CisgICAgICAgIC8vIHRoaW5ncyBpbiB0aGlzIGNvbnRleHQgdW5ib3VuZC4KKyAgICAgICAgb2Jq
ZWN0LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIoV2ViR0xCdWZm
ZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChidWZmZXIpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCisgICAgICAgIG1f
Ym91bmRBcnJheUJ1ZmZlciA9IDA7CisKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnVu
YmluZEJ1ZmZlcihidWZmZXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgaWYg
KCFkZWxldGVPYmplY3QoZnJhbWVidWZmZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGZy
YW1lYnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CisgICAgICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nID0gMDsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7CisgICAgICAgICAg
ICAvLyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGlu
dGVybmFsIGZiby4KKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAg
ZGVsZXRlT2JqZWN0KHByb2dyYW0pOworICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFBy
b2dyYW0gdG8gMCBoZXJlIGJlY2F1c2UgdGhlIGRlbGV0aW9uIG9mIHRoZQorICAgIC8vIGN1cnJl
bnQgcHJvZ3JhbSBpcyBkZWxheWVkLgorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7Cisg
ICAgaWYgKCFkZWxldGVPYmplY3QocmVuZGVyYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChyZW5kZXJidWZmZXIgPT0gbV9yZW5kZXJidWZmZXJCaW5kaW5nKQorICAgICAgICBtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmcgPSAwOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAg
ICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFt
ZWJ1ZmZlcihyZW5kZXJidWZmZXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgZGVsZXRlT2JqZWN0KHNo
YWRlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKFdl
YkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNb
aV0udGV4dHVyZTJEQmluZGluZykKKyAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1
cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVV
bml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpCisgICAgICAgICAgICBtX3RleHR1cmVVbml0
c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVB
dHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5k
ZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aE1h
c2soR0MzRGJvb2xlYW4gZmxhZykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgbV9kZXB0aE1hc2sgPSBmbGFnOworICAgIG1fY29udGV4
dC0+ZGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVw
dGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoek5lYXIgPiB6
RmFyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXByb2dyYW0tPmRldGFjaFNoYWRlcihzaGFkZXIpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRldGFjaFNo
YWRlciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RP
clplcm8oc2hhZGVyKSk7CisgICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNE
KCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNEZW51bSBj
YXApCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBh
YmlsaXR5KCJkaXNhYmxlIiwgY2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjYXAgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgeworICAgICAgICBtX3N0ZW5jaWxFbmFi
bGVkID0gZmFsc2U7CisgICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
IHsKKyAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxl
ZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0
ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRl
KGluZGV4KTsKKyAgICBzdGF0ZS5lbmFibGVkID0gZmFsc2U7CisKKyAgICBpZiAoaW5kZXggPiAw
IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoaW5kZXgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0Mz
RGludHB0ciBvZmZzZXQpCit7CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlC
dWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigp
OworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAob2Zmc2V0IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgeworICAgICAgICAv
LyBGb3IgYW4gdW5zaWduZWQgaW50IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkg
NCBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCisgICAgICAgIGlmIChvZmZzZXQgJSA0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50
IG9mZnNldC4KKyAgICAgICAgb2Zmc2V0IC89IDQ7CisKKyAgICAgICAgR0MzRHNpemVpcHRyIG4g
PSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7CisgICAgICAgIGlmIChvZmZz
ZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
KSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0IG11c3Qg
YmUgZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVudCByZWFzb25zLgorICAgICAgICBpZiAob2Zm
c2V0ICUgMikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBNYWtlIHVv
ZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIG9mZnNldCAvPSAyOworCisgICAgICAg
IEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAyOwor
ICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5
QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CisgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4g
biAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJy
YXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWly
ZWQpCit7CisgICAgLy8gUGVyZm9ybXMgY29uc2VydmF0aXZlIHZhbGlkYXRpb24gYnkgY2FjaGlu
ZyBhIG1heGltdW0gaW5kZXggb2YKKyAgICAvLyB0aGUgZ2l2ZW4gdHlwZSBwZXIgZWxlbWVudCBh
cnJheSBidWZmZXIuIElmIGFsbCBvZiB0aGUgYm91bmQKKyAgICAvLyBhcnJheSBidWZmZXJzIGhh
dmUgZW5vdWdoIGVsZW1lbnRzIHRvIHNhdGlzZnkgdGhhdCBtYXhpbXVtCisgICAgLy8gaW5kZXgs
IHNraXBzIHRoZSBleHBlbnNpdmUgcGVyLWRyYXctY2FsbCBpdGVyYXRpb24gaW4KKyAgICAvLyB2
YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlLgorICAgIAorICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4g
ZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50
QXJyYXlCdWZmZXIoKTsKKworICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVtZW50QXJy
YXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICAvLyBUaGUgY2FzZSBjb3VudD09MCBpcyBhbHJl
YWR5IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxpZGF0ZUluZGV4QXJyYXlD
b25zZXJ2YXRpdmUuCisgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXItPmVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXIpOworCisgICAgaW50IG1heElu
ZGV4ID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRDYWNoZWRNYXhJbmRleCh0eXBlKTsKKyAgICBp
ZiAobWF4SW5kZXggPCAwKSB7CisgICAgICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gaW5kZXgg
aW4gdGhlIGVudGlyZSBidWZmZXIgZm9yIHRoZSBnaXZlbiB0eXBlIG9mIGluZGV4LgorICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURTogeworICAgICAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0MzRHVieXRlKj4oYnVmZmVyLT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChHQzNE
c2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAgIG1h
eEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlQ6IHsKKyAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihH
QzNEdXNob3J0KTsKKyAgICAgICAgICAgIGNvbnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2Fz
dDxjb25zdCBHQzNEdXNob3J0Kj4oYnVmZmVyLT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChH
QzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAg
IG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UOiB7CisgICAgICAgICAgICBpZiAoIW1fb2VzRWxlbWVudEluZGV4
VWludCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBudW1FbGVt
ZW50cyAvPSBzaXplb2YoR0MzRHVpbnQpOworICAgICAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAg
PSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAg
ICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAg
ICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+
KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxlbWVudEFy
cmF5QnVmZmVyLT5zZXRDYWNoZWRNYXhJbmRleCh0eXBlLCBtYXhJbmRleCk7CisgICAgfQorCisg
ICAgaWYgKG1heEluZGV4ID49IDApIHsKKyAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXF1aXJl
ZCBlbGVtZW50cyBpcyBvbmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtCisgICAgICAgIC8vIGluZGV4
IHRoYXQgd2lsbCBiZSBhY2Nlc3NlZC4KKyAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IG1h
eEluZGV4ICsgMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5
UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0
LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKK3sKKyAgICBBU1NFUlQoY291bnQgPj0g
MCAmJiBvZmZzZXQgPj0gMCk7CisgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gMDsKKyAgICAKKyAg
ICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisKKyAgICBpZiAoIWVsZW1lbnRB
cnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFjb3VudCkgewor
ICAgICAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBsb25nIHVvZmZzZXQgPSBv
ZmZzZXQ7CisgICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7CisKKyAgICBpZiAodHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNl
dCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVpbnQp
OworICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50
Kj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVv
ZmZzZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBs
YXN0SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICAr
K3A7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9m
ZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgIGNv
bnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oZWxlbWVu
dEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7Cisg
ICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgp
CisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUpIHsKKyAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0MzRHVieXRlKj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0
YSgpKSArIHVvZmZzZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBp
ZiAoKnAgPiBsYXN0SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAg
ICAgICAgICArK3A7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGVuIHNldCB0aGUgbGFz
dCBpbmRleCBpbiB0aGUgaW5kZXggYXJyYXkgYW5kIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KKyAg
ICBudW1FbGVtZW50c1JlcXVpcmVkID0gbGFzdEluZGV4ICsgMTsKKyAgICByZXR1cm4gbnVtRWxl
bWVudHNSZXF1aXJlZCA+IDA7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmlt
aXRpdmVDb3VudCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFByb2dyYW0pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRyaWIgYW5k
IGNoZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAgICAgaWYgKCFt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZhbGlkYXRl
QmluZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChl
bGVtZW50Q291bnQgPD0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKworICAgIC8vIExvb2sg
aW4gZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUgY3VycmVudCBwcm9ncmFtKS4K
KyAgICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNlOworICAgIGJvb2wgc2F3RW5h
YmxlZEF0dHJpYiA9IGZhbHNlOworICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMgPSBt
X2N1cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsgKytpKSB7CisgICAgICAgIGlu
dCBsb2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpKTsKKyAg
ICAgICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0PGludD4obV9tYXhWZXJ0ZXhB
dHRyaWJzKSkgeworICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShsb2MpOworICAgICAgICAgICAgaWYgKHN0YXRlLmVuYWJsZWQpIHsK
KyAgICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAvLyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVtZW50cyBjb21wdXRhdGlvbi4K
KyAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVudCwgd2Ugd2lsbCBvbmx5IHRv
dWNoIHRoZSBkYXRhIGZvciB0aGUKKyAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGFuZCBub3Ro
aW5nIGJleW9uZCBpdC4KKyAgICAgICAgICAgICAgICBpbnQgYnl0ZXNSZW1haW5pbmcgPSBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgoKSAtIHN0YXRlLm9m
ZnNldCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgICAg
ICAgICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKKyAgICAgICAgICAgICAgICBpZiAo
Ynl0ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KQorICAgICAgICAgICAgICAg
ICAgICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcgLSBzdGF0ZS5ieXRlc1BlckVs
ZW1lbnQpIC8gc3RhdGUuc3RyaWRlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc3RhbmNl
c1JlcXVpcmVkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGl2aXNvcikgeworICAg
ICAgICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNlaWwoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFzYXdOb25JbnN0YW5jZWRBdHRyaWIgJiYgc2F3RW5h
YmxlZEF0dHJpYikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9i
amVjdCB8fCAhb2JqZWN0LT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0
IG9yIG9iamVjdCBkZWxldGVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RzaXplaSBwcmltaXRpdmVDb3VudCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rp
b25OYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZpcnN0IDwgMCB8fCBj
b3VudCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChwcmltaXRpdmVDb3VudCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8
IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBo
YXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8
R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVj
a2VkQ291bnQ7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNr
ZWRQcmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CisgICAgICAgIGlmIChjaGVja2VkU3Vt
Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgp
IHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hl
Y2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
YXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZm
ZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VT
YWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFz
b24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUs
IEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKworICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3
QXJyYXlzIiwgbW9kZSwgZmlyc3QsIGNvdW50LCAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9
IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICB2ZXJ0ZXhBdHRy
aWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsK
KyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBs
ZXRlbmVzcygiZHJhd0FycmF5cyIsIHRydWUpOworCisgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlz
KG1vZGUsIGZpcnN0LCBjb3VudCk7CisKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhB
dHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAg
ICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOworICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2ln
bmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1l
LCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5j
aWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgICAg
IGlmIChtX29lc0VsZW1lbnRJbmRleFVpbnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAiY291bnQgb3Igb2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChwcmltaXRpdmVDb3Vu
dCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1F
TlRfQVJSQVlfQlVGRkVSIGJvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAg
ICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQorICAgICAgICBp
ZiAoIXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0Mz
RGludHB0cj4ob2Zmc2V0KSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAicmVxdWVzdCBv
dXQgb2YgYm91bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjb3VudCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92
ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOworICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQpOworICAg
ICAgICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZl
Q291bnQuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVt
cHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNl
cnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhu
dW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAg
ICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNoZWNrZWRDb3VudC51bnNhZmVH
ZXQoKSwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMp
IHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRp
dmVDb3VudC51bnNhZmVHZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0
dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiByZWFzb24g
PSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwg
IWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCByZWFzb24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworCisg
ICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVu
dHMoImRyYXdFbGVtZW50cyIsIG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRz
LCAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAg
IGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxp
ZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRy
PihvZmZzZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQg
PSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJh
d0VsZW1lbnRzIiwgdHJ1ZSk7CisKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBj
b3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CisKKyAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICBy
ZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNH
TEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3
RWxlbWVudHMiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwg
Y2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfVEVTVCkgeworICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgYXBwbHlTdGVuY2lsVGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChj
YXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgeworICAgICAgICBtX3NjaXNz
b3JFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7
CisgICAgfQorICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1f
bWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4
IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3RhdGUuZW5h
YmxlZCA9IHRydWU7CisKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29u
dGV4dC0+ZmluaXNoKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY29udGV4dC0+Zmx1c2goKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNo
bWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVm
ZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFy
YW1ldGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJp
bnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChidWZmZXIg
JiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhp
cyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRG9uJ3QgYWxsb3cg
dGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKKyAgICAv
LyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBk
ZWZhdWx0CisgICAgLy8gRkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZl
cik7CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1F
TlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVy
T2JqZWN0KTsKKyAgICB9CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRG
b3JCb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7CisgICAgYXBwbHlTdGVuY2ls
VGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0
dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0
YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVm
ZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChsZXZlbCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZh
bGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1
cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJh
bWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKKyAgICAvLyBpbXBsZW1lbnRhdGlv
bnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0CisgICAgLy8g
RkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFt
ZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKKyAgICBzd2l0Y2gg
KGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lM
X0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFy
Z2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJn
ZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9i
amVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0
dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9i
amVjdCwgbGV2ZWwpOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNo
bWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZnJvbnRGYWNl
KG1vZGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAo
R0MzRGVudW0gdGFyZ2V0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoImdlbmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxzZSk7CisgICAgaWYgKCF0ZXgpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxs
IHRoZSBzYW1lIHNpemUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3Nl
ZCB0ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAyOgorICAgIGlmICh0ZXgtPmlz
Q29tcHJlc3NlZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5l
cmF0ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1h
cCIsIHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIGdlbmVyYXRlTWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVy
IGlzIG5vdCBORUFSRVNUX01JUE1BUF9MSU5FQVIKKyAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhl
IGhhY2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCisjaWYgT1MoREFSV0lOKQorICAg
IGJvb2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKKyAgICBpZiAodGV4LT5nZXRNaW5G
aWx0ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9M
SU5FQVIpOworICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7CisgICAgfQorI2Vu
ZGlmCisgICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOworI2lmIE9TKERBUldJ
TikKKyAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCisgICAgICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIs
IHRleC0+Z2V0TWluRmlsdGVyKCkpOworI2VuZGlmCisgICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExl
dmVsSW5mbygpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRBY3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
QWN0aXZlSW5mbyBpbmZvOworICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwg
aW5kZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVybiBXZWJHTEFjdGl2
ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKK30KKworUGFz
c1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZl
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBw
cm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQWN0aXZlSW5mbyBpbmZvOworICAgIGlm
ICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5k
ZXgsIGluZm8pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWlzR0xFUzJDb21w
bGlhbnQoKSkKKyAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0
aCgiWzBdIikpCisgICAgICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKKworICAgIExP
RyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwgaW5mby5u
YW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRl
KGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVj
dG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZVtdID0geworICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRDo6VkVSVEVYX1NIQURFUiwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUgorICAgIH07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihz
aGFkZXJUeXBlKSAvIHNpemVvZihHQzNEZW51bSk7ICsraSkgeworICAgICAgICBXZWJHTFNoYWRl
ciogc2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7Cisg
ICAgICAgIGlmIChzaGFkZXIpCisgICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFk
ZXIpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCisgICAgICAg
IHJldHVybiAtMTsKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxv
Y2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoIXZhbGlkYXRlU3Ry
aW5nKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm4gLTE7CisgICAg
aWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAo
IXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIs
ICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSks
IG5hbWUpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZm
ZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdl
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRl
ciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cisg
ICAgfQorCisgICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAm
JiBwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZm
ZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgfQorCisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgbV9j
b250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAg
IGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzIG9iamVjdCB0bworICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRh
dGluZyBhbnkgY2FjaGVkIHZlcnNpb24uCisKKyAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9y
Y2UgcmVxdWVzdGVkIHZhbHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAorICAgIC8vIGFuZCBzdGVu
Y2lsLCByZWdhcmRsZXNzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCisgICAg
Ly8gR3JhcGhpY3NDb250ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KKyAgICBSZWZQdHI8V2ViR0xD
b250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNy
ZWF0ZShtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOworICAgIGlmICghbV9hdHRy
aWJ1dGVzLmRlcHRoKQorICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7CisgICAg
aWYgKCFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNp
bChmYWxzZSk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBUaGUgRHJh
d2luZ0J1ZmZlciBvYnRhaW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6
OmdldENvbnRleHRBdHRyaWJ1dGVzKCksCisgICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3du
IGRldGVybWluYXRpb24gb2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KKyAg
ICAgICAgYXR0cmlidXRlcy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1w
bGUoKSk7CisgICAgfQorICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKK30KKworR0Mz
RGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1faXNQ
ZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpOT19FUlJPUjsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOworfQorCitXZWJH
TEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRf
YmxlbmRfbWlubWF4IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpIHsKKyAgICAgICAgaWYgKCFtX2V4dEJsZW5k
TWluTWF4KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJl
RW5hYmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIpOworICAgICAgICAgICAgbV9leHRCbGVuZE1p
bk1heCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOworICAgIH0KKyAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKKyAgICAgICAgJiYgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7CisgICAgICAgIGlm
ICghbV9leHRzUkdCKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsKKyAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0
ZDo6bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG1fZXh0c1JHQi5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJFWFRfZnJhZ19kZXB0aCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgeworICAgICAgICBpZiAoIW1fZXh0RnJh
Z0RlcHRoKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJl
RW5hYmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKKyAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRo
ID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKKyAgICAgICAgJiYgKG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJl
X2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3No
YWRlcl90ZXh0dXJlX2xvZCIpKSkgeworICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxP
RCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIG1fZXh0U2hhZGVy
VGV4dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsK
KyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgewor
ICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgeworICAg
ICAgICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyIpOworICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjpt
YWtlX3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOworICAgIH0KKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKKyAgICAgICAg
JiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVy
ZV9mbG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9FU1RleHR1cmVGbG9hdD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1f
b2VzVGV4dHVyZUZsb2F0LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikp
IHsKKyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgeworICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJl
X2Zsb2F0X2xpbmVhciIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOworICAgIH0KKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQor
ICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190
ZXh0dXJlX2hhbGZfZmxvYXQiKSkgeworICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9h
dCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsK
KyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgeworICAgICAgICBp
ZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXRfbGluZWFyIik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7Cisg
ICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9v
YmplY3QiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKKyAgICAgICAgaWYgKCFtX29lc1ZlcnRl
eEFycmF5T2JqZWN0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAgICAgICAg
IG1fb2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5
T2JqZWN0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJh
eU9iamVjdC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJP
RVNfZWxlbWVudF9pbmRleF91aW50IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKKyAgICAgICAg
aWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7
CisgICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9F
U0VsZW1lbnRJbmRleFVpbnQ+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29l
c0VsZW1lbnRJbmRleFVpbnQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsTG9z
ZUNvbnRleHQpCisgICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VD
b250ZXh0LmdldCgpOworICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQorICAgICAgICAmJiBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVBVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRo
aXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOwor
ICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29t
cHJlc3NlZF90ZXh0dXJlX3B2cnRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNz
ZWRUZXh0dXJlUFZSVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJU
QyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsK
KyAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOworICAg
IH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4
dHVyZV9zM3RjIikKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBv
cnRlZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMp
CisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3Vu
aXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7CisgICAgICAgIHJldHVybiBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQorICAgICAgICAmJiBXZWJH
TERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7CisgICAgICAg
IGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsK
KyAgICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdM
RGVwdGhUZXh0dXJlPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV93ZWJnbERl
cHRoVGV4dHVyZS5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKKyAgICAg
ICAgaWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAg
ICAgICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1
ZmZlcnM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZl
cnMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVf
aW5zdGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhp
cykpIHsKKyAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyIpOworICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0
ZDo6bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOworICAgIH0KKyAgICBp
ZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7CisgICAgICAgICAg
ICBpZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgICAgICBtX3dlYmds
RGVidWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlcklu
Zm8+KHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5n
ZXQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldF
QkdMX2RlYnVnX3NoYWRlcnMiKQorICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgewor
ICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQorICAgICAgICAgICAgICAgIG1f
d2ViZ2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0
aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIp
OworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorCisgICAgV2ViR0xTaGFy
ZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2Jq
ZWN0KGF0dGFjaG1lbnQpOworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmIChwbmFtZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkK
KyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUp
OworICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0gaW4gdGhp
cyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCisgICAgICAgIC8vIHNwZWNpZmllcyBJTlZBTElEX09Q
RVJBVElPTi4KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlk
IHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9
CisKKyAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBvYmplY3QtPmlzUmVuZGVyYnVm
ZmVyKCkpOworICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7CisgICAgICAgIHN3aXRjaCAo
cG5hbWUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4ocmVpbnRlcnByZXRfY2FzdDxX
ZWJHTFRleHR1cmUqPihvYmplY3QpKSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZB
Q0U6CisgICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NP
TE9SX0VOQ09ESU5HX0VYVDogeworICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
IGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAocG5hbWUpIHsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUik7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7CisgICAgICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogeworICAgICAgICAg
ICAgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJidWZmZXIqPihvYmplY3QpOworICAgICAgICAgICAgR0MzRGVudW0gcmVuZGVyQnVm
ZmVyRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAg
ICAgQVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUICYm
IHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKTsKKyAg
ICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9B
TFBIQThfRVhUKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRXh0ZW5zaW9u
czNEOjpTUkdCX0VYVCk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FQVIpOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY29uc3QgaW50
IGludFplcm8gPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVf
V0lEVEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIo
cG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoKKyAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0
cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQ6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKKyAgICAgICAgcmV0
dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RT
VF9SR0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6CisgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
X1NSQ19BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgorICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJMVUVfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6CisgICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldEJv
b2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
VWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1f
Y29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNVTExfRkFDRToKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgorICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50UHJvZ3JhbSkpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oaW50WmVybyk7CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgorICAgICAg
ICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0ZVTkM6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6CisgICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklU
RU1BU0s6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQ
dHI8V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCkpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5E
SU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVF9GQUNFOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgor
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Cisg
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhf
QVRUUklCUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVM6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRT
OgorICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8K
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZB
Q1RPUjoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAgICAgICByZXR1cm4g
Z2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9MWUdPTl9PRkZTRVRfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6CisgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NS
ZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKFN0cmluZygiV2ViS2l0IFdlYkdMIikpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRV9CVUZGRVJTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgorICAg
ICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgorICAgICAgICByZXR1cm4gZ2V0Rmxv
YXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0
U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIiki
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKKyAgICAg
ICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFD
S19QQVNTX0RFUFRIX1BBU1M6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6CisgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6
CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVu
Y2lsKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgorICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BB
U1NfREVQVEhfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFT
UzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9U
RVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgorICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZykpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgorICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhTdHJpbmcoIldlYktpdCIpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJT
SU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRl
eHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xJ
bnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5U
X1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMK
KyAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKKyAgICAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9E
RVJJVkFUSVZFX0hJTlRfT0VTKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6
VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6CisgICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJl
ckluZm8pCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3Ry
aW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJs
ZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgorICAgICAgICBpZiAobV93ZWJn
bERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2Nv
bnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKSk7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJh
bWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5m
byBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QKKyAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKKyAgICAg
ICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7CisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxl
ZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljCisgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykK
KyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6
Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBl
bmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBC
RUdJTgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQorICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxl
ZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJz
KQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1
ZmZlcnMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKKyAgICAgICAgICAgICYm
IHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAorICAgICAgICAgICAgJiYg
cG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBf
RVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKKyAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUg
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5n
ZXREcmF3QnVmZmVyKHBuYW1lKTsKKyAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1
ZmZlcgorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKKyAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgICAgICB9CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3Jh
bVBhcmFtZXRlciIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisK
KyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQoKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkFMSURBVEVfU1RBVFVTOgorICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RP
clplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TElOS19TVEFUVVM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0
TGlua1N0YXR1cygpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFE
RVJTOgorICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3Jh
bSksIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6CisgICAgICAgIG1fY29udGV4dC0+
Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5h
bWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworU3RyaW5nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkp
CisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQt
PmdldFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSkpOworfQorCitXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAi
aW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
KyAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVu
ZGVyYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9
CisKKyAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCisgICAgICAgICYmICFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkKCkpOworICAgICAgICBpbnQgdmFsdWUgPSAwOworICAgICAgICBzd2l0Y2ggKHBu
YW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURU
SDoKKyAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmlu
ZGluZy0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgorICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CisgICAgICAgICAgICB2YWx1
ZSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6CisgICAgICAgICAgICB2YWx1ZSA9IDI0OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9TVEVOQ0lMX1NJWkU6CisgICAgICAgICAgICB2YWx1ZSA9IDg7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVS
TkFMX0ZPUk1BVDoKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwor
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIH0KKworICAgIEdDM0RpbnQgdmFsdWUgPSAw
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfV0lEVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
X0hFSUdIVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJ
WkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgorICAgICAgICBt
X2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgp
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
K30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1l
dGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRl
cikpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBHQzNEaW50IHZhbHVlID0g
MDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVM
RVRFX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRl
ZCgpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKKyAgICAg
ICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2
YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFs
dWUpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKKyAgICAgICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pih2YWx1ZSkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAg
fQorfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xv
ZyIsIHNoYWRlcikpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZW5zdXJlTm90TnVs
bChtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKK30K
KworUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0Mz
RGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfU0hBREVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QUdNRU5UX1NIQURFUjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRl
clByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUVESVVNX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNRURJVU1fSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hf
SU5UOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9u
Rm9ybWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKKyAgICBHQzNEaW50
IHByZWNpc2lvbiA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQo
c2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOworICAgIHJldHVy
biBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwg
cHJlY2lzaW9uKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hh
ZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuICIiOworICAgIHJldHVybiBlbnN1
cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQoreworICAgIFZlY3Rv
cjxTdHJpbmc+IHJlc3VsdDsKKworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24p
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIkVYVF9ibGVuZF9taW5tYXgiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJF
WFRfc1JHQiIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX0VYVF9mcmFnX2RlcHRoIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9mcmFnX2Rl
cHRoIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
T0VTX3RleHR1cmVfZmxvYXQiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVf
ZmxvYXQiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VT
X3RleHR1cmVfZmxvYXRfbGluZWFyIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7CisgICAgaWYgKG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKQorICAg
ICAgICByZXN1bHQuYXBwZW5kKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgaWYgKG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9FWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpOworICAgIGlmIChtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOworICAgIHJl
c3VsdC5hcHBlbmQoIldFQkdMX2xvc2VfY29udGV4dCIpOworICAgIGlmIChXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldF
QktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIik7CisgICAgaWYgKFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAgICByZXN1bHQuYXBwZW5k
KCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7CisgICAgaWYgKFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7CisgICAgaWYgKFdlYkdMRGVw
dGhUZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTsKKyAgICBpZiAoc3VwcG9ydHNEcmF3QnVm
ZmVycygpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTsKKyAg
ICBpZiAoQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOworCisgICAgaWYgKGFsbG93UHJp
dmlsZWdlZEV4dGVuc2lvbnMoKSkgeworICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdldFRleFBhcmFtZXRlciIs
IHRhcmdldCwgZmFsc2UpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9XUkFQX1Q6CisgICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0
LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVf
TUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAg
ICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFs
dWUpKTsKKyAgICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOworICAgIGlmICghdW5pZm9ybUxvY2F0aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+
cHJvZ3JhbSgpICE9IHByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybSIsICJubyB1bmlmb3Jt
bG9jYXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICBHQzNEaW50IGxvY2F0aW9uID0gdW5pZm9ybUxv
Y2F0aW9uLT5sb2NhdGlvbigpOworCisgICAgR0MzRGVudW0gYmFzZVR5cGU7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoOworICAgIHN3aXRjaCAodW5pZm9ybUxvY2F0aW9uLT50eXBlKCkpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpCT09MOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzI6CisgICAgICAgIGJhc2VUeXBlID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMzoKKyAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gMzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUM0OgorICAg
ICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAgICAgICBsZW5ndGgg
PSA0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6Cisg
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICAgICAgbGVuZ3Ro
ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UX1ZF
QzI6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICAgICAg
bGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAg
ICAgICAgbGVuZ3RoID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UX1ZFQzQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklO
VDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzQ6CisgICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA0
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQy
OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAg
bGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVRfTUFUMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7
CisgICAgICAgIGxlbmd0aCA9IDk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUX01BVDQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSAxNjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0NVQkU6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OklOVDsKKyAgICAgICAgbGVuZ3RoID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgLy8gQ2FuJ3QgaGFuZGxlIHRoaXMgdHlwZQorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5o
YW5kbGVkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAg
ICBzd2l0Y2ggKGJhc2VUeXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6
IHsKKyAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzE2XSA9IHswfTsKKyAgICAgICAgaWYgKG1faXNS
b2J1c3RuZXNzRVhUU3VwcG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmdldG5Vbmlmb3JtZnZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwg
MTYgKiBzaXplb2YoR0MzRGZsb2F0KSwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9u
LCB2YWx1ZSk7CisgICAgICAgIGlmIChsZW5ndGggPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8odmFsdWVbMF0pOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0
MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKKyAgICB9CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UOiB7CisgICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CisgICAg
ICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3RoID09IDEpCisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworICAgIH0KKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOiB7CisgICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7
MH07CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3RoID4gMSkgewor
ICAgICAgICAgICAgYm9vbCBib29sVmFsdWVbMTZdID0gezB9OworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKQorICAgICAgICAgICAgICAgIGJvb2xWYWx1
ZVtqXSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2pdKTsKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oYm9vbFZhbHVlLCBsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbMF0pKTsKKyAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICAvLyBJZiB3
ZSBnZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRlbHkgY29t
cGxleCBsb2dpYyBhYm92ZQorICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7CisgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOworfQorCitQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9u
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRV
bmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KCF2YWxpZGF0ZVN0cmluZygiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7
CisgICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBHQzNEaW50IGFjdGl2ZVVuaWZvcm1zID0gMDsKKyAgICBtX2NvbnRleHQtPmdldE5v
bkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNz
Q29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7CisgICAgZm9yIChH
QzNEaW50IGkgPSAwOyBpIDwgYWN0aXZlVW5pZm9ybXM7IGkrKykgeworICAgICAgICBBY3RpdmVJ
bmZvIGluZm87CisgICAgICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgaSwgaW5mbykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgLy8gU3RyaXAgIlswXSIgZnJvbSB0aGUgbmFtZSBpZiBpdCdzIGFuIGFycmF5Lgor
ICAgICAgICBpZiAoaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKKyAgICAgICAgICAgIGluZm8u
bmFtZSA9IGluZm8ubmFtZS5sZWZ0KGluZm8ubmFtZS5sZW5ndGgoKSAtIDMpOworICAgICAgICAv
LyBJZiBpdCdzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGVsZW1l
bnQsIGFwcGVuZGluZyAiW2luZGV4XSIgdG8gdGhlIG5hbWUuCisgICAgICAgIGZvciAoR0MzRGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgaW5mby5zaXplOyArK2luZGV4KSB7CisgICAgICAgICAgICBT
dHJpbmcgdW5pZm9ybU5hbWUgPSBpbmZvLm5hbWUgKyAiWyIgKyBTdHJpbmc6Om51bWJlcihpbmRl
eCkgKyAiXSI7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09IHVuaWZvcm1OYW1lIHx8IG5hbWUg
PT0gaW5mby5uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTFVuaWZvcm1Mb2NhdGlv
bjo6Y3JlYXRlKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbiwgaW5mby50eXBlKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRW
ZXJ0ZXhBdHRyaWIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKKyAgICB9CisKKyAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgIGlmIChtX2FuZ2xlSW5zdGFuY2VkQXJy
YXlzICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0RJ
VklTT1JfQU5HTEUpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuZGl2aXNvcik7
CisKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKCghaXNHTEVTMkNv
bXBsaWFudCgpICYmICFpbmRleCAmJiBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRl
eEF0dHJpYlN0YXRlKDApLmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKQor
ICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmcKKyAgICAgICAgICAgIHx8ICFzdGF0
ZS5idWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PihzdGF0ZS5idWZmZXJCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0
YXRlLmVuYWJsZWQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJf
QVJSQVlfTk9STUFMSVpFRDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5ub3Jt
YWxpemVkKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZ
X1NJWkU6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuc2l6ZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUub3JpZ2luYWxTdHJpZGUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhzdGF0ZS50eXBlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpD
VVJSRU5UX1ZFUlRFWF9BVFRSSUI6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQz
MkFycmF5OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF0udmFsdWUsIDQpKTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmliIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworbG9uZyBsb25n
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9jb250ZXh0
LT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihyZXN1bHQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgaXNWYWxpZCA9
IGZhbHNlOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJ
VkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworICAgICAgICBpZiAobV9v
ZXNTdGFuZGFyZERlcml2YXRpdmVzKQorICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIWlzVmFsaWQpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmhpbnQo
dGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c0J1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyIHx8IGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWJ1ZmZl
ci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBt
X2NvbnRleHQtPmlzQnVmZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
dGV4dExvc3Q7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uICYmICFt
X2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiQ29u
dGV4dCBpcyBiZWluZyB1c2VkLiBBdHRlbXB0IHRvIHJlc29sdmUgdGhlIHBvbGljeS4iKTsKKyAg
ICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCkudG9wRG9jdW1l
bnQoKTsKKyAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKTsKKyAgICAgICAgaWYg
KHBhZ2UgJiYgIWRvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkpCisgICAgICAgICAgICBwYWdl
LT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5yZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwo
ZG9jdW1lbnQudXJsKCkpOworICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5IGRv
IGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdCBmcm9tIHJlc29sdXRpb24uIEEgbW9yZQorICAgICAg
ICAvLyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCB0cnkgdG8gY29uc3RydWN0IGEgcmVh
bCBjb250ZXh0LCBldGMgYW5kIHByb2NlZWQKKyAgICAgICAgLy8gd2l0aCBub3JtYWwgb3BlcmF0
aW9uLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI5MTIyCisgICAgICAgIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxl
ZChHQzNEZW51bSBjYXApCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVDYXBhYmlsaXR5KCJpc0VuYWJsZWQiLCBjYXApKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpCisgICAgICAg
IHJldHVybiBtX3N0ZW5jaWxFbmFibGVkOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxl
ZChjYXApOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVi
dWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1
ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRnJhbWVidWZmZXIoZnJhbWVidWZmZXItPm9i
amVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVu
ZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlci0+aGFz
RXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2NvbnRl
eHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitHQzNEYm9v
bGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIp
Cit7CisgICAgaWYgKCFzaGFkZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlci0+b2Jq
ZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVy
ZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIXRleHR1cmUt
Pmhhc0V2ZXJCZWVuQm91bmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9j
b250ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5s
aW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1By
b2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImxpbmtQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBXZWJHTFNoYWRlciog
dmVydGV4U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlRFWF9TSEFERVIpOworICAgICAgICBXZWJHTFNoYWRlciogZnJhZ21lbnRTaGFkZXIg
PSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRf
U0hBREVSKTsKKyAgICAgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNW
YWxpZCgpIHx8ICFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzVmFsaWQoKSB8
fCAhbV9jb250ZXh0LT5wcmVjaXNpb25zTWF0Y2gob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciks
IG9iamVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpIHx8ICFtX2NvbnRleHQtPmNoZWNrVmFyeWlu
Z3NQYWNraW5nKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclplcm8oZnJhZ21l
bnRTaGFkZXIpKSkgeworICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NvbnRleHQt
PmxpbmtQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CisgICAgcHJvZ3JhbS0+aW5jcmVh
c2VMaW5rQ291bnQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVsU3Rv
cmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICAgICAg
bV91bnBhY2tGbGlwWSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAgICAgIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgorICAg
ICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJH
TCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICAgICAgICAgIG1fdW5w
YWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFyYW0pOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
Zm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5UOgorICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAyIHx8IHBhcmFt
ID09IDQgfHwgcGFyYW0gPT0gOCkgeworICAgICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNz
Q29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKKyAgICAgICAgICAgICAgICBtX3BhY2tBbGlnbm1l
bnQgPSBwYXJhbTsKKyAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFD
S19BTElHTk1FTlQ6CisgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQgPSBwYXJhbTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9y
IGFsaWdubWVudCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb250ZXh0LT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgLy8gRHVl
IHRvIFdlYkdMJ3Mgc2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9zc2libGUg
dG8KKyAgICAvLyB0YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCisgICAgQVNT
RVJUKGNhbnZhcygpLT5vcmlnaW5DbGVhbigpKTsKKyAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJh
bWV0ZXJzLgorICAgIGlmICghcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVscyIsICJubyBkZXN0aW5h
dGlvbiBBcnJheUJ1ZmZlclZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzd2l0
Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZh
bGlkIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVs
cyIsICJmb3JtYXQgbm90IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhl
bCB0eXBlLgorICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1
ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJj
ZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsIHJl
YXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNp
emUsIHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCisgICAgdW5z
aWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZCA9IDA7CisgICAgdW5zaWduZWQgaW50IHBhZGRp
bmcgPSAwOworICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsKKyAgICAgICAg
R0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1h
dCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVp
cmVkLCAmcGFkZGluZyk7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAicmVhZFBp
eGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWly
ZWQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBsYXJn
ZSBlbm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgdm9pZCogZGF0YSA9IHBp
eGVscy0+YmFzZUFkZHJlc3MoKTsKKworICAgIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZl
ckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGlu
Zy5nZXQoKSk7CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZWFkblBpeGVsc0VYVCh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBkYXRhKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgfQorCisjaWYgT1MoREFSV0lO
KQorICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgLy8gd2UgaGF2ZW4ndCBjb21w
dXRlZCBwYWRkaW5nCisgICAgICAgIG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMo
Zm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVz
UmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3
aGVuIEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xFUyBkcml2ZXIgYnVnCisgICAgLy8g
b24gUUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNob3Vs
ZAorICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgorICAgIGlmICghbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBo
YSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIqPihkYXRhKTsKKyAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXkgPSAwOyBpeSA8
IGhlaWdodDsgKytpeSkgeworICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXggPSAwOyBpeCA8
IHdpZHRoOyArK2l4KSB7CisgICAgICAgICAgICAgICAgcGl4ZWxzWzNdID0gMjU1OworICAgICAg
ICAgICAgICAgIHBpeGVscyArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGl4ZWxz
ICs9IHBhZGRpbmc7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdl
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFt
X3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVy
YnVmZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgc3dp
dGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4Ogor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUOgorICAgICAgICBpZiAoaW50
ZXJuYWxmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUICYmICFtX2V4dHNS
R0IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3Jt
YXQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2NvbnRleHQt
PnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50
ZXJuYWxmb3JtYXQpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQo
dHJ1ZSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
U1RFTkNJTDoKKyAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMz
RDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAg
bV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBt
X3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQo
KSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50
ZXJuYWxmb3JtYXQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVm
ZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZl
cnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTaXplKCJz
Y2lzc29yIiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQt
PnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgic2hh
ZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIFN0cmluZyBzdHJpbmdX
aXRob3V0Q29tbWVudHMgPSBTdHJpcENvbW1lbnRzKHN0cmluZykucmVzdWx0KCk7CisgICAgaWYg
KCF2YWxpZGF0ZVN0cmluZygic2hhZGVyU291cmNlIiwgc3RyaW5nV2l0aG91dENvbW1lbnRzKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHNoYWRlci0+c2V0U291cmNlKHN0cmluZyk7CisgICAgbV9j
b250ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZ1dpdGhvdXRD
b21tZW50cyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuYyhH
QzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0
ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQorICAgICAgICByZXR1cm47CisgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsK
KyAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CisgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNr
ID0gbWFzazsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoZmFjZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZST05UX0FORF9CQUNLOgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwor
ICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVu
Y01hc2sgPSBtYXNrOworICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKKyAgICAgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNr
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAg
ICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01h
c2tCYWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxG
dW5jU2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayhHQzNEdWludCBt
YXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1h
c2s7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVp
bnQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgc3dpdGNoIChmYWNlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJPTlRfQU5EX0JBQ0s6CisgICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOworICAgICAgICBt
X3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZST05UOgorICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9z
dGVuY2lsTWFza0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
c3RlbmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChm
YWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Rl
bmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZh
aWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3Jl
IGFueSBlcnJvcnMgcmV0dXJuZWQuCisgICAgZWMgPSAwOworICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Cisg
ICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBOb3RUZXhT
dWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodGV4KTsKKyAgICBBU1NFUlQoIWxl
dmVsIHx8ICFXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7CisgICAgaWYgKCFw
aXhlbHMpIHsKKyAgICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVtZW50YXRp
b24gY2xlYXJzIHRleHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9yZSB0cnVl
LgorICAgICAgICAvLyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFyZSB1c2lu
ZyBBTkdMRV9kZXB0aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcworICAgICAgICAvLyBj
YW4gbm90IGJlIGNsZWFyZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJlIGNsZWFyZWQgYnkg
YmluZGluZyB0byBhbiBmYm8gYW5kIGNhbGxpbmcKKyAgICAgICAgLy8gY2xlYXIuCisgICAgICAg
IGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYm9vbCBz
dWNjZWVkID0gbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAgICBpZiAoIXN1Y2NlZWQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkp
OworICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwor
ICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSB0ZXhJbWFnZTJE
IGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0
aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KKyAgICAgICAgICAgIHRleC0+bWFya0ludmFsaWQodGFy
Z2V0LCBsZXZlbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
dGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIHR5cGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2Uy
REltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsK
KyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VF
eHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBo
YSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0
ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdl
RXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNvbnN0
IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsK
KworICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOworICAgIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcg
JiYgIWZsaXBZKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2Ugewor
ICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERh
dGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdl
RXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1h
Z2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBu
ZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBp
ZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3Jl
aShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQp
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rp
b25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCkKK3sKKyAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBmdW5jdGlvblR5
cGUsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoZnVuY3Rpb25OYW1lLCB0YXJnZXQs
IHRydWUpOworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGZ1bmN0aW9uVHlwZSA9PSBOb3RUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgIGlmIChsZXZl
bCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZlclZpZXcs
IGZ1bmN0aW9uIHZhbGlkYXRlVGV4RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhlciB0byB2
YWxpZGF0ZSB0aGUgU2V0dGFibGVUZXhGb3JtYXQKKyAgICAgICAgLy8gYnkgY2hlY2tpbmcgaWYg
dGhlIEFycmF5QnVmZmVyVmlldyBpcyBudWxsIG9yIG5vdC4KKyAgICAgICAgaWYgKHNvdXJjZVR5
cGUgIT0gU291cmNlQXJyYXlCdWZmZXJWaWV3KSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRl
U2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdmFs
aWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9uTmFtZSwg
eG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8v
IEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93
IGhhcHBlbnMgZmlyc3QuCisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZz
ZXQgKyBoZWlnaHQgPCAwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVuc2lvbnMi
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeG9m
ZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNl
dCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmUtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdl
dCwgbGV2ZWwpICE9IHR5cGUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQg
Zm9ybWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRl
eEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzLCBOdWxsQWxsb3dlZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4
SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBw
aXhlbHMtPmJhc2VBZGRyZXNzKCkgOiAwOworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsK
KyAgICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYm
IChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAg
aWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBh
Y2tBbGlnbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1l
bnQgPSB0cnVlOworICAgIH0KKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlw
ZSwgZGF0YSwgZWMpOworICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdl
MkQsIFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVs
cy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGJvb2wgbmVlZENv
bnZlcnNpb24gPSB0cnVlOworICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5
cyBvZiBmb3JtYXQgUkdCQTguCisgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVz
dGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBG
bGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KKyAgICBpZiAoIW1fdW5w
YWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUs
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5l
ZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7
CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgZGV2aWNlU2NhbGVGYWN0b3IpCit7CisgICAgSW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQp
OworICAgIHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIEltYWdlQnVmZmVyKiBi
dWYgPSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFi
dWYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9P
Rl9NRU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBp
bWFnZS0+c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXpl
KTsKKyAgICBidWYtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdl
QnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdlMkQiLCBp
bWFnZSwgZWMpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9y
UmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJl
bmRlcmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAg
ICBpbWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0
KCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOworCisgICAgaWYgKCFpbWFn
ZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1h
Z2UyRCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIHRleEltYWdlMkRJ
bXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9y
UmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleElt
YWdlMkQiLCBjYW52YXMsIGVjKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90
VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1h
dCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4
dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUp
OworICAgIC8vIElmIHBvc3NpYmxlLCBjb3B5IGZyb20gdGhlIGNhbnZhcyBlbGVtZW50IGRpcmVj
dGx5IHRvIHRoZSB0ZXh0dXJlCisgICAgLy8gdmlhIHRoZSBHUFUsIHdpdGhvdXQgYSByZWFkLWJh
Y2sgdG8gc3lzdGVtIG1lbW9yeS4KKyAgICAvLworICAgIC8vIEZJWE1FOiByZXN0cmljdGlvbiBv
ZiAoUkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZVEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCisgICAg
Ly8gSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJl
IGZ1bGx5IGZ1bmN0aW9uYWwuCisgICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
ID09IHRhcmdldCAmJiB0ZXh0dXJlICYmIHR5cGUgPT0gdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQs
IGxldmVsKQorICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwg
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSAmJiB0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBj
YW52YXMtPmJ1ZmZlcigpOworICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxh
dGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5h
bGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5cGUpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gY2FudmFzLT5nZXRJbWFnZURhdGEoKTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAg
ICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgdGV4SW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5j
b3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklE
RU8pCitQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVU
b0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdT
dG9yZUNvcHksIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIEludFNpemUgc2l6ZSh2aWRlby0+dmlk
ZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9
IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKKyAgICBpZiAoIWJ1Zikg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01F
TU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOworICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUgdGV4
dHVyZSBjb3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgorICAgIHZpZGVvLT5wYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOworICAgIHJldHVybiBi
dWYtPmNvcHlJbWFnZShiYWNraW5nU3RvcmVDb3B5KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlk
ZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleEltYWdlMkQi
LCB2aWRlbywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBO
b3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdvIHRo
cm91Z2ggdGhlIGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3aXRob3V0
IGEgcmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KKyAgICAvLyBPdGhlcndp
c2UsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgU1cgcGF0aC4KKyAgICAvLyBGSVhN
RTogVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3JtYXQgc2hvdWQgYmUg
UkdCIG9yIFJHQkEsCisgICAgLy8gdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBhbmQgbGV2
ZWwgc2hvdWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBXZWJH
TFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwg
dGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0g
dGFyZ2V0ICYmIHRleHR1cmUKKyAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKKyAgICAgICAgJiYg
dHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAmJiAodGV4
dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgJiYg
IWxldmVsKSB7CisgICAgICAgIGlmICh2aWRlby0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGxldmVsLCB0eXBlLCBp
bnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkg
eworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgdHlw
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3Jt
YWwgcHVyZSBTVyBwYXRoLgorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9J
bWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBp
ZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBh
cmFtZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsK
KyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBh
cmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJFUEVBVCkKKyAgICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBF
QVQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0
ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKCFtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
YykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKGlzRmxvYXQpIHsKKyAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJmKHBuYW1lLCBwYXJh
bWYpOworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFy
YW1mKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBh
cmFtaSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBw
YXJhbWkpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFt
ZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKQor
eworICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBwYXJhbSwgMCwgdHJ1ZSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgdGV4UGFyYW1ldGVyKHRh
cmdldCwgcG5hbWUsIDAsIHBhcmFtLCBmYWxzZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBp
Z25vcmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIGVjID0gMDsKKyAgICBBU1NFUlQoIWlzQ29u
dGV4dExvc3QoKSk7CisgICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleFN1
YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNpemUoInRleFN1
YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSk7CisgICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFi
bGVUZXhGb3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQpKTsKKyAgICBXZWJHTFRleHR1cmUq
IHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOworICAgIGlmICghdGV4KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCgoeG9mZnNldCArIHdpZHRoKSA+PSAwKTsK
KyAgICBBU1NFUlQoKHlvZmZzZXQgKyBoZWlnaHQpID49IDApOworICAgIEFTU0VSVCh0ZXgtPmdl
dFdpZHRoKHRhcmdldCwgbGV2ZWwpID49ICh4b2Zmc2V0ICsgd2lkdGgpKTsKKyAgICBBU1NFUlQo
dGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkgPj0gKHlvZmZzZXQgKyBoZWlnaHQpKTsKKyAg
ICBBU1NFUlQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSA9PSBmb3JtYXQp
OworICAgIEFTU0VSVCh0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gdHlwZSk7CisgICAg
bV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VI
dG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGRhdGE7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFj
dG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFj
ZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOyAgCisgICAgaWYgKCFpbWFn
ZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJh
ZCBpbWFnZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJj
ZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFn
ZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0
YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7CisKKyAgICBib29sIG5lZWRDb252
ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3Ag
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKKyAgICAgICAg
bmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRl
eHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZs
aXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRo
KCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291
cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFk
IGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhT
dWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lk
dGgoKSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsICBuZWVkQ29udmVyc2lvbiA/IGRh
dGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1l
bnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVUZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscywgTnVsbE5vdEFsbG93ZWQpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRl
eEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZp
ZXcsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBl
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBw
aXhlbHMtPmJhc2VBZGRyZXNzKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOworICAg
IGJvb2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7CisgICAgaWYgKGRhdGEgJiYgKG1f
dW5wYWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgeworICAgICAgICBpZiAo
IW1fY29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0Fs
aWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wRGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7CisgICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9
IHRydWU7CisgICAgfQorICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IDEpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOworICAgIGlmIChjaGFu
Z2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUlt
YWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMt
PmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBib29sIG5lZWRDb252ZXJz
aW9uID0gdHJ1ZTsKKyAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2Yg
Zm9ybWF0IFJHQkE4LgorICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0
aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBv
ciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEp
CisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgMSk7CisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsIG5l
ZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7
CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFn
ZSwgZWMpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVu
ZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRl
cmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAgICBp
bWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCks
IGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOworCisgICAgaWYgKCFpbWFnZUZv
clJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2Uy
RCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBpbWFnZUZv
clJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXhTdWJJbWFn
ZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGlt
YWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
ZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRN
TENhbnZhc0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCBjYW52YXMsIGVjKQorICAgICAgICB8fCAh
dmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRN
TENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBj
YW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMt
PmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAgIHRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZURh
dGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJ
bWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlSFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykKKyAgICAgICAg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJj
ZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lk
dGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9m
ZnNldCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRl
b0ZyYW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVj
KTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4U3ViSW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQg
cHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlm
b3JtMWYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYt
Pmxlbmd0aCgpLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICgobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0NVQkUpICYmIHggPj0gKGludCltX3RleHR1cmVVbml0cy5zaXplKCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ1bmlmb3JtMWkiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB4KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBs
b2NhdGlvbiwgdiwgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlvbi0+dHlw
ZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHYtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2LT5kYXRh
KClbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7CisgICAg
ICAgICAgICAgICAgTE9HKFdlYkdMLCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4g
TG9jYXRpb24gdHlwZSA9ICUwNFguIiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRh
KClbaV0sIGxvY2F0aW9uLT50eXBlKCkpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZh
bGlkIHRleHR1cmUgdW5pdCIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUs
IDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVSX0NVQkUpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7ICsraSkgeworICAgICAgICAgICAgaWYgKCgo
R0MzRGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkp
KSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9j
YXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0y
ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHgsIHkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2
IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVu
aWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChs
b2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9y
bTJpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24o
KSwgeCwgeSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMml2
IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlm
b3JtMml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZs
b2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgMykpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVu
Z3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1
cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0
LT51bmlmb3JtM2kobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCBz
aXplLCAzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
bmlmb3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB4LCB5LCB6LCB3KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cygidW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCA0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAv
IDQsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyA0LCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2Nh
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0g
bV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZv
ciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29u
dGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwg
NCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlv
biwgdiwgc2l6ZSwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9y
bTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
InVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3Nl
LCB2LCBzaXplLCA0KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1h
dHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHRyYW5zcG9zZSwgdik7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYs
IDkpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDksIHRyYW5zcG9zZSwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gOSwgdHJh
bnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24s
IHRyYW5zcG9zZSwgdiwgMTYpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDE2LCB0cmFu
c3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1N
YXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHNpemUgLyAxNiwgdHJhbnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAo
IWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJ1c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRlZCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgcHJvZ3JhbSA9IDA7Cisg
ICAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
c2VQcm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKG1fY3VycmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBpZiAobV9j
dXJyZW50UHJvZ3JhbSkKKyAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQo
Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFt
OworICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsK
KyAgICAgICAgaWYgKHByb2dyYW0pCisgICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFjaGVkKCk7
CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJ2YWxpZGF0ZVByb2dyYW0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0IHYwKQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhB
dHRyaWIxZiIsIGluZGV4LCAxLCB2MCwgMC4wZiwgMC4wZiwgMS4wZik7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0
MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIs
IGluZGV4LCB2LCAxKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sK
KyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCBzaXpl
LCAxKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICB2ZXJ0ZXhB
dHRyaWJmSW1wbCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAsIHYxLCAwLjBmLCAxLjBm
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgi
dmVydGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplKQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2
IiwgaW5kZXgsIHYsIHNpemUsIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYx
LCBHQzNEZmxvYXQgdjIpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjNm
IiwgaW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYp
Cit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwg
Myk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4
QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgc2l6ZSwgMyk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYz
KQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZiIsIGluZGV4LCA0LCB2
MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhB
dHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCA0KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZl
cnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCBzaXplLCA0KTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQg
c2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0
cmlkZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZh
bGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQg
b2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc2l6ZSA8IDEgfHwg
c2l6ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUgfHwgb2Zmc2V0IDwgMCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIHNpemUsIHN0cmlkZSBvciBvZmZzZXQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVs
ZW1lbnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUs
IHR5cGUgYW5kIHN0cmlkZQorICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IHNpemVJbkJ5dGVz
KHR5cGUpOworICAgIGlmICghdHlwZVNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAi
aW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKChzdHJpZGUg
JSB0eXBlU2l6ZSkgfHwgKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkgJSB0eXBlU2l6
ZSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zmc2V0IG5v
dCB2YWxpZCBmb3IgdHlwZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RzaXpl
aSBieXRlc1BlckVsZW1lbnQgPSBzaXplICogdHlwZVNpemU7CisKKyAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVsZW1lbnQs
IHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4o
b2Zmc2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250
ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJj
b250ZXh0IGFscmVhZHkgbG9zdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9j
b250ZXh0R3JvdXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0
Q29udGV4dE1vZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICBtX2NvbnRleHRMb3N0TW9k
ZSA9IG1vZGU7CisKKyAgICBpZiAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpIHsKKyAgICAgICAg
Ly8gSW5mb3JtIHRoZSBlbWJlZGRlciB0aGF0IGEgbG9zdCBjb250ZXh0IHdhcyByZWNlaXZlZC4g
SW4gcmVzcG9uc2UsIHRoZSBlbWJlZGRlciBtaWdodAorICAgICAgICAvLyBkZWNpZGUgdG8gdGFr
ZSBhY3Rpb24gc3VjaCBhcyBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gdG8gdXNlIFdl
YkdMIGFnYWluLgorICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50
KCkuZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaWRMb3Nl
V2ViR0xDb250ZXh0KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCkpOworICAgIH0KKworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsK
KworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gTWFrZSBhYnNvbHV0ZWx5
IHN1cmUgd2UgZG8gbm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRlZCB0ZXh0dXJlIG9yIGZy
YW1lYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmco
MCk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOwor
ICAgIH0KKworICAgIC8vIFRoZXJlIGlzIG5vIGRpcmVjdCB3YXkgdG8gY2xlYXIgZXJyb3JzIGZy
b20gYSBHTCBpbXBsZW1lbnRhdGlvbiBhbmQKKyAgICAvLyBsb29waW5nIHVudGlsIGdldEVycm9y
KCkgYmVjb21lcyBOT19FUlJPUiBtaWdodCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGlmCisgICAg
Ly8gdGhlIGRyaXZlciBvciBjb250ZXh0IGltcGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4gU28sIGxv
b3AgYSByZWFzb25hYmx5CisgICAgLy8gbGFyZ2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFu
eSBleGlzdGluZyBlcnJvcnMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewor
ICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpO
T19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBDb25zb2xlRGlzcGxheVBy
ZWZlcmVuY2UgZGlzcGxheSA9IChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgPyBEaXNwbGF5SW5D
b25zb2xlOiBEb250RGlzcGxheUluQ29uc29sZTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMLCAibG9zZUNvbnRleHQiLCAiY29udGV4
dCBsb3N0IiwgZGlzcGxheSk7CisKKyAgICAvLyBEb24ndCBhbGxvdyByZXN0b3JhdGlvbiB1bmxl
c3MgdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVuCisgICAgLy8gZGlzcGF0Y2hl
ZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgorICAgIG1fcmVzdG9yZUFsbG93
ZWQgPSBmYWxzZTsKKworICAgIC8vIEFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGNv
bnRleHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50CisgICAgLy8gdGhlIHNwZWMgYmVoYXZpb3Ig
b2YgcXVldWVpbmcgYSB0YXNrLgorICAgIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIu
c3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VS
ZXN0b3JlQ29udGV4dCgpCit7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCBub3QgbG9zdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKSB7CisgICAgICAgIGlm
IChtX2NvbnRleHRMb3N0TW9kZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCkKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
InJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQgcmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yZXN0b3JlVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitQbGF0Zm9y
bUxheWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorewor
ICAgIHJldHVybiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKSA/IG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpIDogMDsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9i
amVjdCogb2JqZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2Nv
bnRleHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0KQor
eworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29udGV4dE9iamVjdHMucmVtb3ZlKG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2NvbnRleHRPYmpl
Y3RzLmFkZChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNo
QW5kUmVtb3ZlQWxsT2JqZWN0cygpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKG1fY29udGV4dE9iamVjdHMuc2l6
ZSgpID4gMCkgeworICAgICAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+OjppdGVyYXRv
ciBpdCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKKyAgICAgICAgKCppdCktPmRldGFjaENv
bnRleHQoKTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYXNQZW5k
aW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnN0b3AoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdCgpICYm
ICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKKyAgICAgICAgZm9yY2VMb3N0Q29udGV4
dChTeW50aGV0aWNMb3N0Q29udGV4dCk7CisgICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQz
RCgpOworICAgIH0KK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEYm9vbGVhbiB2YWx1
ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgJnZhbHVlKTsKKyAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Cit9CisKK1dlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihH
QzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX1dSSVRFTUFTSykgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKDAsIDApOworICAgIH0KKyAgICBHQzNEYm9vbGVhbiB2YWx1ZVs0XSA9
IHswfTsKKyAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CisgICAgYm9v
bCBib29sVmFsdWVbNF07CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDQ7ICsraWkpCisgICAg
ICAgIGJvb2xWYWx1ZVtpaV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtpaV0pOworICAgIHJl
dHVybiBXZWJHTEdldEluZm8oYm9vbFZhbHVlLCA0KTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgR0MzRGZsb2F0IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwg
JnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKK30KKworV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW50UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1l
KQoreworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYo
cG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cit9CisKK1dl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4
dC0+Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBw
bmFtZSkKK3sKKyAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5n
ZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgIHN3
aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJ
RFRIX1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAg
ICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORF9DT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVB
Ul9WQUxVRToKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cit9CisKK1dlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0gcG5hbWUpCit7CisgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsK
KyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJ
RVdQT1JUX0RJTVM6CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlZJRVdQT1JUOgorICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCit7CisgICAgYm9vbCByZXNl
dEFjdGl2ZVVuaXQgPSBmYWxzZTsKKyAgICBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25G
bGFnIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNp
b25GbGFnPigobV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVF
eHRlbnNpb25GbG9hdExpbmVhckVuYWJsZWQgOiAwKSB8IChtX29lc1RleHR1cmVIYWxmRmxvYXRM
aW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25IYWxmRmxvYXRMaW5lYXJFbmFi
bGVkIDogMCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1
cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRU
b1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKKyAgICAgICAgICAgIHx8IChtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0
dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkpIHsK
KyAgICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7CisgICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKKyAgICAgICAgICAgICAgICByZXNl
dEFjdGl2ZVVuaXQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNldEFjdGl2ZVVu
aXQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOworICAg
ICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXgyRDsKKyAgICAgICAgICAgIFdlYkdMVGV4dHVyZSog
dGV4Q3ViZU1hcDsKKyAgICAgICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7CisgICAgICAgICAg
ICAgICAgU3RyaW5nIG1zZyhTdHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVyZSB1bml0ICIp
ICsgU3RyaW5nOjpudW1iZXIoaWkpCisgICAgICAgICAgICAgICAgICAgICsgIiBpcyBub3QgcmVu
ZGVyYWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21wYXRpYmxlIHRl
eHR1cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgorICAgICAgICAg
ICAgICAgICAgICArICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUgd2l0aCBsaW5l
YXIgZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxmLWZsb2F0IGxp
bmVhciBleHRlbnNpb24gZW5hYmxlZC4iKTsKKyAgICAgICAgICAgICAgICBwcmludEdMV2Fybmlu
Z1RvQ29uc29sZShmdW5jdGlvbk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7CisgICAgICAgICAgICAgICAgdGV4
Q3ViZU1hcCA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJE
QmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90ZXh0dXJlVW5p
dHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1
cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVu
c2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOworICAgICAgICAgICAg
aWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJl
VW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4
dGVuc2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhDdWJlTWFwKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKKyAgICAgICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCkKK3sK
KyAgICB1bnNpZ25lZCBjaGFyIGJsYWNrW10gPSB7MCwgMCwgMCwgMjU1fTsKKyAgICBtX2JsYWNr
VGV4dHVyZTJEID0gY3JlYXRlVGV4dHVyZSgpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmxhY2tUZXh0dXJlMkQtPm9iamVjdCgp
KTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSBj
cmVhdGVUZXh0dXJlKCk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgbV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmplY3QoKSk7
CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxh
Y2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZm
ZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpCit7CisgICAgdW5zaWduZWQgbmVl
ZCA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KHRleEludGVybmFs
Rm9ybWF0KTsKKyAgICB1bnNpZ25lZCBoYXZlID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5u
ZWxCaXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3JtYXQpOworICAgIHJldHVybiAobmVlZCAmIGhh
dmUpID09IG5lZWQ7Cit9CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91
bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7CisgICAgaWYgKG1fYXR0
cmlidXRlcy5hbHBoYSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwor
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOworfQorCitpbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQoreworICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAg
IHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgpOworICAg
IHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgp
IDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Cit9CisK
K2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKQor
eworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JC
dWZmZXJIZWlnaHQoKTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVm
ZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkuaGVpZ2h0KCk7Cit9CisKK1dlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKK3sKKyAgICBXZWJHTFRleHR1
cmUqIHRleHR1cmUgPSBudWxscHRyOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVy
ZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcuZ2V0KCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgorICAgICAgICBpZiAoIXVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVy
ZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUDoKKyAgICAgICAgaWYgKHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0
aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdl
dCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKCF0ZXh0dXJlKQor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1cmUiKTsKKyAgICByZXR1cm4gdGV4dHVyZTsK
K30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBj
b25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2OworICAgIGlmIChzdHJp
bmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlU2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KQor
eworICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic2l6ZSA8IDAi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIXZhbGlkYXRlQ2hh
cmFjdGVyKHN0cmluZ1tpXSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzdHJpbmcgbm90IEFT
Q0lJIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRl
eEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQoreworICAgIHN3aXRjaCAoZm9ybWF0
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlO
QU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3Qg
ZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OlNSR0JfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKKyAgICBk
ZWZhdWx0OgorICAgICAgICBpZiAoKGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUIHx8
IGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKQorICAgICAgICAgICAgJiYg
bV9leHRzUkdCKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgaWYgKG1fb2Vz
VGV4dHVyZUZsb2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUhh
bGZGbG9hdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
OgorICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5
cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFZlcmlmeSB0aGF0
IHRoZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgorICAgIHN3
aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpI
QUxGX0ZMT0FUX09FUykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUg
Zm9yIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6U1JHQl9FWFQ6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dHlwZSBmb3IgUkdCIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgorICAgICAgICBpZiAodHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAgICAgJiYgdHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNAorICAgICAgICAgICAg
JiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMQorICAg
ICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAg
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmICghbV93ZWJn
bERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERF
UFRIX0NPTVBPTkVOVCBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9TSE9SVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQ
VEhfQ09NUE9ORU5UIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmIChsZXZlbCA+IDApIHsKKyAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxl
dmVsIG11c3QgYmUgMCBmb3IgREVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOworICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1
cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lM
IG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJ
TCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJl
IDAgZm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVs
IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2
ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAg
ICAgICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQg
ZG9uJ3QKKyAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwu
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleEZ1bmNWYWxp
ZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKK3sKKyAg
ICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBj
b21iaW5hdGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhU
TUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBv
biB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgorICAgIGlmICghdmFsaWRh
dGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwp
IHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVGb3JMZXZlbCA9
IHBvdygyLjAsIG1fbWF4VGV4dHVyZUxldmVsIC0gMSAtIGxldmVsKTsKKyAgICBzd2l0Y2ggKHRh
cmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAg
IGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVy
ZVNpemVGb3JMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFn
ZTJEICYmIHdpZHRoICE9IGhlaWdodCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9
IGhlaWdodCBmb3IgY3ViZSBtYXAiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBGb3IgdGV4SW1h
Z2Ugd2lkdGggPT0gaGVpZ2h0LgorICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2UgdGhhdCB3aWxs
IGJlIGNoZWNrZWQgd2hlbiBjaGVja2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGluIHJhbmdlLgor
ICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGJvcmRlcikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiYm9yZGVyICE9IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcq
IHBpeGVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE51bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKK3sKKyAgICBpZiAoIXBpeGVscykgeworICAg
ICAgICBpZiAoZGlzcG9zaXRpb24gPT0gTnVsbEFsbG93ZWQpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0
aW9uTmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRU
eXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlw
ZSBVTlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGlmIChwaXhlbHMt
PmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAidHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJh
eSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9h
dAorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcg
bm90IEZsb2F0MzJBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRf
T0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgIC8vIEFzIHBlciB0aGUgc3Bl
Y2lmaWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdoZW4KKyAgICAgICAg
Ly8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgorICAgICAgICBpZiAocGl4ZWxz
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9BVF9PRVMgYnV0IEFy
cmF5QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVzUmVxdWly
ZWQ7CisgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3Rh
bEJ5dGVzUmVxdWlyZWQsIDApOworICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVk
KSB7CisgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7CisgICAgICAgICAgZXJy
b3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lk
dGgsIGhlaWdodCwgMSwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7CisgICAgICAgICAgaWYgKHBp
eGVscy0+Ynl0ZUxlbmd0aCgpID09IHRvdGFsQnl0ZXNSZXF1aXJlZCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3Qg
d2l0aCBVTlBBQ0tfQUxJR05NRU5UID4gMSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVy
VmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICBy
ZXR1cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRh
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKK3sKKyAg
ICBpZiAoIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNSZXF1aXJlZCA9IDA7CisK
KyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENf
UkdCX0FNRDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4
OworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgICAgIGNv
bnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OworICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9z
cyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAgICAg
IGludCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8ga0Jsb2Nr
SGVpZ2h0OworICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51
bUJsb2Nrc0Rvd24gKiBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EOgor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9B
TFBIQV9BTUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0g
MTY7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICAgICAg
Y29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgICAgICBpbnQgbnVtQmxvY2tzQWNy
b3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOworICAgICAgICAg
ICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxv
Y2tIZWlnaHQ7CisgICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICog
bnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CisgICAgICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4OworICAgICAgICAgICAgY29uc3QgaW50IGtC
bG9ja0hlaWdodCA9IDg7CisgICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdp
ZHRoLCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiA0ICsg
NykgLyBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OworICAgICAgICAgICAgY29uc3Qg
aW50IGtCbG9ja1dpZHRoID0gMTY7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0
ID0gODsKKyAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9j
a1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAvIGtCbG9j
a1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSAhPSBieXRlc1JlcXVpcmVkKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZv
ciBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJl
c3NlZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAgY29uc3QgR0MzRHNpemVp
IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja0hlaWdodCA9
IDQ7CisgICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0YXJnZXQgPyBtX21h
eFRleHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7CisgICAgICAgIGNvbnN0IEdD
M0RzaXplaSBtYXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVyZVNpemUgPj4gbGV2ZWw7
CisgICAgICAgIGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0aCA9PSAxKSB8fCAobGV2
ZWwgJiYgd2lkdGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tXaWR0aCkgJiYgd2lkdGggPD0g
bWF4Q29tcHJlc3NlZERpbWVuc2lvbik7CisgICAgICAgIGJvb2wgaGVpZ2h0VmFsaWQgPSAobGV2
ZWwgJiYgaGVpZ2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQgPT0gMikgfHwgKCEoaGVpZ2h0
ICUga0Jsb2NrSGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7Cisg
ICAgICAgIGlmICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lN
RzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9J
TUc6CisgICAgICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBwb3dlcnMgb2YgMi4KKyAg
ICAgICAgaWYgKCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0ICYgKGhlaWdodCAtIDEp
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBm
b3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4
U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgV2ViR0xU
ZXh0dXJlKiB0ZXgpCit7CisgICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwKSB7Cisg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIpOworICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1dp
ZHRoID0gNDsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgIGlm
ICgoeG9mZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdodCkpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBs
ZSBvZiA0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHdpZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAgICAg
ICAgICAgIHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVs
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2
YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZl
bCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzogeworICAgICAgICBpZiAoeG9mZnNl
dCB8fCB5b2Zmc2V0KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlv
ZmZzZXQgbXVzdCBiZSB6ZXJvIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAg
ICAgICAgICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3Rpbmcg
bGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdl
dCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CisgICAgfQorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
bW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpQT0lOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9TVFJJUDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1A6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TElORVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVA6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBkcmF3IG1vZGUiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBpZiAo
bV9zdGVuY2lsTWFzayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5jUmVmICE9
IG1fc3RlbmNpbEZ1bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3RlbmNpbEZ1
bmNNYXNrQmFjaykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNrIHN0ZW5j
aWxzIHNldHRpbmdzIGRvIG5vdCBtYXRjaCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZ1bmMp
Cit7CisgICAgc3dpdGNoIChmdW5jKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TkVW
RVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFQVRFUjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFVQUw6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwcmludEdMRXJyb3JUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlm
ICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IC0tbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQ7CisgICAgcHJpbnRXYXJuaW5nVG9Db25z
b2xlKG1lc3NhZ2UpOworCisgICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkK
KyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDogdG9vIG1hbnkgZXJyb3JzLCBu
byBtb3JlIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBjb25zb2xlIGZvciB0aGlzIGNv
bnRleHQuIik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludFdhcm5pbmdU
b0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghY2FudmFzKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgbWVzc2Fn
ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVy
RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQpCit7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKKyAgICAgICAgICAgICYmIGF0dGFjaG1l
bnQgPiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKKyAgICAgICAgICAgICYm
IGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlVOQ19TVUJUUkFDVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0Vf
U1VCVFJBQ1Q6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQ6CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6Ok1BWF9FWFQ6CisgICAgICAgIGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1J
Tl9FWFQgfHwgbW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWlu
TWF4KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKK3sKKyAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05F
X01JTlVTX0NPTlNUQU5UX0NPTE9SKQorICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlO
VVNfQ09OU1RBTlRfQUxQSEEpKQorICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
Q09OU1RBTlRfQ09MT1IpCisgICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNE
OjpDT05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19D
T05TVEFOVF9BTFBIQSkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNy
YyBhbmQgZHN0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHko
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCit7CisgICAgc3dpdGNoIChj
YXApIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFX0NPVkVSQUdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgY2FwYWJpbGl0eSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
RmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICgh
dikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5j
dGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWly
ZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1p
blNpemUpCit7CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1N
YXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCks
IHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNp
emVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAgcmV0dXJuIHZhbGlk
YXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2Us
IHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sK
KyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxl
bmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6
ZSkKK3sKKyAgICBpZiAoIWxvY2F0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAodHJhbnNw
b3NlKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwg
KHNpemUgJSByZXF1aXJlZE1pblNpemUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNp
emUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRh
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gdXNhZ2UpCit7CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7CisgICAgc3dpdGNo
ICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUjoKKyAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKS5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlC
dWZmZXIuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICBpZiAoIWJ1ZmZlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgc3dpdGNoICh1c2FnZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNUQVRJQ19EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNf
RFJBVzoKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB1c2FnZSIpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
ICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBpbWFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvbnN0IFVSTCYg
dXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7CisgICAgaWYgKHVy
bC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7CisgICAgICAgIGVjID0gU0VDVVJJ
VFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVu
dChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigp
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7CisgICAgICAgIGVj
ID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCisjaWYgRU5BQkxFKFZJREVPKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXZp
ZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKKyAgICAgICAgZWMgPSBTRUNV
UklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJ
bXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBl
eHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdD
M0RmbG9hdCB2MykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KKyAg
ICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIHN3aXRjaCAoZXhw
ZWN0ZWRTaXplKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVy
dGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
NGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIFZlcnRleEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0
cmliVmFsdWVbaW5kZXhdOworICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7CisgICAgYXR0
cmliVmFsdWUudmFsdWVbMV0gPSB2MTsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOwor
ICAgIGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgdmVydGV4QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgsIHYtPmRh
dGEoKSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4
cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJ
biBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgorICAgIGlmIChpbmRl
eCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUp
IHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIx
ZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYjNmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgVmVydGV4QXR0cmliVmFsdWUmIGF0
dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07CisgICAgYXR0cmliVmFsdWUu
aW5pdFZhbHVlKCk7CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytp
aSkKKyAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWldID0gdltpaV07Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCit7CisgICAgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICAKKyAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
LT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSLCAwKTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KDApOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOworICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVsxXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBm
OworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKKyAgICBtX2ZvcmNl
QXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmUgPSBmYWxzZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVy
dGV4QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KQoreworICAgIGNvbnN0IFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7CisgICAgY29uc3QgVmVydGV4QXR0
cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKKyAgICBpZiAo
IW1fY3VycmVudFByb2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIHVzaW5n
VmVydGV4QXR0cmliMCA9IG1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7
CisgICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMCkKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNl
ZEJlZm9yZSA9IHRydWU7CisgICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0ZXhBdHRy
aWIwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAg
JiYgIW1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKKyAgICBtX2NvbnRleHQtPmJpbmRC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyLT5vYmplY3QoKSk7CisgICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZl
cnRleCArIDEpICogNCAqIHNpemVvZihHQzNEZmxvYXQpOworICAgIGlmIChidWZmZXJEYXRhU2l6
ZSA+IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5idWZm
ZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFTaXplOworICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1
ZmZlclJlZmlsbCA9IHRydWU7CisgICAgfQorICAgIGlmICh1c2luZ1ZlcnRleEF0dHJpYjAKKyAg
ICAgICAgJiYgKG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsCisgICAgICAgICAgICB8fCBhdHRy
aWJWYWx1ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQorICAgICAg
ICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFs
dWVbMV0KKyAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzJdCisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVszXSAh
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKKyAgICAgICAgYXV0byBidWZmZXJE
YXRhID0gc3RkOjptYWtlX3VuaXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7
CisgICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lp
KSB7CisgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsw
XTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1
ZVsxXTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJWYWx1ZS52
YWx1ZVsyXTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRyaWJWYWx1
ZS52YWx1ZVszXTsKKyAgICAgICAgfQorICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVswXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVsxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOworICAgICAgICBtX3ZlcnRleEF0dHJp
YjBCdWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOworICAgICAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOworICAgICAgICBt
X2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOworICAgICAgICBtX2NvbnRleHQtPmJ1
ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0
YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOworICAgIH0KKyAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVT
dGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKK3sKKyAgICBjb25zdCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOworICAgIGlmIChzdGF0ZS5i
dWZmZXJCaW5kaW5nICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgeworICAgICAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3Ja
ZXJvKHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6
ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOworICAgIH0KKyAgICBtX2Nv
bnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0
T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKK3sKKyAgICBSZWZQdHI8V2Vi
R0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOworICAgIGNhbnZh
cygpLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExv
c3RDb250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCisgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVz
dG9yZUNvbnRleHQoKQoreworICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKKyAgICBpZiAoIW1f
Y29udGV4dExvc3QpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSByZW5kZXJpbmcgY29u
dGV4dCBpcyBub3QgcmVzdG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZQor
ICAgIC8vIHdlYmdsY29udGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgorICAg
IC8vCisgICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1cCBm
b3IgcmVhbCB2cy4gc3ludGhldGljIGxvc3QKKyAgICAvLyBjb250ZXh0IGV2ZW50cywgd2UgZG9u
J3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZworICAgIC8v
IHRoZSByZXRyeSBsb29wIGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCisgICAgaWYgKCFt
X3Jlc3RvcmVBbGxvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgY29udGV4dExvc3RS
ZWFzb24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1
c0FSQigpOworCisgICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgorICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0
M0QgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5CisgICAgICAgIC8vIHN1cHBvcnQgR0xf
QVJCX3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCisgICAgICAg
IC8vIFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVzZWQgdG8g
Zm9yY2UKKyAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6CisgICAgICAgIC8vIFRo
ZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0IHdhcwor
ICAgICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCisgICAgICAg
IHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFn
ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3JpbmcgdGhlIGNv
bnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJTk5PQ0VO
VF9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBjb250ZXh0
IHRvIGJlIHJlc3RvcmVkLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
VU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gV2Fybi4gSWRlYWxseSwgcHJv
bXB0IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCisgICAgICAgIC8vIGNvbnRlbnQg
b24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8KKyAgICAg
ICAgLy8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRpbnVlIHJ1
bm5pbmcKKyAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInllcyIgc2hv
dWxkIHdlIHN0YXJ0CisgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgY29udGV4
dC4KKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50
IG9uIHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0
Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhcygp
LT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0
dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmll
dyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47
CisgICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3QoKTsKKyAgICBpZiAoIXJvb3QpCisg
ICAgICAgIHJldHVybjsKKyAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdp
bmRvdygpOworICAgIGlmICghaG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
bV9hdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAg
IGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCisgICAgICAgICAgICBt
X3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFw
cGVuIGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRo
ZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKKyAgICAgICAgRHJhd2lu
Z0J1ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1dGVzLnBy
ZXNlcnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJhd2luZ0J1
ZmZlcjo6RGlzY2FyZDsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJlbWVudCBh
bHBoYSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDogRHJhd2lu
Z0J1ZmZlcjo6T3BhcXVlOworICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVy
OjpjcmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHByZXNlcnZl
LCBhbHBoYSk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0KKworICAg
IG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOworICAgIHNl
dHVwRmxhZ3MoKTsKKyAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOworICAgIGNhbnZhcygpLT5k
aXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmds
Y29udGV4dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOworfQorCitTdHJpbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4dCkgY29u
c3QKK3sKKyAgICBpZiAodGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlT
dHJpbmcoKTsKKyAgICByZXR1cm4gdGV4dDsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpM
UlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKKyAg
ICA6IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj5bXT4oY2FwYWNpdHkpKQorICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKK3sKK30KKworSW1h
Z2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkg
PSAwOyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBt
X2J1ZmZlcnNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYnVmKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBidWJibGVUb0Zyb250KGkpOworICAgICAgICByZXR1cm4gYnVmOwor
ICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgMSk7CisgICAgaWYgKCF0ZW1wKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOworICAgIG1fYnVmZmVy
c1tpXSA9IFdURjo6bW92ZSh0ZW1wKTsKKworICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZl
cnNbaV0uZ2V0KCk7CisgICAgYnViYmxlVG9Gcm9udChpKTsKKyAgICByZXR1cm4gYnVmOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxl
VG9Gcm9udChpbnQgaWR4KQoreworICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCisg
ICAgICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKK30KKworbmFtZXNwYWNl
IHsKKworICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNOgorICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgorICAgICAgICAgICAgcmV0
dXJuICJJTlZBTElEX1ZBTFVFIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT046CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9OIjsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKKyAgICAgICAg
ICAgIHJldHVybiAiT1VUX09GX01FTU9SWSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgorICAgICAgICAgICAgcmV0dXJuICJJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKKyAgICAgICAgICAgIHJldHVybiAiQ09OVEVYVF9M
T1NUX1dFQkdMIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiV2ViR0wgRVJST1IoJTA0eCkiLCBlcnJvcik7CisgICAgICAgIH0KKyAgICB9CisK
K30gLy8gbmFtZXNwYWNlIGFub255bW91cworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNw
bGF5KQoreworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRpc3BsYXkg
PT0gRGlzcGxheUluQ29uc29sZSkgeworICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6
ICIpICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1l
KSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOworICAgICAgcHJpbnRHTEVycm9yVG9Db25z
b2xlKHN0cik7CisgICAgfQorICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3Ip
OworfQorCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29u
c29sZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQor
eworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7CisgICAgICAgIFN0cmlu
ZyBzdHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiAr
IFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIp
OworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRl
c3QoKQoreworICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKKworICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBtX2ZyYW1l
YnVmZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1ZmZlcigpOworICAgIGVsc2UgeworICAgICAgICBS
ZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRy
aWJ1dGVzKCk7CisgICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+c3RlbmNp
bCgpOworICAgIH0KKyAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfVEVTVCwKKyAgICAgICAgICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3Rl
bmNpbEJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRp
c2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJs
ZSkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7CisgICAgZWxzZQorICAg
ICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7Cit9CisKK0ludFNpemUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2FudmFzU2l6ZSgpCit7CisgICAgcmV0dXJuIEludFNp
emUoY2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBdKSwKKyAg
ICAgICAgICAgICAgICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3Bv
cnREaW1zWzFdKSk7Cit9CisKK0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhE
cmF3QnVmZmVycygpCit7CisgICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIGlmICghbV9tYXhEcmF3QnVmZmVycykKKyAgICAgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhE
cmF3QnVmZmVycyk7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCisgICAgICAgIG1f
Y29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNf
RVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMg
cmVxdWlyZXMgTUFYX0NPTE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCisgICAg
cmV0dXJuIHN0ZDo6bWluKG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7
Cit9CisKK0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1l
bnRzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCisgICAgICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9t
YXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVu
dW0gYnVmKQoreworICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKK3sKKyAgICBFeGNl
cHRpb25Db2RlIGVjOworICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCit7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKKyAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKSwgZWMpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNE
cmF3QnVmZmVycygpCit7CisgICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHND
aGVja2VkKSB7CisgICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQg
PSB0cnVlOworICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3QnVmZmVy
czo6c3VwcG9ydGVkKHRoaXMpOworICAgIH0KKyAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1N1cHBv
cnRlZDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJbnN0YW5j
ZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6
ZWkgcHJpbWNvdW50KQoreworICAgIGlmICghcHJpbWNvdW50KSB7CisgICAgICAgIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWxpZGF0
ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHBy
aW1jb3VudCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisK
KyAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRl
VmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0
cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0
YW5jZWQiLCB0cnVlKTsKKworICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0luc3RhbmNlZChtb2Rl
LCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
KyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwg
ZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1j
b3VudCkKK3sKKyAgICBpZiAoIXByaW1jb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5n
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
ID0gMDsKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJbnN0YW5j
ZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgcHJpbWNvdW50KSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wg
dmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11
bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1l
bnRzSW5zdGFuY2VkIiwgdHJ1ZSk7CisKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3Rh
bmNlZChtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwg
cHJpbWNvdW50KTsKKworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11
bGF0aW9uKCk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1Rl
eHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIGZhbHNlKTsKKyAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlz
b3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgs
IGRpdmlzb3IpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2
aXNvcik7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5n
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wxUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2MjM3ICsyNiwyMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxF
KFdFQkdMKQotCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0KLSNpbmNsdWRl
ICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5j
bHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFWFRT
aGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRl
ICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIK
LSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1
ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1l
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5k
ZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUg
Ik9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgot
I2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFs
ZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKLSNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5o
IgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0
dXJlUzNUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRl
ICJXZWJHTENvbnRleHRFdmVudC5oIgotI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0j
aW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdT
aGFkZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJH
TERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUg
IldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRl
ICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCi0jaW5jbHVk
ZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCIKLSNpbmNsdWRlICJXZWJHTFRleHR1cmUu
aCIKLSNpbmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgotCi0jaW5jbHVkZSA8cnVudGlt
ZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlICJXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgZG91YmxlIHNlY29uZHNCZXR3ZWVuUmVzdG9y
ZUF0dGVtcHRzID0gMS4wOwotY29uc3QgaW50IG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSA9
IDI1NjsKLQotbmFtZXNwYWNlIHsKLQotICAgIGNsYXNzIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5k
ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3
aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJp
bmRpbmcpCi0gICAgICAgICAgICA6IG1fZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQotICAg
ICAgICAgICAgLCBtX2ZyYW1lYnVmZmVyQmluZGluZyhmcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5n
LiwgZm9yIG11bHRpc2FtcGxpbmcpCi0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5k
aW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmNvbW1pdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgflNjb3BlZERyYXdpbmdCdWZmZXJCaW5k
ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYg
bmVlZGVkCi0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2lu
Z0J1ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVm
ZmVyOwotICAgICAgICBXZWJHTEZyYW1lYnVmZmVyKiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAg
ICB9OwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9i
amVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDog
MDsKLSAgICB9Ci0KLSAgICB2b2lkIGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkgcmFu
Z2UsIEdDM0RzaXplaSBzb3VyY2VSYW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNEc2l6
ZWkqIGNsaXBwZWRSYW5nZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYg
Y2xpcHBlZFJhbmdlKTsKLSAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICAgICAgcmFu
Z2UgKz0gc3RhcnQ7Ci0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAg
R0MzRGludCBlbmQgPSBzdGFydCArIHJhbmdlOwotICAgICAgICBpZiAoZW5kID4gc291cmNlUmFu
Z2UpCi0gICAgICAgICAgICByYW5nZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKLSAgICAgICAgKmNs
aXBwZWRTdGFydCA9IHN0YXJ0OwotICAgICAgICAqY2xpcHBlZFJhbmdlID0gcmFuZ2U7Ci0gICAg
fQotCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGku
ZS4sIHgsIHksIHdpZHRoLCBoZWlnaHQgc3RheSB0aGUgc2FtZS4KLSAgICBib29sIGNsaXAyRChH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzb3VyY2VXaWR0aCwgR0MzRHNpemVpIHNvdXJjZUhl
aWdodCwKLSAgICAgICAgICAgICAgICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGludCogY2xpcHBl
ZFksIEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhlaWdodCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChjbGlwcGVkWCAmJiBjbGlwcGVkWSAmJiBjbGlwcGVkV2lkdGgg
JiYgY2xpcHBlZEhlaWdodCk7Ci0gICAgICAgIGNsaXAxRCh4LCB3aWR0aCwgc291cmNlV2lkdGgs
IGNsaXBwZWRYLCBjbGlwcGVkV2lkdGgpOwotICAgICAgICBjbGlwMUQoeSwgaGVpZ2h0LCBzb3Vy
Y2VIZWlnaHQsIGNsaXBwZWRZLCBjbGlwcGVkSGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuICgqY2xp
cHBlZFggIT0geCB8fCAqY2xpcHBlZFkgIT0geSB8fCAqY2xpcHBlZFdpZHRoICE9IHdpZHRoIHx8
ICpjbGlwcGVkSGVpZ2h0ICE9IGhlaWdodCk7Ci0gICAgfQotCi0gICAgR0MzRGludCBjbGFtcChH
QzNEaW50IHZhbHVlLCBHQzNEaW50IG1pbiwgR0MzRGludCBtYXgpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUgPCBtaW4pCi0gICAgICAgICAgICB2YWx1ZSA9IG1pbjsKLSAgICAgICAgaWYgKHZh
bHVlID4gbWF4KQotICAgICAgICAgICAgdmFsdWUgPSBtYXg7Ci0gICAgICAgIHJldHVybiB2YWx1
ZTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBhIGNoYXJhY3RlciBiZWxvbmdzIHRv
IHRoZSBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbgotICAgIC8vIEdMU0wgRVMgMS4wIHNwZWMg
c2VjdGlvbiAzLjEuCi0gICAgYm9vbCB2YWxpZGF0ZUNoYXJhY3Rlcih1bnNpZ25lZCBjaGFyIGMp
Ci0gICAgewotICAgICAgICAvLyBQcmludGluZyBjaGFyYWN0ZXJzIGFyZSB2YWxpZCBleGNlcHQg
IiAkIGAgQCBcICcgREVMLgotICAgICAgICBpZiAoYyA+PSAzMiAmJiBjIDw9IDEyNgotICAgICAg
ICAgICAgJiYgYyAhPSAnIicgJiYgYyAhPSAnJCcgJiYgYyAhPSAnYCcgJiYgYyAhPSAnQCcgJiYg
YyAhPSAnXFwnICYmIGMgIT0gJ1wnJykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAvLyBIb3Jpem9udGFsIHRhYiwgbGluZSBmZWVkLCB2ZXJ0aWNhbCB0YWIsIGZvcm0gZmVlZCwg
Y2FycmlhZ2UgcmV0dXJuCi0gICAgICAgIC8vIGFyZSBhbHNvIHZhbGlkLgotICAgICAgICBpZiAo
YyA+PSA5ICYmIGMgPD0gMTMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgaXNQcmVmaXhSZXNlcnZlZChjb25zdCBTdHJp
bmcmIG5hbWUpCi0gICAgewotICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJnbF8iKSB8fCBu
YW1lLnN0YXJ0c1dpdGgoIndlYmdsXyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiX3dlYmdsXyIpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICAvLyBTdHJpcHMgY29tbWVudHMgZnJvbSBzaGFkZXIgdGV4dC4gVGhpcyBhbGxvd3Mgbm9u
LUFTQ0lJIGNoYXJhY3RlcnMKLSAgICAvLyB0byBiZSB1c2VkIGluIGNvbW1lbnRzIHdpdGhvdXQg
cG90ZW50aWFsbHkgYnJlYWtpbmcgT3BlbkdMCi0gICAgLy8gaW1wbGVtZW50YXRpb25zIG5vdCBl
eHBlY3RpbmcgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBHTFNMIEVTIHNldC4KLSAgICBjbGFzcyBT
dHJpcENvbW1lbnRzIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0cmlwQ29tbWVudHMoY29uc3Qg
U3RyaW5nJiBzdHIpCi0gICAgICAgICAgICA6IG1fcGFyc2VTdGF0ZShCZWdpbm5pbmdPZkxpbmUp
Ci0gICAgICAgICAgICAsIG1fc291cmNlU3RyaW5nKHN0cikKLSAgICAgICAgICAgICwgbV9sZW5n
dGgoc3RyLmxlbmd0aCgpKQotICAgICAgICAgICAgLCBtX3Bvc2l0aW9uKDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHBhcnNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcmVzdWx0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwot
ICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBib29sIGhhc01vcmVDaGFyYWN0ZXJz
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChtX3Bvc2l0aW9uIDwgbV9s
ZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwYXJzZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHdoaWxlIChoYXNNb3JlQ2hhcmFjdGVycygpKSB7Ci0gICAgICAgICAgICAgICAg
cHJvY2VzcyhjdXJyZW50KCkpOwotICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MoKSBtaWdodCBh
ZHZhbmNlIHRoZSBwb3NpdGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoaGFzTW9yZUNoYXJhY3Rl
cnMoKSkKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBwcm9jZXNzKFVDaGFyKTsKLQotICAgICAgICBib29sIHBl
ZWsoVUNoYXImIGNoYXJhY3RlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1f
cG9zaXRpb24gKyAxID49IG1fbGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGNoYXJhY3RlciA9IG1fc291cmNlU3RyaW5nW21fcG9zaXRpb24gKyAxXTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgVUNoYXIgY3Vy
cmVudCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbl07Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFk
dmFuY2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICArK21fcG9zaXRpb247Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGlzTmV3bGluZShVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIERvbid0IGF0dGVtcHQgdG8gY2Fub25pY2FsaXplIG5ld2xpbmUg
cmVsYXRlZCBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgcmV0dXJuIChjaGFyYWN0ZXIgPT0gJ1xu
JyB8fCBjaGFyYWN0ZXIgPT0gJ1xyJyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVtaXQo
VUNoYXIgY2hhcmFjdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5k
KGNoYXJhY3Rlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBlbnVtIFBhcnNlU3RhdGUgewotICAg
ICAgICAgICAgLy8gSGF2ZSBub3Qgc2VlbiBhbiBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0
ZXIgeWV0IG9uCi0gICAgICAgICAgICAvLyB0aGlzIGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWln
aHQgc2VlIGEgcHJlcHJvY2Vzc29yCi0gICAgICAgICAgICAvLyBkaXJlY3RpdmUuCi0gICAgICAg
ICAgICBCZWdpbm5pbmdPZkxpbmUsCi0KLSAgICAgICAgICAgIC8vIEhhdmUgc2VlbiBhdCBsZWFz
dCBvbmUgQVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyCi0gICAgICAgICAgICAvLyBvbiB0
aGlzIGxpbmUuCi0gICAgICAgICAgICBNaWRkbGVPZkxpbmUsCi0KLSAgICAgICAgICAgIC8vIEhh
bmRsaW5nIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gUGFzc2VzIHRocm91Z2ggYWxsCi0gICAg
ICAgICAgICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIERpc2FibGVz
IGNvbW1lbnQKLSAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcuCi0gICAgICAgICAgICBJblByZXBy
b2Nlc3NvckRpcmVjdGl2ZSwKLQotICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBzaW5nbGUtbGlu
ZSBjb21tZW50LiBUaGUgY29tbWVudCB0ZXh0IGlzCi0gICAgICAgICAgICAvLyByZXBsYWNlZCB3
aXRoIGEgc2luZ2xlIHNwYWNlLgotICAgICAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVudCwKLQot
ICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBtdWx0aS1saW5lIGNvbW1lbnQuIE5ld2xpbmVzIGFy
ZSBwYXNzZWQKLSAgICAgICAgICAgIC8vIHRocm91Z2ggdG8gcHJlc2VydmUgbGluZSBudW1iZXJz
LgotICAgICAgICAgICAgSW5NdWx0aUxpbmVDb21tZW50Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
UGFyc2VTdGF0ZSBtX3BhcnNlU3RhdGU7Ci0gICAgICAgIFN0cmluZyBtX3NvdXJjZVN0cmluZzsK
LSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIG1fcG9zaXRpb247
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgbV9idWlsZGVyOwotICAgIH07Ci0KLSAgICB2b2lkIFN0
cmlwQ29tbWVudHM6OnByb2Nlc3MoVUNoYXIgYykKLSAgICB7Ci0gICAgICAgIGlmIChpc05ld2xp
bmUoYykpIHsKLSAgICAgICAgICAgIC8vIE5vIG1hdHRlciB3aGF0IHN0YXRlIHdlIGFyZSBpbiwg
cGFzcyB0aHJvdWdoIG5ld2xpbmVzCi0gICAgICAgICAgICAvLyBzbyB3ZSBwcmVzZXJ2ZSBsaW5l
IG51bWJlcnMuCi0gICAgICAgICAgICBlbWl0KGMpOwotCi0gICAgICAgICAgICBpZiAobV9wYXJz
ZVN0YXRlICE9IEluTXVsdGlMaW5lQ29tbWVudCkKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3Rh
dGUgPSBCZWdpbm5pbmdPZkxpbmU7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIFVDaGFyIHRlbXAgPSAwOwotICAgICAgICBzd2l0Y2ggKG1fcGFyc2VTdGF0ZSkg
ewotICAgICAgICBjYXNlIEJlZ2lubmluZ09mTGluZToKLSAgICAgICAgICAgIGlmIChXVEY6Omlz
QVNDSUlTcGFjZShjKSkgewotICAgICAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjID09ICcjJykgewot
ICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluUHJlcHJvY2Vzc29yRGlyZWN0aXZlOwot
ICAgICAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFRyYW5zaXRpb24gdG8gbm9ybWFsIHN0YXRlIGFuZCBy
ZS1oYW5kbGUgY2hhcmFjdGVyLgotICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gTWlkZGxlT2ZM
aW5lOwotICAgICAgICAgICAgcHJvY2VzcyhjKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgTWlkZGxlT2ZMaW5lOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nICYmIHBlZWso
dGVtcCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSAnLycpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5TaW5nbGVMaW5lQ29tbWVudDsKLSAgICAgICAgICAg
ICAgICAgICAgZW1pdCgnICcpOwotICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICh0ZW1wID09ICcqJykgewotICAgICAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUg
PSBJbk11bHRpTGluZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNv
bW1lbnQgc3RhcnQgaW4gY2FzZSB0aGUgdXNlciBoYXMKLSAgICAgICAgICAgICAgICAgICAgLy8g
YW4gdW5jbG9zZWQgY29tbWVudCBhbmQgd2Ugd2FudCB0byBsYXRlcgotICAgICAgICAgICAgICAg
ICAgICAvLyBzaWduYWwgYW4gZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsK
LSAgICAgICAgICAgICAgICAgICAgZW1pdCgnKicpOwotICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU6Ci0gICAgICAgICAgICAvLyBO
byBtYXR0ZXIgd2hhdCB0aGUgY2hhcmFjdGVyIGlzLCBqdXN0IHBhc3MgaXQKLSAgICAgICAgICAg
IC8vIHRocm91Z2guIERvIG5vdCBwYXJzZSBjb21tZW50cyBpbiB0aGlzIHN0YXRlLiBUaGlzCi0g
ICAgICAgICAgICAvLyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGxvbmcgdGVy
bSwgYnV0IGl0Ci0gICAgICAgICAgICAvLyBzaG91bGQgaGFuZGxlIHRoZSAjZXJyb3IgcHJlcHJv
Y2Vzc29yIGRpcmVjdGl2ZS4KLSAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEluU2luZ2xlTGluZUNvbW1lbnQ6Ci0gICAgICAgICAgICAvLyBU
aGUgbmV3bGluZSBjb2RlIGF0IHRoZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlCi0g
ICAgICAgICAgICAvLyBvZiByZXNldHRpbmcgb3VyIHN0YXRlIHdoZW4gd2UgZ2V0IG91dCBvZiB0
aGUKLSAgICAgICAgICAgIC8vIHNpbmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVy
IGNoYXJhY3RlcnMuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEluTXVsdGlM
aW5lQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICcqJyAmJiBwZWVrKHRlbXApICYmIHRl
bXAgPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgZW1pdCgnKicpOwotICAgICAgICAgICAgICAg
IGVtaXQoJy8nKTsKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7
Ci0gICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJz
LiBVbmNsZWFyIHdoZXRoZXIgd2UgbWF5Ci0gICAgICAgICAgICAvLyB3YW50IG9yIG5lZWQgdG8g
anVzdCBlbWl0IGEgc3BhY2UgcGVyIGNoYXJhY3RlciB0byB0cnkKLSAgICAgICAgICAgIC8vIHRv
IHByZXNlcnZlIGNvbHVtbiBudW1iZXJzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0gLy8gbmFtZXNwYWNlIGFub255bW91cwot
Ci1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2sgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RD
YWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIG9uQ29udGV4dExvc3QoKSBvdmVycmlkZSB7IG1fY29udGV4dC0+Zm9y
Y2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OlJlYWxMb3N0Q29udGV4dCk7IH0K
LSAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7fQotcHJp
dmF0ZToKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKLX07Ci0KLWNsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjayB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJy
b3JNZXNzYWdlQ2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjYikgOiBtX2NvbnRleHQo
Y2IpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIEdDM0RpbnQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0LT5t
X3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKQotICAgICAgICAgICAgbV9jb250ZXh0LT5wcmlu
dEdMRXJyb3JUb0NvbnNvbGUobWVzc2FnZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYkdMUmVu
ZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKCkgeyB9Ci1wcml2YXRlOgotICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwotfTsKLQotc3RkOjp1bmlxdWVfcHRyPFdl
YkdMUmVuZGVyaW5nQ29udGV4dD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcywgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogYXR0cnMpCi17Ci0g
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzLT5kb2N1bWVudCgpOwotICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAvLyBUaGUgRnJhbWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3Jl
YXRpb24gb2YgYSBuZXcgV2ViR0wgY29udGV4dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBp
bgotICAgIC8vIHBhcnRpY3VsYXIsIGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3Ig
bW9yZSB0aW1lcyB2aWEgdGhlIEdMX0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KLSAgICBpZiAo
IWZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndl
YkdMRW5hYmxlZCgpKSkgewotICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250
ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2
ZW50LCBmYWxzZSwgdHJ1ZSwgIldlYiBwYWdlIHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBX
ZWJHTCBjb250ZXh0LiIpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gZmFsc2U7Ci0gICAgRG9jdW1lbnQmIHRv
cERvY3VtZW50ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKTsKLSAgICBQYWdlKiBwYWdlID0gdG9w
RG9jdW1lbnQucGFnZSgpOwotICAgIGlmIChwYWdlICYmICF0b3BEb2N1bWVudC51cmwoKS5pc0xv
Y2FsRmlsZSgpKSB7Ci0gICAgICAgIFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVudC51
cmwoKSk7Ci0KLSAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pIHsKLSAg
ICAgICAgICAgIExPRyhXZWJHTCwgIlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJMICglcykgaXMgdG8g
YmxvY2sgV2ViR0wuIiwgdG9wRG9jdW1lbnQudXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocG9s
aWN5ID09IFdlYkdMUGVuZGluZ0NyZWF0aW9uKSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJX
ZWJHTCBwb2xpY3kgaXMgcGVuZGluZy4gTWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQgbGF0ZXIuIik7
Ci0gICAgICAgICAgICBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMg
PSBhdHRycyA/IGF0dHJzLT5hdHRyaWJ1dGVzKCkgOiBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGlmICgh
ZnJhbWUtPnNldHRpbmdzKCkub3BlbkdMTXVsdGlzYW1wbGluZ0VuYWJsZWQoKSkKLSAgICAgICAg
ICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYXR0cmlidXRl
cy5ub0V4dGVuc2lvbnMgPSB0cnVlOwotICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBm
YWxzZTsKLSAgICBhdHRyaWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVID0gdHJ1ZTsKLQotICAgIGlm
IChmcmFtZS0+c2V0dGluZ3MoKS5mb3JjZVNvZnR3YXJlV2ViR0xSZW5kZXJpbmcoKSkKLSAgICAg
ICAgYXR0cmlidXRlcy5mb3JjZVNvZnR3YXJlUmVuZGVyZXIgPSB0cnVlOwotCi0gICAgaWYgKHBh
Z2UpCi0gICAgICAgIGF0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNj
YWxlRmFjdG9yKCk7Ci0KLSAgICBpZiAoaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAg
ICAgICBMT0coV2ViR0wsICJDcmVhdGUgYSBXZWJHTCBjb250ZXh0IHRoYXQgbG9va3MgcmVhbCwg
YnV0IHdpbGwgcmVxdWlyZSBhIHBvbGljeSByZXNvbHV0aW9uIGlmIHVzZWQuIik7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQo
bmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKLSAgICAgICAg
cmVuZGVyaW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgICAgIHJldHVybiByZW5k
ZXJpbmdDb250ZXh0OwotICAgIH0KLQotICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1
bWVudC52aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpOwotICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhv
c3RXaW5kb3cpKTsKLQotICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpIHsKLSAgICAgICAgY2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwg
ZmFsc2UsIHRydWUsICJDb3VsZCBub3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9u
cyA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9y
dHMoIkdMX0VYVF9kZWJ1Z19tYXJrZXIiKSkKLSAgICAgICAgZXh0ZW5zaW9ucy0+cHVzaEdyb3Vw
TWFya2VyRVhUKCJXZWJHTFJlbmRlcmluZ0NvbnRleHQiKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQobmV3IFdlYkdMUmVuZGVy
aW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQsIGF0dHJpYnV0ZXMpKTsKLSAgICByZW5kZXJpbmdD
b250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLQotICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0
OwotfQotCi1XZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1M
Q2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRyaWJ1dGVzKQotICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMp
Ci0gICAgLCBBY3RpdmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKLSAgICAs
IG1fY29udGV4dCgwKQotICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCi0gICAgLCBtX2Rpc3BhdGNo
Q29udGV4dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNw
YXRjaENvbnRleHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQotICAg
ICwgbV9yZXN0b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVz
dG9yZUNvbnRleHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoMCkKLSAgICAsIG1fY29u
dGV4dExvc3QoZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29u
dGV4dCkKLSAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9zeW50aGVzaXpl
ZEVycm9yc1RvQ29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93
ZWQobWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwgbV9pc1BlbmRpbmdQb2xpY3lS
ZXNvbHV0aW9uKHRydWUpCi0gICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFs
c2UpCi17Ci19Ci0KLVdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQsCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmli
dXRlcykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQotICAgICwg
QWN0aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCi0gICAgLCBtX2NvbnRl
eHQoY29udGV4dCkKLSAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQotICAgICwgbV9kaXNwYXRjaENv
bnRleHRMb3N0RXZlbnRUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KQotICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKLSAgICAs
IG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3Rv
cmVDb250ZXh0KQotICAgICwgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlKDQpCi0gICAgLCBtX2NvbnRl
eHRMb3N0KGZhbHNlKQotICAgICwgbV9jb250ZXh0TG9zdE1vZGUoU3ludGhldGljTG9zdENvbnRl
eHQpCi0gICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAsIG1fc3ludGhlc2l6ZWRF
cnJvcnNUb0NvbnNvbGUodHJ1ZSkKLSAgICAsIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2Vk
KG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSkKLSAgICAsIG1faXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbihmYWxzZSkKLSAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxz
ZSkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLSAgICBtX2NvbnRleHRHcm91cCA9IFdlYkdM
Q29udGV4dEdyb3VwOjpjcmVhdGUoKTsKLSAgICBtX2NvbnRleHRHcm91cC0+YWRkQ29udGV4dCh0
aGlzKTsKLQotICAgIG1fbWF4Vmlld3BvcnREaW1zWzBdID0gbV9tYXhWaWV3cG9ydERpbXNbMV0g
PSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
SUVXUE9SVF9ESU1TLCBtX21heFZpZXdwb3J0RGltcyk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLQotICAgIHNldHVwRmxhZ3Mo
KTsKLSAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQotewotICAgIEFTU0VSVCghbV9jb250ZXh0
TG9zdCk7Ci0gICAgbV9uZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgbV9tYXJrZWRDYW52YXNEaXJ0
eSA9IGZhbHNlOwotICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQgPSAwOwotICAgIG1fcGFja0FsaWdu
bWVudCA9IDQ7Ci0gICAgbV91bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1fdW5wYWNrRmxpcFkg
PSBmYWxzZTsKLSAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKLSAgICBtX3Vu
cGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVG
QVVMVF9XRUJHTDsKLSAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOwotICAgIG1fY3VycmVudFBy
b2dyYW0gPSAwOwotICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKLSAgICBtX3JlbmRlcmJ1
ZmZlckJpbmRpbmcgPSAwOwotICAgIG1fZGVwdGhNYXNrID0gdHJ1ZTsKLSAgICBtX3N0ZW5jaWxF
bmFibGVkID0gZmFsc2U7Ci0gICAgbV9zdGVuY2lsTWFzayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9z
dGVuY2lsTWFza0JhY2sgPSAweEZGRkZGRkZGOwotICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSAwOwot
ICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gMDsKLSAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IDB4
RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gMHhGRkZGRkZGRjsKLSAgICBt
X2xheWVyQ2xlYXJlZCA9IGZhbHNlOwotICAgIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2Vk
ID0gbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlOwotICAgIAotICAgIG1fY2xlYXJDb2xvclsw
XSA9IG1fY2xlYXJDb2xvclsxXSA9IG1fY2xlYXJDb2xvclsyXSA9IG1fY2xlYXJDb2xvclszXSA9
IDA7Ci0gICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgIG1fY2xlYXJEZXB0aCA9IDE7
Ci0gICAgbV9jbGVhclN0ZW5jaWwgPSAwOwotICAgIG1fY29sb3JNYXNrWzBdID0gbV9jb2xvck1h
c2tbMV0gPSBtX2NvbG9yTWFza1syXSA9IG1fY29sb3JNYXNrWzNdID0gdHJ1ZTsKLQotICAgIEdD
M0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBtX3RleHR1cmVVbml0
cy5jbGVhcigpOwotICAgIG1fdGV4dHVyZVVuaXRzLnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKTsKLQotICAgIEdDM0RpbnQgbnVtVmVydGV4QXR0cmlicyA9IDA7Ci0gICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJT
LCAmbnVtVmVydGV4QXR0cmlicyk7Ci0gICAgbV9tYXhWZXJ0ZXhBdHRyaWJzID0gbnVtVmVydGV4
QXR0cmliczsKLSAgICAKLSAgICBtX21heFRleHR1cmVTaXplID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9tYXhU
ZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1
dGVMZXZlbENvdW50KG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpOwotICAgIG1f
bWF4Q3ViZU1hcFRleHR1cmVTaXplID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbV9tYXhDdWJlTWFw
VGV4dHVyZVNpemUpOwotICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVy
ZTo6Y29tcHV0ZUxldmVsQ291bnQobV9tYXhDdWJlTWFwVGV4dHVyZVNpemUsIG1fbWF4Q3ViZU1h
cFRleHR1cmVTaXplKTsKLSAgICBtX21heFJlbmRlcmJ1ZmZlclNpemUgPSAwOwotICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0la
RSwgJm1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7Ci0KLSAgICAvLyBUaGVzZSB0d28gdmFsdWVzIGZy
b20gRVhUX2RyYXdfYnVmZmVycyBhcmUgbGF6aWx5IHF1ZXJpZWQuCi0gICAgbV9tYXhEcmF3QnVm
ZmVycyA9IDA7Ci0gICAgbV9tYXhDb2xvckF0dGFjaG1lbnRzID0gMDsKLQotICAgIG1fYmFja0Ry
YXdCdWZmZXIgPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzsKLSAgICBtX2RyYXdCdWZmZXJzV2Vi
R0xSZXF1aXJlbWVudHNDaGVja2VkID0gZmFsc2U7Ci0gICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRl
ZCA9IGZhbHNlOwotCi0gICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTOjpjcmVhdGUodGhpcywgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmFvVHlwZURlZmF1bHQpOwotICAgIGFkZENvbnRleHRPYmplY3QobV9kZWZhdWx0VmVydGV4QXJy
YXlPYmplY3QuZ2V0KCkpOwotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1fZGVmYXVs
dFZlcnRleEFycmF5T2JqZWN0OwotICAgIAotICAgIG1fdmVydGV4QXR0cmliVmFsdWUucmVzaXpl
KG1fbWF4VmVydGV4QXR0cmlicyk7Ci0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0g
ICAgICAgIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwotICAgIGlmICghaXNHTEVT
MkNvbXBsaWFudCgpKQotICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwotCi0gICAgSW50U2l6
ZSBjYW52YXNTaXplID0gY2xhbXBlZENhbnZhc1NpemUoKTsKLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOwotCi0gICAg
bV9jb250ZXh0LT5yZXNoYXBlKGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQo
KSk7Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXNTaXplLndpZHRoKCksIGNh
bnZhc1NpemUuaGVpZ2h0KCkpOwotICAgIG1fY29udGV4dC0+c2Npc3NvcigwLCAwLCBjYW52YXNT
aXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwotCi0gICAgbV9jb250ZXh0LT5zZXRD
b250ZXh0TG9zdENhbGxiYWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0
TG9zdENhbGxiYWNrPih0aGlzKSk7Ci0gICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxs
YmFjayhzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNh
bGxiYWNrPih0aGlzKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZs
YWdzKCkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLQotICAgIGlmIChQYWdlKiBwYWdlID0g
Y2FudmFzKCktPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlID0gcGFnZS0+c2V0dGluZ3MoKS53ZWJHTEVycm9yc1RvQ29uc29sZUVuYWJsZWQo
KTsKLQotICAgIG1faXNHTEVTMkNvbXBsaWFudCA9IG1fY29udGV4dC0+aXNHTEVTMkNvbXBsaWFu
dCgpOwotICAgIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcyA9IG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3N0cmljdF9hdHRy
aWJzIik7Ci0gICAgbV9pc1Jlc291cmNlU2FmZSA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUiKTsKLSAgICBpZiAobV9pc0dM
RVMyQ29tcGxpYW50KSB7Ci0gICAgICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfbnBvdCIpOwotICAg
ICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmlzRW5hYmxlZCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIik7Ci0gICAg
ICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+aXNFbmFibGVkKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICB9Ci0gICAg
bV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
aXNFbmFibGVkKCJHTF9FWFRfcm9idXN0bmVzcyIpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNvbnN0Ci17Ci0gICAgaWYgKFBh
Z2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybiBw
YWdlLT5zZXR0aW5ncygpLnByaXZpbGVnZWRXZWJHTEV4dGVuc2lvbnNFbmFibGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQotewotICAgIGlmICghbV9jb21wcmVz
c2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KSkKLSAgICAgICAgbV9jb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdHMuYXBwZW5kKGZvcm1hdCk7Ci19Ci0KLVdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6fldlYkdMUmVuZGVyaW5nQ29udGV4dCgpCi17Ci0gICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVu
Y2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKLSAg
ICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVmb3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3Zl
ZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgotICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxw
dHI7Ci0gICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBudWxscHRyOwotICAgIG1fYm91
bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
ID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRQcm9ncmFtID0gbnVsbHB0cjsKLSAgICBtX2ZyYW1l
YnVmZmVyQmluZGluZyA9IG51bGxwdHI7Ci0gICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVs
bHB0cjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmluZGluZyA9IG51
bGxwdHI7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9ibGFja1RleHR1cmUyRCA9IG51bGxwdHI7Ci0gICAg
bV9ibGFja1RleHR1cmVDdWJlTWFwID0gbnVsbHB0cjsKLQotICAgIGlmICghbV9pc1BlbmRpbmdQ
b2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsK
LSAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgICAgIG1fY29udGV4dEdy
b3VwLT5yZW1vdmVDb250ZXh0KHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgpCi17Ci0gICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGRyYXdp
bmcgYnVmZmVyIGhvbGRzIGEgY29udGV4dCByZWZlcmVuY2UuIEl0IG11c3QgYWxzbyBiZSBkZXN0
cm95ZWQKLSAgICAvLyBpbiBvcmRlciBmb3IgdGhlIGNvbnRleHQgdG8gYmUgcmVsZWFzZWQuCi0g
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLmNsZWFyKCk7
Ci0KLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExv
c3RDYWxsYmFjayhudWxscHRyKTsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VD
YWxsYmFjayhudWxscHRyKTsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKLXsKLSAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29u
dGV4dC0+bWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsKLQotICAgIG1f
bGF5ZXJDbGVhcmVkID0gZmFsc2U7Ci0gICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMo
KS0+cmVuZGVyQm94KCk7Ci0gICAgaWYgKGlzQWNjZWxlcmF0ZWQoKSAmJiByZW5kZXJCb3ggJiYg
cmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAgbV9tYXJr
ZWRDYW52YXNEaXJ0eSA9IHRydWU7Ci0gICAgICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdl
KCk7Ci0gICAgICAgIHJlbmRlckJveC0+Y29udGVudENoYW5nZWQoQ2FudmFzQ2hhbmdlZCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KSB7Ci0gICAgICAg
ICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGNhbnZhcygpLT5k
aWREcmF3KEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCBjbGFtcGVkQ2FudmFzU2l6ZSgpKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVh
cklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fY29udGV4
dC0+bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFyZWQKLSAgICAgICAgfHwgbV9hdHRy
aWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFzayAmJiBtX2ZyYW1lYnVmZmVyQmlu
ZGluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxXZWJHTENvbnRleHRB
dHRyaWJ1dGVzPiBjb250ZXh0QXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0K
LSAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0
aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCi0gICAgYm9vbCBjb21iaW5lZENsZWFy
ID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKLQotICAgIG1fY29udGV4dC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpZiAoY29tYmluZWRDbGVhciAm
JiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKLSAgICAgICAg
bV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9yWzBdIDog
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzFdID8gbV9jbGVh
ckNvbG9yWzFdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNr
WzJdID8gbV9jbGVhckNvbG9yWzJdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY29sb3JNYXNrWzNdID8gbV9jbGVhckNvbG9yWzNdIDogMCk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgbV9jb250ZXh0LT5jb2xv
ck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgR0MzRGJpdGZpZWxkIGNsZWFyTWFz
ayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIGlmIChjb250ZXh0
QXR0cmlidXRlcy0+ZGVwdGgoKSkgewotICAgICAgICBpZiAoIWNvbWJpbmVkQ2xlYXIgfHwgIW1f
ZGVwdGhNYXNrIHx8ICEobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklU
KSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxLjBmKTsKLSAgICAgICAgY2xl
YXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOwotICAgICAgICBt
X2NvbnRleHQtPmRlcHRoTWFzayh0cnVlKTsKLSAgICB9Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzLT5zdGVuY2lsKCkpIHsKLSAgICAgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsICYgbV9zdGVuY2lsTWFzayk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOwotICAgICAg
ICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKLSAg
ICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVCwgMHhGRkZGRkZGRik7Ci0gICAgfQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+Y2xlYXJGcmFtZWJ1ZmZlcnMoY2xlYXJNYXNrKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAw
KTsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOwotICAgIH0KLQotICAgIHJl
c3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0g
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci0gICAg
bV9sYXllckNsZWFyZWQgPSB0cnVlOwotCi0gICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVBZnRlckNsZWFyKCkKLXsK
LSAgICAvLyBSZXN0b3JlIHRoZSBzdGF0ZSB0aGF0IHRoZSBjb250ZXh0IHNldC4KLSAgICBpZiAo
bV9zY2lzc29yRW5hYmxlZCkKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY2xlYXJD
b2xvclswXSwgbV9jbGVhckNvbG9yWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Ns
ZWFyQ29sb3JbMl0sIG1fY2xlYXJDb2xvclszXSk7Ci0gICAgbV9jb250ZXh0LT5jb2xvck1hc2so
bV9jb2xvck1hc2tbMF0sIG1fY29sb3JNYXNrWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY29sb3JNYXNrWzJdLCBtX2NvbG9yTWFza1szXSk7Ci0gICAgbV9jb250ZXh0LT5jbGVhckRl
cHRoKG1fY2xlYXJEZXB0aCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0
ZW5jaWwpOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRl
eHQzRDo6RlJPTlQsIG1fc3RlbmNpbE1hc2spOwotICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKG1f
ZGVwdGhNYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtMYXllckNv
bXBvc2l0ZWQoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkK
LXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoY2FudmFzKCktPmRvY3VtZW50KCkucHJpbnRpbmcoKSkKLSAgICAgICAgY2FudmFz
KCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOwotCi0gICAgLy8gVW50aWwgdGhlIGNhbnZhcyBp
cyB3cml0dGVuIHRvIGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhlIGNsZWFyIHRoYXQKLSAgICAvLyBo
YXBwZW5lZCBhZnRlciBpdCB3YXMgY29tcG9zaXRlZCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUg
Y29tcG9zaXRvci4KLSAgICBpZiAobV9jb250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAmJiAhbV9h
dHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPnBh
aW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhjYW52YXMoKS0+YnVmZmVyKCkpOwotCi0gICAg
ICAgIGNhbnZhcygpLT5tYWtlUHJlc2VudGF0aW9uQ29weSgpOwotICAgIH0gZWxzZQotICAgICAg
ICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgY2xlYXJJZkNvbXBvc2l0
ZWQoKTsKLQotICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7Ci0g
ICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKLSAgICBtX2NvbnRleHQtPnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSwgbV9kcmF3aW5n
QnVmZmVyLmdldCgpKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFt
ZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGltYWdlRGF0YSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEo
bV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAg
ICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclpl
cm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlRGF0
YTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFRoaXMgaXMgYW4gYXBwcm94aW1hdGlvbiBiZWNhdXNlIGF0IFdl
YkdMUmVuZGVyaW5nQ29udGV4dCBsZXZlbCB3ZSBkb24ndAotICAgIC8vIGtub3cgaWYgdGhlIHVu
ZGVybHlpbmcgRkJPIHVzZXMgdGV4dHVyZXMgb3IgcmVuZGVyYnVmZmVycy4KLSAgICBHQzNEaW50
IG1heFNpemUgPSBzdGQ6Om1pbihtX21heFRleHR1cmVTaXplLCBtX21heFJlbmRlcmJ1ZmZlclNp
emUpOwotICAgIC8vIExpbWl0IGRyYXdpbmcgYnVmZmVyIHNpemUgdG8gNGsgdG8gYXZvaWQgbWVt
b3J5IGV4aGF1c3Rpb24uCi0gICAgY29uc3QgaW50IHNpemVVcHBlckxpbWl0ID0gNDA5NjsKLSAg
ICBtYXhTaXplID0gc3RkOjptaW4obWF4U2l6ZSwgc2l6ZVVwcGVyTGltaXQpOwotICAgIEdDM0Rp
bnQgbWF4V2lkdGggPSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdwb3J0RGltc1swXSk7Ci0g
ICAgR0MzRGludCBtYXhIZWlnaHQgPSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdwb3J0RGlt
c1sxXSk7Ci0gICAgd2lkdGggPSBjbGFtcCh3aWR0aCwgMSwgbWF4V2lkdGgpOwotICAgIGhlaWdo
dCA9IGNsYW1wKGhlaWdodCwgMSwgbWF4SGVpZ2h0KTsKLQotICAgIGlmIChtX25lZWRzVXBkYXRl
KSB7Ci0gICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgp
OwotICAgICAgICBpZiAocmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpKQotICAgICAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXND
aGFuZ2VkKTsKLSAgICAgICAgbV9uZWVkc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3
bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgotICAgIC8vIGNsZWFy
IChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KLSAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7Ci0gICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwotCi0gICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0
T3JaZXJvKG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRp
bmcuZ2V0KCkpKTsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fcmVuZGVyYnVmZmVyQmluZGluZy5n
ZXQoKSkpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3Ja
ZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZHJhd2lu
Z0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndp
ZHRoKCk7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQoKSBjb25zdAotewotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgIHJldHVybiBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKLQotICAgIHJldHVybiBtX2NvbnRleHQt
PmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXVuc2lnbmVkIGlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpCi17Ci0g
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihHQzNEYnl0ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdWJ5dGUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdD
M0RzaG9ydCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVzaG9ydCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RpbnQpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNE
dWludCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoR0MzRGZsb2F0KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0
dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwID49IG1f
dGV4dHVyZVVuaXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0dXJlIHVuaXQg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9hY3RpdmVUZXh0
dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7Ci0gICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRBY3RpdmVUZXh0dXJlVW5pdCh0ZXh0dXJl
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImF0dGFjaFNoYWRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXByb2dyYW0tPmF0dGFjaFNoYWRlcihzaGFkZXIpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImF0
dGFjaFNoYWRlciIsICJzaGFkZXIgYXR0YWNobWVudCBhbHJlYWR5IGhhcyBzaGFkZXIiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihvYmplY3RP
clplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXItPm9uQXR0
YWNoZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRyaWJMb2Nh
dGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYmlu
ZEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZh
bGlkYXRlTG9jYXRpb25MZW5ndGgoImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiYmluZEF0dHJpYkxvY2F0aW9uIiwg
bmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJiaW5kQXR0cmliTG9jYXRpb24iLCAicmVzZXJ2ZWQgcHJlZml4Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
V2ViR0xPYmplY3QqIG9iamVjdCwgYm9vbCYgZGVsZXRlZCkKLXsKLSAgICBkZWxldGVkID0gZmFs
c2U7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChvYmplY3QpIHsKLSAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNv
bnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qg
bm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgZGVsZXRlZCA9ICFvYmplY3QtPm9iamVjdCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNo
ZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kQnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBidWZmZXIgPSAwOwotICAgIGlm
IChidWZmZXIgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAmJiBidWZmZXItPmdldFRhcmdldCgpICE9
IHRhcmdldCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQnVmZmVyIiwgImJ1ZmZlcnMgY2FuIG5vdCBiZSB1c2Vk
IHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKLSAgICAgICAgbV9i
b3VuZEFycmF5QnVmZmVyID0gYnVmZmVyOwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+c2V0RWxlbWVudEFycmF5QnVmZmVyKGJ1ZmZlcik7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJiaW5kQnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVy
KSk7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgYnVmZmVyLT5zZXRUYXJnZXQodGFyZ2V0KTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVj
a09iamVjdFRvQmVCb3VuZCgiYmluZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBidWZmZXIgPSAwOwotICAg
IGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5k
RnJhbWVidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZyhvYmpl
Y3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBJbnN0ZWFkIG9m
IGJpbmRpbmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCi0gICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+YmluZCgpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKLSAgICBpZiAoYnVmZmVyKQot
ICAgICAgICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKLSAgICBhcHBseVN0ZW5jaWxU
ZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7
Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFJlbmRlcmJ1ZmZlciIsIHJlbmRl
ckJ1ZmZlciwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkKLSAg
ICAgICAgcmVuZGVyQnVmZmVyID0gMDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJn
ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcg
PSByZW5kZXJCdWZmZXI7Ci0gICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwg
b2JqZWN0T3JaZXJvKHJlbmRlckJ1ZmZlcikpOwotICAgIGlmIChyZW5kZXJCdWZmZXIpCi0gICAg
ICAgIHJlbmRlckJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1
cmUqIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRU
ZXh0dXJlIiwgdGV4dHVyZSwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVs
ZXRlZCkKLSAgICAgICAgdGV4dHVyZSA9IDA7Ci0gICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+
Z2V0VGFyZ2V0KCkgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImJpbmRUZXh0dXJlIiwgInRleHR1cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRh
cmdldHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHQzNEaW50IG1heExldmVsID0g
MDsKLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7Ci0g
ICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRp
bmcgPSB0ZXh0dXJlOwotICAgICAgICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOwotCi0g
ICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIgJiYgIW1fYWN0aXZlVGV4dHVyZVVuaXQpCi0gICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmcob2JqZWN0T3JaZXJv
KHRleHR1cmUpKTsKLQotICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4
dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IHRleHR1cmU7Ci0gICAgICAgIG1heExl
dmVsID0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kVGV4
dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkpOwotICAg
IGlmICh0ZXh0dXJlKQotICAgICAgICB0ZXh0dXJlLT5zZXRUYXJnZXQodGFyZ2V0LCBtYXhMZXZl
bCk7Ci0KLSAgICAvLyBOb3RlOiBwcmV2aW91c2x5IHdlIHVzZWQgdG8gYXV0b21hdGljYWxseSBz
ZXQgdGhlIFRFWFRVUkVfV1JBUF9SCi0gICAgLy8gcmVwZWF0IG1vZGUgdG8gQ0xBTVBfVE9fRURH
RSBmb3IgY3ViZSBtYXAgdGV4dHVyZXMsIGJlY2F1c2UgT3BlbkdMCi0gICAgLy8gRVMgMi4wIGRv
ZXNuJ3QgZXhwb3NlIHRoaXMgZmxhZyAoYSBidWcgaW4gdGhlIHNwZWNpZmljYXRpb24pIGFuZAot
ICAgIC8vIG90aGVyd2lzZSB0aGUgYXBwbGljYXRpb24gaGFzIG5vIGNvbnRyb2wgb3ZlciB0aGUg
c2VhbXMgaW4gdGhpcwotICAgIC8vIGRpbWVuc2lvbi4gSG93ZXZlciwgaXQgYXBwZWFycyB0aGF0
IHN1cHBvcnRpbmcgdGhpcyBwcm9wZXJseSBvbiBhbGwKLSAgICAvLyBwbGF0Zm9ybXMgaXMgZmFp
cmx5IGludm9sdmVkICh3aWxsIHJlcXVpcmUgYSBIYXNoTWFwIGZyb20gdGV4dHVyZSBJRAotICAg
IC8vIGluIGFsbCBwb3J0cyksIGFuZCB3ZSBoYXZlIG5vdCBoYWQgYW55IGNvbXBsYWludHMsIHNv
IHRoZSBsb2dpYyBoYXMKLSAgICAvLyBiZWVuIHJlbW92ZWQuCi19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwg
R0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZENvbG9y
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKK1dlYkdMMVJlbmRlcmluZ0NvbnRleHQ6
OldlYkdMMVJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBhdHRyaWJ1dGVzKQogewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRF
cXVhdGlvbiIsIG1vZGUpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVx
dWF0aW9uKG1vZGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVh
dGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24o
ImJsZW5kRXF1YXRpb24iLCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVu
ZEVxdWF0aW9uIiwgbW9kZUFscGhhKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+
YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51
bSBkZmFjdG9yKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0g
ZHN0QWxwaGEpCi17Ci0gICAgLy8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBy
ZXN0cmljdGlvbnMgYXMgUkdCLgotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0Is
IGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVu
dW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdl
YkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJE
YXRhIiwgdGFyZ2V0LCB1c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJz
aXplID09IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNz
b2NpYXRlQnVmZmVyRGF0YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19j
YXN0PEdDM0RzaXplaXB0cj4oc2l6ZSksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0
YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRh
dGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVy
RGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0
LCB1c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRh
dGEpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJidWZmZXJEYXRhIiwgIm5vIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewot
ICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVM
ZW5ndGgoKSwgZGF0YS0+ZGF0YSgpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEg
ZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRh
IGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRh
dGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIq
IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJn
ZXQsIHVzYWdlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
ZGF0YSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7
Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0
ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1
ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZl
IHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0
ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
dWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZm
ZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdl
YkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJT
dWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIGlm
ICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJi
dWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRl
QnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRh
cmdldCwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgp
LCBkYXRhLT5kYXRhKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZh
aWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3Mg
aXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAg
fQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51
bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZl
ciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAi
b2Zmc2V0IDwgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZGF0YSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nl
c3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0
YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1
YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRy
ZXNzKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVs
bCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4K
LSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi1H
QzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0Mz
RGVudW0gdGFyZ2V0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0g
ICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9DT01QTEVURTsKLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZm
ZXIgaW5jb21wbGV0ZSI7Ci0gICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPmNoZWNrU3RhdHVzKCZyZWFzb24pOwotICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIHByaW50R0xXYXJuaW5nVG9D
b25zb2xlKCJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0gICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKHRhcmdldCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobWFzayAmIH4oR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiY2xlYXIiLCAiaW52YWxpZCBtYXNrIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNz
KGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04sICJjbGVhciIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKCFjbGVhcklmQ29tcG9zaXRlZChtYXNrKSkKLSAgICAgICAgbV9jb250ZXh0LT5j
bGVhcihtYXNrKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNE
ZmxvYXQgYiwgR0MzRGZsb2F0IGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChzdGQ6OmlzbmFuKHIpKQotICAgICAgICByID0g
MDsKLSAgICBpZiAoc3RkOjppc25hbihnKSkKLSAgICAgICAgZyA9IDA7Ci0gICAgaWYgKHN0ZDo6
aXNuYW4oYikpCi0gICAgICAgIGIgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFuKGEpKQotICAgICAg
ICBhID0gMTsKLSAgICBtX2NsZWFyQ29sb3JbMF0gPSByOwotICAgIG1fY2xlYXJDb2xvclsxXSA9
IGc7Ci0gICAgbV9jbGVhckNvbG9yWzJdID0gYjsKLSAgICBtX2NsZWFyQ29sb3JbM10gPSBhOwot
ICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsZWFyRGVw
dGggPSBkZXB0aDsKLSAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGVh
clN0ZW5jaWwgPSBzOwotICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJv
b2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bG9yTWFza1swXSA9IHJlZDsKLSAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOwotICAgIG1fY29s
b3JNYXNrWzJdID0gYmx1ZTsKLSAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwotICAgIG1fY29u
dGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVy
Iiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRl
cihvYmplY3RPclplcm8oc2hhZGVyKSk7Ci0gICAgR0MzRGludCB2YWx1ZTsKLSAgICBtX2NvbnRl
eHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6
Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7Ci0gICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyog
ZGF0YSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQi
LCB0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2YWxpZGF0ZUNv
bXByZXNzZWRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1h
Z2UyRCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKGJvcmRlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBu
b3QgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVDb21wcmVz
c2VkVGV4RGltZW5zaW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3
aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdp
ZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2Vk
VGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpIHsKLSAgICAgICAgaWYgKGxldmVsICYm
IFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNz
ZWRUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgYm9y
ZGVyLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmICht
X2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8v
IFRoZSBjb21wcmVzc2VkVGV4SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdM
VGV4dHVyZSBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCi0gICAgICAg
IHRleC0+bWFya0ludmFsaWQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIHRl
eC0+c2V0Q29tcHJlc3NlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlk
YXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQo
Zm9ybWF0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRl
eEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgZGF0YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFs
aWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZm9ybWF0ICE9
IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJl
c3NlZFRleFN1YkltYWdlMkQiLCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3Nl
ZFRleFN1YkRpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0
YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKLSAgICB0ZXgtPnNldENvbXBy
ZXNzZWQoKTsKKyAgICBtX3R5cGUgPSAid2ViZ2wxIjsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBmb3JtYXQpCitXZWJHTDFSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cmlidXRlcykgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKHBhc3NlZENhbnZh
cywgY29udGV4dCwgYXR0cmlidXRlcykKIHsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dENsZWFyQml0c0J5Rm9ybWF0KGZvcm1hdCkgJiAoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JV
RkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBjYW4gbm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0
byIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAg
IG1fdHlwZSA9ICJ3ZWJnbDEiOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29w
eVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1l
dGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4SW1hZ2UyRCIsIGludGVybmFsZm9y
bWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICgh
dGV4KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JC
dWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVy
Q29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCAiZnJhbWVidWZmZXIg
aXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3
aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93
ZXIgb2YgMiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHJlYXNv
biA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgp
LCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29w
eVRleEltYWdlMkQiLCByZWFzb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFy
SWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKLSAgICAgICAgU2Nv
cGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJv
cmRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBi
aW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7
Ci0gICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwotICAgICAgICBHQzNEc2l6ZWkg
Y2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwotICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVm
ZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBl
ZEhlaWdodCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2Fm
ZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsZm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV91bnBhY2tBbGlnbm1lbnQp
OwotICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDAp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgs
IGNsaXBwZWRIZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBp
ZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91
bGQgYmUgZXhlY3V0ZWQuCi0gICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvcHlUZXhTdWJJbWFnZTJE
IiwgdGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRl
eCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0
cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVT
aXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpIHx8ICF2YWxpZGF0ZVNp
emUoImNvcHlUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAvLyBCZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBjaGVjayBpZiBv
dmVyZmxvdyBoYXBwZW5zIGZpcnN0LgotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlv
ZmZzZXQgKyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVu
c2lvbnMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoeG9mZnNldCArIHdpZHRo
ID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4
LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJy
ZWN0YW5nbGUgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleFN1YkltYWdl
MkQiLCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzVGV4SW50
ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdl
dEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1h
Z2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29t
cGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAm
cmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsIHJlYXNv
bik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAg
ICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmlu
ZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdl
dCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKLSAgICAgICAgR0MzRHNpemVpIGNs
aXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKLSAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZl
ckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRI
ZWlnaHQpKSB7Ci0gICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXgtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpOwotICAgICAgICAgICAgR0MzRGVudW0gdHlwZSA9IHRleC0+
Z2V0VHlwZSh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNp
Z25lZCBjaGFyW10+IHplcm87Ci0gICAgICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemU7Ci0gICAgICAgICAgICAgICAgR0MzRGVu
dW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlw
ZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCAwKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAiY29weVRleFN1YkltYWdl
MkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB6ZXJvID0gc3RkOjptYWtlX3VuaXF1ZTx1
bnNpZ25lZCBjaGFyW10+KHNpemUpOwotICAgICAgICAgICAgICAgIGlmICghemVybykgewotICAg
ICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKLSAgICAgICAgICAg
IGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7Ci0gICAgICAgICAg
ICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdl
dCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb250
ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFgg
LSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBw
ZWRIZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBt
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRy
PFdlYkdMQnVmZmVyPiBvID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFy
ZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xG
cmFtZWJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJHTEZyYW1lYnVmZmVyOjpj
cmVhdGUodGhpcyk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4g
bzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdM
VGV4dHVyZTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4g
byA9IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdl
dCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJl
ZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhp
cyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1Q
YXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRl
cihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY3Jl
YXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBvID0gV2ViR0xTaGFkZXI6OmNy
ZWF0ZSh0aGlzLCB0eXBlKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0
dXJuIG87Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjdWxsRmFjZShHQzNEZW51
bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1vZGUpOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAob2JqZWN0LT5vYmpl
Y3QoKSkKLSAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIGNvbnRleHQgaGVyZSBiZWNhdXNl
IHdlIHdhbnQKLSAgICAgICAgLy8gdGhpbmdzIGluIHRoaXMgY29udGV4dCB1bmJvdW5kLgotICAg
ICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihX
ZWJHTEJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghZGVsZXRlT2JqZWN0KGJ1ZmZlcikpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAobV9ib3VuZEFycmF5QnVmZmVyID09IGJ1ZmZlcikKLSAg
ICAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gMDsKLQotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC0+dW5iaW5kQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsK
LSAgICBpZiAoIWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZlcikpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKLSAgICAgICAgbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0g
ICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZygwKTsKLSAg
ICAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJh
Y2sgdG8gaW50ZXJuYWwgZmJvLgotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkK
LXsKLSAgICBkZWxldGVPYmplY3QocHJvZ3JhbSk7Ci0gICAgLy8gV2UgZG9uJ3QgcmVzZXQgbV9j
dXJyZW50UHJvZ3JhbSB0byAwIGhlcmUgYmVjYXVzZSB0aGUgZGVsZXRpb24gb2YgdGhlCi0gICAg
Ly8gY3VycmVudCBwcm9ncmFtIGlzIGRlbGF5ZWQuCi19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZl
cikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChyZW5kZXJidWZmZXIpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcpCi0gICAg
ICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudEZyb21C
b3VuZEZyYW1lYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKLXsKLSAgICBkZWxldGVP
YmplY3Qoc2hhZGVyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRl
eHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIGlmICghZGVsZXRlT2JqZWN0KHRl
eHR1cmUpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rl
eHR1cmVVbml0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1
cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nKQotICAgICAgICAgICAgbV90ZXh0dXJlVW5pdHNb
aV0udGV4dHVyZTJEQmluZGluZyA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh0ZXh0dXJlID09IG1f
dGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZykKLSAgICAgICAgICAgIG1fdGV4
dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IG51bGxwdHI7Ci0gICAgfQotICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmct
PnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcih0ZXh0dXJlKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bnRleHQtPmRlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2RlcHRoTWFzayA9IGZsYWc7Ci0gICAg
bV9jb250ZXh0LT5kZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh6
TmVhciA+IHpGYXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVwdGhSYW5nZSIsICJ6TmVhciA+IHpGYXIiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpG
YXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
ZGV0YWNoU2hhZGVyIiwgInNoYWRlciBub3QgYXR0YWNoZWQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSks
IG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3ND
b250ZXh0M0QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdD
M0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7Ci0gICAgICAgIG1fc3Rl
bmNpbEVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNz
b3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRpc2Fi
bGUoY2FwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0
dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoaW5kZXgpOwotICAgIHN0YXRlLmVuYWJsZWQgPSBmYWxzZTsKLQotICAgIGlmIChp
bmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICBtX2NvbnRleHQtPmRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0
eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1l
bnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCk7Ci0gICAgCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChvZmZzZXQgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7Ci0g
ICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBpbnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlz
aWJsZSBieSA0IGZvciBhbGlnbm1lbnQgcmVhc29ucy4KLSAgICAgICAgaWYgKG9mZnNldCAlIDQp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFu
IGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICBvZmZzZXQgLz0gNDsKLQotICAgICAgICBHQzNEc2l6
ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gNDsKLSAgICAgICAg
aWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlQpIHsKLSAgICAgICAgLy8gRm9yIGFuIHVuc2lnbmVkIHNob3J0IGFycmF5LCBvZmZz
ZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgMiBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCi0gICAgICAg
IGlmIChvZmZzZXQgJSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8v
IE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KLSAgICAgICAgb2Zmc2V0IC89IDI7Ci0K
LSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgo
KSAvIDI7Ci0gICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVt
ZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwg
Y291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
SW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCYgbnVtRWxlbWVu
dHNSZXF1aXJlZCkKLXsKLSAgICAvLyBQZXJmb3JtcyBjb25zZXJ2YXRpdmUgdmFsaWRhdGlvbiBi
eSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgotICAgIC8vIHRoZSBnaXZlbiB0eXBlIHBlciBl
bGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBib3VuZAotICAgIC8vIGFycmF5IGJ1
ZmZlcnMgaGF2ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0aXNmeSB0aGF0IG1heGltdW0KLSAgICAv
LyBpbmRleCwgc2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXItZHJhdy1jYWxsIGl0ZXJhdGlvbiBpbgot
ICAgIC8vIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UuCi0gICAgCi0gICAgUmVmUHRyPFdlYkdM
QnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDM0RzaXplaXB0ciBudW1FbGVtZW50cyA9IGVs
ZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwotICAgIC8vIFRoZSBjYXNlIGNvdW50PT0w
IGlzIGFscmVhZHkgZGVhbHQgd2l0aCBpbiBkcmF3RWxlbWVudHMgYmVmb3JlIHZhbGlkYXRlSW5k
ZXhBcnJheUNvbnNlcnZhdGl2ZS4KLSAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgY29uc3QgQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1
ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgQVNTRVJUKGJ1ZmZlcik7Ci0KLSAgICBp
bnQgbWF4SW5kZXggPSBlbGVtZW50QXJyYXlCdWZmZXItPmdldENhY2hlZE1heEluZGV4KHR5cGUp
OwotICAgIGlmIChtYXhJbmRleCA8IDApIHsKLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11
bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5kZXgu
Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0
aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBm
b3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAgICAg
ICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ld
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDogewotICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0g
c2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAgICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0
YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAg
ICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAg
ICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50Pihw
W2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6IHsKLSAgICAgICAgICAgIGlmICghbV9vZXNFbGVt
ZW50SW5kZXhVaW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdWludCk7Ci0gICAgICAgICAgICBjb25zdCBHQzNE
dWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oYnVmZmVyLT5kYXRhKCkpOwot
ICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsr
KQotICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19j
YXN0PGludD4ocFtpXSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBl
bGVtZW50QXJyYXlCdWZmZXItPnNldENhY2hlZE1heEluZGV4KHR5cGUsIG1heEluZGV4KTsKLSAg
ICB9Ci0KLSAgICBpZiAobWF4SW5kZXggPj0gMCkgewotICAgICAgICAvLyBUaGUgbnVtYmVyIG9m
IHJlcXVpcmVkIGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG1heGltdW0KLSAgICAgICAg
Ly8gaW5kZXggdGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgotICAgICAgICBudW1FbGVtZW50c1JlcXVp
cmVkID0gbWF4SW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0
ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQotewotICAgIEFTU0VSVChj
b3VudCA+PSAwICYmIG9mZnNldCA+PSAwKTsKLSAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSAwOwot
ICAgIAotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLQotICAgIGlmICgh
ZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNv
dW50KSB7Ci0gICAgICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSAwOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5
QnVmZmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGxvbmcgdW9m
ZnNldCA9IG9mZnNldDsKLSAgICB1bnNpZ25lZCBsb25nIG4gPSBjb3VudDsKLQotICAgIGlmICh0
eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAgLy8gTWFr
ZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89IHNpemVvZihH
QzNEdWludCk7Ci0gICAgICAgIGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0MzRHVpbnQqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRh
KCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlm
ICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAg
ICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVs
ZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89IHNpemVvZihHQzNEdXNob3J0KTsKLSAg
ICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQq
PihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9m
ZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlmICgqcCA+IGxh
c3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAgICAgICAgICsr
cDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSkgewotICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2Fz
dDxjb25zdCBHQzNEdWJ5dGUqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZl
cigpLT5kYXRhKCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAg
ICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAq
cDsKLSAgICAgICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZW4gc2V0
IHRoZSBsYXN0IGluZGV4IGluIHRoZSBpbmRleCBhcnJheSBhbmQgbWFrZSBzdXJlIGl0IGlzIHZh
bGlkLgotICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBsYXN0SW5kZXggKyAxOwotICAgIHJldHVy
biBudW1FbGVtZW50c1JlcXVpcmVkID4gMDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2ln
bmVkIHByaW1pdGl2ZUNvdW50KQotewotICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTG9vayBpbiBlYWNoIGVuYWJsZWQgdmVydGV4IGF0
dHJpYiBhbmQgY2hlY2sgaWYgdGhleSd2ZSBiZWVuIGJvdW5kIHRvIGEgYnVmZmVyLgotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21heFZlcnRleEF0dHJpYnM7ICsraSkgewotICAgICAg
ICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaSku
dmFsaWRhdGVCaW5kaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKGVsZW1lbnRDb3VudCA8PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotCi0gICAg
Ly8gTG9vayBpbiBlYWNoIGNvbnN1bWVkIHZlcnRleCBhdHRyaWIgKGJ5IHRoZSBjdXJyZW50IHBy
b2dyYW0pLgotICAgIGJvb2wgc2F3Tm9uSW5zdGFuY2VkQXR0cmliID0gZmFsc2U7Ci0gICAgYm9v
bCBzYXdFbmFibGVkQXR0cmliID0gZmFsc2U7Ci0gICAgaW50IG51bUFjdGl2ZUF0dHJpYkxvY2F0
aW9ucyA9IG1fY3VycmVudFByb2dyYW0tPm51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zOyArK2kpIHsKLSAg
ICAgICAgaW50IGxvYyA9IG1fY3VycmVudFByb2dyYW0tPmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9u
KGkpOwotICAgICAgICBpZiAobG9jID49IDAgJiYgbG9jIDwgc3RhdGljX2Nhc3Q8aW50PihtX21h
eFZlcnRleEF0dHJpYnMpKSB7Ci0gICAgICAgICAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGxvYyk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZW5h
YmxlZCkgewotICAgICAgICAgICAgICAgIHNhd0VuYWJsZWRBdHRyaWIgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIC8vIEF2b2lkIG9mZi1ieS1vbmUgZXJyb3JzIGluIG51bUVsZW1lbnRzIGNvbXB1
dGF0aW9uLgotICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgbGFzdCBlbGVtZW50LCB3ZSB3aWxs
IG9ubHkgdG91Y2ggdGhlIGRhdGEgZm9yIHRoZQotICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQg
YW5kIG5vdGhpbmcgYmV5b25kIGl0LgotICAgICAgICAgICAgICAgIGludCBieXRlc1JlbWFpbmlu
ZyA9IHN0YXRpY19jYXN0PGludD4oc3RhdGUuYnVmZmVyQmluZGluZy0+Ynl0ZUxlbmd0aCgpIC0g
c3RhdGUub2Zmc2V0KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN0YXRlLnN0cmlkZSA+IDApOwotICAgICAgICAgICAg
ICAgIGlmIChieXRlc1JlbWFpbmluZyA+PSBzdGF0ZS5ieXRlc1BlckVsZW1lbnQpCi0gICAgICAg
ICAgICAgICAgICAgIG51bUVsZW1lbnRzID0gMSArIChieXRlc1JlbWFpbmluZyAtIHN0YXRlLmJ5
dGVzUGVyRWxlbWVudCkgLyBzdGF0ZS5zdHJpZGU7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0
ZS5kaXZpc29yKQotICAgICAgICAgICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGlmICgoIXN0YXRlLmRpdmlzb3IgJiYgZWxlbWVudENvdW50
ID4gbnVtRWxlbWVudHMpIHx8IChzdGF0ZS5kaXZpc29yICYmIHByaW1pdGl2ZUNvdW50ID4gbnVt
RWxlbWVudHMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXNhd05vbkluc3RhbmNlZEF0dHJpYiAm
JiBzYXdFbmFibGVkQXR0cmliKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlV2ViR0xPYmpl
Y3QoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCogb2JqZWN0KQotewotICAg
IGlmICghb2JqZWN0IHx8ICFvYmplY3QtPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBvYmplY3Qgb3Igb2JqZWN0IGRlbGV0ZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVu
Y3Rpb25OYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGZpcnN0IDwgMCB8
fCBjb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChwcmltY291bnQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJwcmltY291bnQgPCAw
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICAvLyBFbnN1cmUgd2UgaGF2
ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkRmlyc3QoZmlyc3QpOwotICAgICAgICBDaGVja2VkPEdDM0RpbnQs
IFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOwotICAgICAgICBDaGVja2VkPEdD
M0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkU3VtID0gY2hlY2tlZEZpcnN0ICsgY2hlY2tl
ZENvdW50OwotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2Vk
UHJpbUNvdW50KHByaW1jb3VudCk7Ci0gICAgICAgIGlmIChjaGVja2VkU3VtLmhhc092ZXJmbG93
ZWQoKSB8fCBjaGVja2VkUHJpbUNvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCAhdmFsaWRhdGVWZXJ0
ZXhBdHRyaWJ1dGVzKGNoZWNrZWRTdW0udW5zYWZlR2V0KCksIGNoZWNrZWRQcmltQ291bnQudW5z
YWZlR2V0KCkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNz
IG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXZhbGlkYXRlVmVydGV4QXR0cmlidXRl
cygwKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3Jy
ZWN0bHkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
emVpIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
Ci0gICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXMiLCBtb2RlLCBmaXJzdCwg
Y291bnQsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwot
Ci0gICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7Ci0gICAgaWYgKCFpc0dM
RVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0
ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwotICAgIGlmICghaXNHTEVTMk5QT1RT
dHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwg
dHJ1ZSk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0g
ICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKLSAg
ICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKLSAgICBp
ZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVz
cygiZHJhd0FycmF5cyIsIGZhbHNlKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHMpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5jdGlv
bk5hbWUsIG1vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXZhbGlkYXRl
U3RlbmNpbFNldHRpbmdzKGZ1bmN0aW9uTmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAg
ICAgICAgaWYgKG1fb2VzRWxlbWVudEluZGV4VWludCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGNvdW50IDwgMCB8fCBvZmZzZXQgPCAwKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJjb3VudCBvciBvZmZzZXQgPCAwIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0Q2hh
bmdlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJBWV9CVUZGRVIgYm91bmQiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVy
aW5nIHN0YXRlCi0gICAgICAgIGlmICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKGNvdW50LCB0
eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJB
WV9CVUZGRVIiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoIWNvdW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXZh
bGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlk
YXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cykpIHsKLSAgICAgICAgICAgIGlmICghdmFs
aWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0
cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVt
RWxlbWVudHMpKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFj
Y2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgh
dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVm
ZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVh
c29uKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1v
ZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLQotICAgIHVuc2lnbmVk
IG51bUVsZW1lbnRzID0gMDsKLSAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxl
bWVudHMiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAgICBib29sIHZlcnRleEF0
dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewot
ICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5
UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVt
RWxlbWVudHMpOwotICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKLSAgICB9Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmlj
dCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIHRy
dWUpOwotICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
LSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHMiLCBmYWxzZSk7
Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwgY2FwKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewot
ICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgYXBwbHlTdGVuY2lsVGVz
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsK
LSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7Ci0gICAgfQotICAgIG1fY29u
dGV4dC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0gICAgc3RhdGUuZW5hYmxlZCA9IHRydWU7Ci0KLSAg
ICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZmluaXNoKCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Zmx1
c2goKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVu
ZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChidWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRh
dGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVi
dWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMg
dXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJP
LgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJubyBmcmFt
ZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZlcik7Ci0gICAgc3dpdGNoIChh
dHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRh
cmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHJl
bmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICB9Ci0g
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVy
KGF0dGFjaG1lbnQsIGJ1ZmZlcik7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFy
Z2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChsZXZlbCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91
cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0dXJl
IG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0
YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRl
cm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJPLgotICAgIGlmICghbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZU9iamVj
dCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKLSAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAg
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7
Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3Qs
IGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1F
TlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAg
IH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVi
dWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci0gICAgYXBwbHlT
dGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNl
KEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdlbmVyYXRlTWlw
bWFwIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBt
YXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxsIHRoZSBzYW1lIHNpemUiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3NlZCB0ZXh0dXJlcyBzaG91bGQg
YmUgYWxsb3dlZCBpbiBXZWJHTCAyOgotICAgIGlmICh0ZXgtPmlzQ29tcHJlc3NlZCgpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5lcmF0ZSBtaXBtYXBzIGZyb20g
Y29tcHJlc3NlZCB0ZXh0dXJlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCF2
YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1hcCIsIHRleC0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIGdlbmVyYXRl
TWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVyIGlzIG5vdCBORUFSRVNUX01J
UE1BUF9MSU5FQVIKLSAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhlIGhhY2sgb25jZSB0aGlzIGRy
aXZlciBidWcgaXMgZml4ZWQuCi0jaWYgT1MoREFSV0lOKQotICAgIGJvb2wgbmVlZFRvUmVzZXRN
aW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5nZXRNaW5GaWx0ZXIoKSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpOwotICAgICAgICBu
ZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgbV9jb250ZXh0
LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotI2lmIE9TKERBUldJTikKLSAgICBpZiAobmVlZFRv
UmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHRleC0+Z2V0TWluRmlsdGVy
KCkpOwotI2VuZGlmCi0gICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExldmVsSW5mbygpOwotfQotCi1Q
YXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3Rp
dmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVBdHRyaWIiLCBw
cm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwot
ICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTE9HKFdlYkdM
LCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwgaW5kZXgsIGluZm8ubmFtZS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIHJldHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZv
Lm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTEFjdGl2
ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9ncmFtKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICghbV9jb250ZXh0LT5nZXRB
Y3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8pKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAg
aWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0aCgiWzBdIikpCi0gICAgICAg
ICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKLQotICAgIExPRyhXZWJHTCwgIlJldHVybmlu
ZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkp
OwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50
eXBlLCBpbmZvLnNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0
YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVjdG9yPFJlZlB0cjxXZWJHTFNo
YWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBdHRhY2hlZFNoYWRl
cnMiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgR0MzRGVu
dW0gc2hhZGVyVHlwZVtdID0gewotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NI
QURFUiwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUgotICAgIH07
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihzaGFkZXJUeXBlKSAvIHNpemVv
ZihHQzNEZW51bSk7ICsraSkgewotICAgICAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gcHJvZ3Jh
bS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7Ci0gICAgICAgIGlmIChzaGFkZXIp
Ci0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIpOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJp
YkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
ImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBp
ZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0g
ICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRBdHRyaWJMb2Nh
dGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2
ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXByb2dyYW0tPmdldExpbmtT
dGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5r
ZWQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5n
ZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVO
VF9BUlJBWV9CVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdl
dCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgaWYgKHBu
YW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAmJiBwbmFtZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0g
ICAgfQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRCdWZmZXJQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIGlmIChwbmFtZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pih2YWx1ZSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIC8vIFdl
IGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIG9iamVj
dCB0bwotICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRhdGluZyBhbnkgY2FjaGVkIHZl
cnNpb24uCi0KLSAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2UgcmVxdWVzdGVkIHZhbHVl
cyBvZiAiZmFsc2UiIGZvciBkZXB0aAotICAgIC8vIGFuZCBzdGVuY2lsLCByZWdhcmRsZXNzIG9m
IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8gR3JhcGhpY3NDb250ZXh0
M0Qgb3IgRHJhd2luZ0J1ZmZlci4KLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4g
YXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZShtX2NvbnRleHQtPmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkpOwotICAgIGlmICghbV9hdHRyaWJ1dGVzLmRlcHRoKQotICAg
ICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZXMu
c3RlbmNpbCkKLSAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNpbChmYWxzZSk7Ci0gICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBUaGUgRHJhd2luZ0J1ZmZlciBvYnRhaW5z
IGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1
dGVzKCksCi0gICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3duIGRldGVybWluYXRpb24gb2Yg
d2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KLSAgICAgICAgYXR0cmlidXRlcy0+
c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1wbGUoKSk7Ci0gICAgfQotICAg
IHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKLX0KLQotR0MzRGVudW0gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1
dGlvbikKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwotfQotCi1XZWJHTEV4dGVuc2lvbiogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9k
IikKLSAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKSkgewotICAgICAgICBpZiAoIW1f
ZXh0U2hhZGVyVGV4dHVyZUxPRCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICAg
ICAgICAgIG1fZXh0U2hhZGVyVGV4dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVy
VGV4dHVyZUxPRD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVy
VGV4dHVyZUxPRC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKLSAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMiKSkgewotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0gICAgICAgICAgICBt
X2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9l
eHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShuYW1lLCAiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMiKSkgewotICAgICAgICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgewot
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdM
X09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERl
cml2YXRpdmVzID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlz
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdl
dCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJl
X2Zsb2F0IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxv
YXQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFi
bGVkKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxv
YXQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0LmdldCgpOwotICAgIH0KLSAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCi0gICAg
ICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1
cmVfZmxvYXRfbGluZWFyIikpIHsKLSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVh
cikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOwotICAgICAgICAgICAgbV9vZXNUZXh0
dXJlRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4o
dGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFy
LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSkgewotICAgICAgICBpZiAoIW1f
b2VzVGV4dHVyZUhhbGZGbG9hdCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICAg
ICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVy
ZUhhbGZGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgewotICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVI
YWxmRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5l
YXI+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxv
YXRMaW5lYXIuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
T0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKLSAgICAg
ICAgaWYgKCFtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKTsKLSAgICAgICAgICAgIG1fb2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9FU1ZlcnRleEFycmF5T2JqZWN0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gbV9vZXNWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJPRVNfZWxlbWVudF9pbmRleF91aW50IikKLSAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91
aW50IikpIHsKLSAgICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxl
bWVudF9pbmRleF91aW50Iik7Ci0gICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU0VsZW1lbnRJbmRleFVpbnQ+KHRoaXMpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBtX29lc0VsZW1lbnRJbmRleFVpbnQuZ2V0KCk7Ci0gICAgfQotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKLSAgICAg
ICAgaWYgKCFtX3dlYmdsTG9zZUNvbnRleHQpCi0gICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRl
eHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOwotICAgICAgICBy
ZXR1cm4gbV93ZWJnbExvc2VDb250ZXh0LmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQot
ICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsK
LSAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMpCi0gICAgICAgICAgICBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEM+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlQVRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIikpCi0gICAgICAgICYmIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICAgIGlm
ICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29t
cHJlc3NlZFRleHR1cmVQVlJUQyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4
dHVyZVBWUlRDPih0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldF
QkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIikKLSAgICAgICAgJiYgV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fd2ViZ2xDb21w
cmVzc2VkVGV4dHVyZVMzVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVT
M1RDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7
Ci0gICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOwotICAg
IH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUi
KQotICAgICAgICAmJiBXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4
dDNEKCkpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVN
X2RlcHRoX3RleHR1cmUiKTsKLSAgICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6
Om1ha2VfdW5pcXVlPFdlYkdMRGVwdGhUZXh0dXJlPih0aGlzKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbV93ZWJnbERlcHRoVGV4dHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdC
dWZmZXJzKCkpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJh
d19idWZmZXJzIik7Ci0gICAgICAgICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFdlYkdMRHJhd0J1ZmZlcnM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBtX3dlYmdsRHJhd0J1ZmZlcnMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJy
YXlzOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJy
YXlzKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwotICAgICAgICAgICAgbV9hbmdsZUlu
c3RhbmNlZEFycmF5cyA9IHN0ZDo6bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRo
aXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdl
dCgpOwotICAgIH0KLSAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5m
byIpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAg
ICAgICAgICAgICBtX3dlYmdsRGVidWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkdMRGVidWdSZW5kZXJlckluZm8+KHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xE
ZWJ1Z1JlbmRlcmVySW5mby5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlYnVnX3NoYWRlcnMiKQotICAgICAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3No
YWRlcl9zb3VyY2UiKSkgewotICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQot
ICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkdMRGVidWdTaGFkZXJzPih0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdT
aGFkZXJzLmdldCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZm
ZXJGdW5jUGFyYW1ldGVycygiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFy
Z2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotCi0gICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVj
dCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBm
cmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
fQotCi0gICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5nZXRBdHRhY2htZW50T2JqZWN0KGF0dGFjaG1lbnQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0g
ICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfVFlQRSkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PTkUpOwotICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJ
TlZBTElEX0VOVU0gaW4gdGhpcyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgICAgIC8vIHNw
ZWNpZmllcyBJTlZBTElEX09QRVJBVElPTi4KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBv
YmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpOwotICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7
Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOwotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4o
cmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9U
RVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0Mz
RGludCB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUp
OwotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQi
KTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUik7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX05BTUU6Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2Vi
R0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmpl
Y3QpKSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRh
Y2htZW50Iik7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFt
ZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY29uc3QgaW50IGludFplcm8gPSAwOwotICAgIHN3aXRj
aCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgICAgIHJl
dHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgICAgcmV0dXJuIGdl
dFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxQSEFfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFy
cmF5QnVmZmVyKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6Ci0gICAgICAg
IHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX0FM
UEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9SR0I6Ci0gICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJ
T05fUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQToKLSAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORF9TUkNfUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMVUVfQklUUzoKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1B
VFM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oVWludDMyQXJyYXk6OmNyZWF0ZShtX2Nv
bXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRz
LnNpemUoKSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKLSAgICAg
ICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJP
R1JBTToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUHJvZ3Jh
bT4obV9jdXJyZW50UHJvZ3JhbSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRl
cy5kZXB0aCkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oaW50WmVybyk7Ci0gICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0ZVTkM6Ci0gICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1BU0s6Ci0gICAgICAgIHJldHVybiBn
ZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
SVRIRVI6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRp
bmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9GQUNFOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVO
X0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJ
WkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6Ci0gICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5H
X1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUzoKLSAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZP
Uk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHJldHVy
biBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgotICAgICAgICAvLyBGSVhNRTogc2hv
dWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8KLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1F
TlQ6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKLSAgICAgICAgcmV0dXJuIGdl
dEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZ
R09OX09GRlNFVF9GSUxMOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6Ci0g
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVEX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+
KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkVSOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IFdlYkdM
IikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9CVUZGRVJTOgotICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVS
QUdFX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9Y
OgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgotICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hB
RElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJH
TCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNE
OjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIikiKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JB
Q0tfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlM
OgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6Ci0gICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNL
X1ZBTFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVuY2lsKQotICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRToK
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRlVO
QzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKLSAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKLSAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgotICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9WQUxVRV9NQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgot
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklO
RElOR18yRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
ZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR19DVUJFX01B
UDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4o
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5n
KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKLSAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyht
X3VucGFja0ZsaXBZKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVM
VElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09M
T1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1f
dW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlZFTkRPUjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhTdHJpbmcoIldlYktpdCIpKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0Nv
bnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJ
RVdQT1JUOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRf
T0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAgICAgICAgaWYgKG1fb2VzU3RhbmRh
cmREZXJpdmF0aXZlcykKLSAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwot
ICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6
Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCi0gICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJFUikpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdF
QkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURf
VkVORE9SX1dFQkdMOgotICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQotICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGlj
c0NvbnRleHQzRDo6VkVORE9SKSk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOwotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9B
UlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICAgICAgaWYg
KG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKLSAgICAgICAgICAgIGlmICghbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4obV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0KSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBP
RVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklT
T1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgICAgIGlm
IChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykKLSAgICAgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RS
T1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhU
X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFD
SE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBCRUdJTgotICAgICAgICBpZiAobV93ZWJn
bERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xv
ckF0dGFjaG1lbnRzKCkpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhU
OgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICht
X3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMzRDo6
RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNE
ZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMo
KSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgICAgICAg
ICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKLSAg
ICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgotICAgICAgICAgICAgICAgIHZh
bHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAgICBHQzNEaW50IHZhbHVlID0gMDsK
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRF
X1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQo
KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkFMSURBVEVfU1RBVFVTOgotICAgICAg
ICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAm
dmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZh
bHVlKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVM6Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTOgotICAgICAgICBtX2NvbnRleHQt
PmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJ
VkVfVU5JRk9STVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJv
bENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQcm9ncmFtUGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgIH0KLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiAiIjsKLSAg
ICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVj
dE9yWmVybyhwcm9ncmFtKSkpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICBpZiAoIW1fcmVuZGVyYnVmZmVy
QmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVyYnVmZmVyIGJvdW5kIik7Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBpZiAobV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9TVEVOQ0lMCi0gICAgICAgICYmICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkg
ewotICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpOwotICAgICAgICBp
bnQgdmFsdWUgPSAwOwotICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKLSAgICAgICAgICAgIHZhbHVlID0g
bV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6Ci0gICAg
ICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SGVpZ2h0KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJ
WkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDI0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6Ci0gICAg
ICAgICAgICB2YWx1ZSA9IDg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZv
cm1hdCgpKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUp
OwotICAgIH0KLQotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lEVEg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfU1RFTkNJTF9TSVpFOgotICAgICAgICBtX2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8odmFsdWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJi
dWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIs
IEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xP
YmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRlZCgpKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKLSAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJp
dihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTSEFERVJfVFlQRToKLSAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihv
YmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1TdHJpbmcgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFs
aWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xvZyIsIHNoYWRlcikpCi0gICAgICAgIHJl
dHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFNoYWRlcklu
Zm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFNoYWRl
clByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBzd2l0Y2gg
KHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZh
bGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBz
d2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1df
RkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0ZMT0FUOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1fSU5UOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5UOgotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgcHJlY2lz
aW9uIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgR0MzRGlu
dCByYW5nZVsyXSA9IHswLCAwfTsKLSAgICBHQzNEaW50IHByZWNpc2lvbiA9IDA7Ci0gICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlw
ZSwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIHJldHVybiBXZWJHTFNoYWRlclByZWNpc2lvbkZv
cm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwgcHJlY2lzaW9uKTsKLX0KLQotU3RyaW5n
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVyU291cmNlIiwgc2hhZGVyKSkKLSAg
ICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291
cmNlKCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1
cHBvcnRlZEV4dGVuc2lvbnMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLQotICAg
IGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0KLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNf
dGV4dHVyZV9mbG9hdCIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9h
dCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09F
U190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4
dHVyZV9mbG9hdF9saW5lYXIiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIp
KQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIp
OwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIikpCi0gICAgICAg
IHJlc3VsdC5hcHBlbmQoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICBpZiAobV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX0VYVF90ZXh0dXJlX2Zp
bHRlcl9hbmlzb3Ryb3BpYyIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpKQotICAg
ICAgICByZXN1bHQuYXBwZW5kKCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik7Ci0gICAgcmVzdWx0
LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7Ci0gICAgaWYgKFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lU
X1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiKTsKLSAgICBpZiAoV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldF
QktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTsKLSAgICBpZiAoV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTsKLSAgICBpZiAoV2ViR0xEZXB0aFRl
eHR1cmU6OnN1cHBvcnRlZChncmFwaGljc0NvbnRleHQzRCgpKSkKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpOwotICAgIGlmIChzdXBwb3J0c0RyYXdCdWZmZXJz
KCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RyYXdfYnVmZmVycyIpOwotICAgIGlm
IChBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7Ci0KLSAgICBpZiAoYWxsb3dQcml2aWxl
Z2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpKQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfc2hhZGVycyIpOwotICAgICAgICByZXN1
bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIik7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2V0VGV4UGFyYW1ldGVyIiwgdGFy
Z2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X1dSQVBfVDoKLSAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBu
YW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4odmFsdWUpKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhf
QU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgICAg
ICBpZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkp
OwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiB1bmlmb3JtTG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdCgiZ2V0VW5pZm9ybSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7Ci0gICAgaWYgKCF1bmlmb3JtTG9jYXRpb24gfHwgdW5pZm9ybUxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtIiwgIm5vIHVuaWZvcm1sb2Nh
dGlvbiBvciBub3QgdmFsaWQgZm9yIHRoaXMgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIEdDM0RpbnQgbG9jYXRpb24gPSB1bmlmb3JtTG9jYXRp
b24tPmxvY2F0aW9uKCk7Ci0KLSAgICBHQzNEZW51bSBiYXNlVHlwZTsKLSAgICB1bnNpZ25lZCBs
ZW5ndGg7Ci0gICAgc3dpdGNoICh1bmlmb3JtTG9jYXRpb24tPnR5cGUoKSkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFw
aGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUMzOgotICAgICAgICBiYXNlVHlw
ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAzOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzQ6Ci0gICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKLSAgICAg
ICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAx
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMjoK
LSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5n
dGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRf
VkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAg
ICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwot
ICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMzOgotICAgICAgICBiYXNlVHlwZSA9IEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDNDoKLSAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDI6Ci0g
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5n
dGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VF9NQVQzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAg
ICAgICAgbGVuZ3RoID0gOTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVRfTUFUNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE2OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRVJfQ1VCRToKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
OwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmhhbmRs
ZWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIHN3
aXRjaCAoYmFzZVR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogewot
ICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9OwotICAgICAgICBpZiAobV9pc1JvYnVz
dG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+Z2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCAxNiAq
IHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZh
bHVlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyh2YWx1ZVswXSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQzMkFy
cmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ6IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICAgICAg
aWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBs
b2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxv
Y2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci0gICAgfQotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsK
LSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJv
Z3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPiAxKSB7Ci0gICAg
ICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgICAgYm9vbFZhbHVlW2pd
ID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbal0pOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhib29sVmFsdWUsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZVswXSkpOwotICAgIH0KLSAgICBkZWZh
dWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGdl
dCBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiBvdXIgdW5mb3J0dW5hdGVseSBjb21wbGV4
IGxvZ2ljIGFib3ZlCi0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVua25vd24gZXJyb3IiKTsKLSAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm1Mb2NhdGlvbiIsIHByb2dyYW0pKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldFVuaWZv
cm1Mb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZh
bGlkYXRlU3RyaW5nKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImdldFVuaWZvcm1Mb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIEdDM0RpbnQgdW5pZm9ybUxvY2F0aW9uID0gbV9jb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKLSAg
ICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVp
bHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsKLSAgICBmb3IgKEdDM0Rp
bnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsrKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8g
aW5mbzsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1lIGlmIGl0J3MgYW4gYXJyYXkuCi0gICAg
ICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIpKQotICAgICAgICAgICAgaW5mby5uYW1l
ID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0aCgpIC0gMyk7Ci0gICAgICAgIC8vIElm
IGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCwg
YXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4KLSAgICAgICAgZm9yIChHQzNEaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFN0cmlu
ZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSArICJbIiArIFN0cmluZzo6bnVtYmVyKGluZGV4KSAr
ICJdIjsKLQotICAgICAgICAgICAgaWYgKG5hbWUgPT0gdW5pZm9ybU5hbWUgfHwgbmFtZSA9PSBp
bmZvLm5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpj
cmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9uLCBpbmZvLnR5cGUpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OwotCi0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFZlcnRl
eEF0dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVy
dGV4QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgaWYgKG1fYW5nbGVJbnN0YW5jZWRBcnJheXMg
JiYgcG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNP
Ul9BTkdMRSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5kaXZpc29yKTsKLQot
ICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICBpZiAoKCFpc0dMRVMyQ29tcGxp
YW50KCkgJiYgIWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoMCkuYnVmZmVyQmluZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpCi0gICAg
ICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZwotICAgICAgICAgICAgfHwgIXN0YXRlLmJ1
ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KHN0
YXRlLmJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUu
ZW5hYmxlZCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJB
WV9OT1JNQUxJWkVEOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm5vcm1hbGl6
ZWQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0la
RToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5zaXplKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5vcmlnaW5hbFN0cmlkZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRlLnR5cGUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJF
TlRfVkVSVEVYX0FUVFJJQjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJy
YXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCkpOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1sb25nIGxvbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgs
IEdDM0RlbnVtIHBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIEdDM0RzaXplaXB0ciByZXN1bHQgPSBtX2NvbnRleHQtPmdl
dFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KHJlc3VsdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpo
aW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBpc1ZhbGlkID0gZmFs
c2U7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpH
RU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9I
SU5UX09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCi0gICAgICAgIGlmIChtX29lc1N0
YW5kYXJkRGVyaXZhdGl2ZXMpCi0gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGlmICghaXNWYWxpZCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiaGludCIsICJpbnZhbGlkIHRh
cmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+aGludCh0YXJn
ZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVm
ZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIgfHwgaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYnVmZmVyLT5o
YXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNCdWZmZXIoYnVmZmVyLT5vYmplY3QoKSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0
TG9zdDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQ29udGV4dExvc3RPclBl
bmRpbmcoKQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gJiYgIW1faGFz
UmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBMT0coV2ViR0wsICJDb250ZXh0
IGlzIGJlaW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgcG9saWN5LiIpOwotICAgICAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgp
OwotICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpOwotICAgICAgICBpZiAocGFn
ZSAmJiAhZG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgICAgIHBhZ2UtPm1h
aW5GcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLnJlc29sdmVXZWJHTFBvbGljeUZvclVSTChkb2N1
bWVudC51cmwoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkgZG8gYW55
dGhpbmcgd2l0aCB0aGUgcmVzdWx0IGZyb20gcmVzb2x1dGlvbi4gQSBtb3JlCi0gICAgICAgIC8v
IGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG1pZ2h0IHRyeSB0byBjb25zdHJ1Y3QgYSByZWFsIGNv
bnRleHQsIGV0YyBhbmQgcHJvY2VlZAotICAgICAgICAvLyB3aXRoIG5vcm1hbCBvcGVyYXRpb24u
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkx
MjIKLSAgICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0TG9zdCB8fCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b247Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVkKEdD
M0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIsIGNhcCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkKLSAgICAgICAgcmV0
dXJuIG1fc3RlbmNpbEVuYWJsZWQ7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNh
cCk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNGcmFtZWJ1ZmZl
cihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVy
IHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBp
ZiAoIWZyYW1lYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0
KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtIHx8IGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0
LT5pc1Byb2dyYW0ocHJvZ3JhbS0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJi
dWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghcmVuZGVyYnVmZmVyLT5oYXNFdmVy
QmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+
aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFu
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKLXsK
LSAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNTaGFkZXIoc2hhZGVyLT5vYmplY3Qo
KSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKFdl
YkdMVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUgfHwgaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghdGV4dHVyZS0+aGFz
RXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRl
eHQtPmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmxpbmVX
aWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3Jh
bShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgibGlua1Byb2dyYW0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiB2ZXJ0
ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6
VkVSVEVYX1NIQURFUik7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiBmcmFnbWVudFNoYWRlciA9IHBy
b2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFE
RVIpOwotICAgICAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5pc1ZhbGlk
KCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNWYWxpZCgpIHx8ICFt
X2NvbnRleHQtPnByZWNpc2lvbnNNYXRjaChvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2Jq
ZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkgfHwgIW1fY29udGV4dC0+Y2hlY2tWYXJ5aW5nc1Bh
Y2tpbmcob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciksIG9iamVjdE9yWmVybyhmcmFnbWVudFNo
YWRlcikpKSB7Ci0gICAgICAgICAgICBwcm9ncmFtLT5zZXRMaW5rU3RhdHVzKGZhbHNlKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bGlu
a1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAgICBwcm9ncmFtLT5pbmNyZWFzZUxp
bmtDb3VudCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWko
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgotICAgICAgICBtX3Vu
cGFja0ZsaXBZID0gcGFyYW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKLSAgICAgICAgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhID0gcGFyYW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6Ci0gICAgICAg
IGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMIHx8
IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKQotICAgICAgICAgICAgbV91bnBhY2tD
b2xvcnNwYWNlQ29udmVyc2lvbiA9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihwYXJhbSk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3Ig
VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlBBQ0tfQUxJR05NRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElH
Tk1FTlQ6Ci0gICAgICAgIGlmIChwYXJhbSA9PSAxIHx8IHBhcmFtID09IDIgfHwgcGFyYW0gPT0g
NCB8fCBwYXJhbSA9PSA4KSB7Ci0gICAgICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UKQotICAgICAgICAgICAgICAgIG1fcGFja0FsaWdubWVudCA9
IHBhcmFtOwotICAgICAgICAgICAgZWxzZSAvLyBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVDoKLSAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCA9IHBhcmFtOwotICAg
ICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgYWxp
Z25tZW50Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBEdWUgdG8g
V2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMsIGl0IGlzIG5vdCBwb3NzaWJsZSB0bwot
ICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhlIFdlYkdMIEFQSS4KLSAgICBBU1NFUlQo
Y2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOwotICAgIC8vIFZhbGlkYXRlIGlucHV0IHBhcmFtZXRl
cnMuCi0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFkUGl4ZWxzIiwgIm5vIGRlc3RpbmF0aW9u
IEFycmF5QnVmZmVyVmlldyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN3aXRjaCAo
Zm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQg
Zm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgdHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwg
ImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJR05FRF9CWVRFIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgLy8gVmFsaWRhdGUgYXJyYXkgdHlwZSBhZ2FpbnN0IHBpeGVsIHR5
cGUuCi0gICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4KSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVy
IGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2Fm
ZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgcmVhc29u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBDYWxjdWxhdGUgYXJyYXkgc2l6ZSwg
dGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FMSUdOTUVOVC4KLSAgICB1bnNpZ25l
ZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgcGFkZGluZyA9
IDA7Ci0gICAgaWYgKCFtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgewotICAgICAgICBHQzNE
ZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0
eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQs
ICZwYWRkaW5nKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJyZWFkUGl4ZWxz
IiwgImludmFsaWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IGxhcmdlIGVu
b3VnaCBmb3IgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICB2b2lkKiBkYXRhID0gcGl4ZWxz
LT5iYXNlQWRkcmVzcygpOwotCi0gICAgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmlu
ZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdl
dCgpKTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlYWRuUGl4ZWxzRVhUKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5ieXRlTGVuZ3RoKCksIGRhdGEpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAgICB9Ci0KLSNpZiBPUyhEQVJXSU4pCi0g
ICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKSAvLyB3ZSBoYXZlbid0IGNvbXB1dGVk
IHBhZGRpbmcKLSAgICAgICAgbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3Jt
YXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1
aXJlZCwgJnBhZGRpbmcpOwotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBzZWN0aW9uIHdoZW4g
R0wgZHJpdmVyIGJ1ZyBvbiBNYWMgQU5EIHRoZSBHTEVTIGRyaXZlciBidWcKLSAgICAvLyBvbiBR
QyBpcyBmaXhlZCwgaS5lLiwgd2hlbiBhbHBoYSBpcyBvZmYsIHJlYWRQaXhlbHMgc2hvdWxkCi0g
ICAgLy8gc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCi0gICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFscGhhKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGRhdGEpOwotICAgICAgICBmb3IgKEdDM0RzaXplaSBpeSA9IDA7IGl5IDwgaGVp
Z2h0OyArK2l5KSB7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaSBpeCA9IDA7IGl4IDwgd2lk
dGg7ICsraXgpIHsKLSAgICAgICAgICAgICAgICBwaXhlbHNbM10gPSAyNTU7Ci0gICAgICAgICAg
ICAgICAgcGl4ZWxzICs9IDQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwaXhlbHMgKz0g
cGFkZGluZzsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5yZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAi
aW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fcmVu
ZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVTaXplKCJyZW5kZXJidWZm
ZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2gg
KGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09N
UE9ORU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6Ci0gICAg
ICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRl
cm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+c2V0SXNWYWxpZCh0cnVlKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRT
aXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBpZiAoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0
ZWQoKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdl
dCwgRXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAg
ICAgfQotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3Rl
bmNpbFN1cHBvcnRlZCgpKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRl
cm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFsdWUsIEdD
M0Rib29sZWFuIGludmVydCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52
ZXJ0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNjaXNzb3IoR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2
YWxpZGF0ZVNpemUoInNjaXNzb3IiLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBj
b25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm47Ci0gICAg
U3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9IFN0cmlwQ29tbWVudHMoc3RyaW5nKS5yZXN1
bHQoKTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJzaGFkZXJTb3VyY2UiLCBzdHJpbmdXaXRo
b3V0Q29tbWVudHMpKQotICAgICAgICByZXR1cm47Ci0gICAgc2hhZGVyLT5zZXRTb3VyY2Uoc3Ry
aW5nKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShvYmplY3RPclplcm8oc2hhZGVyKSwg
c3RyaW5nV2l0aG91dENvbW1lbnRzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jIiwgZnVuYykpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAgIG1fc3RlbmNpbEZ1bmNS
ZWZCYWNrID0gcmVmOwotICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKLSAgICBtX3N0ZW5j
aWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywg
cmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5j
U2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1
aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYygic3RlbmNpbEZ1bmNTZXBhcmF0
ZSIsIGZ1bmMpKQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1
bmNSZWYgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgICAg
ICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFj
ayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
T05UOgotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAgICAgICBtX3N0ZW5jaWxG
dW5jTWFzayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgICAgICBt
X3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVu
YywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxN
YXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgIG1fc3RlbmNp
bE1hc2tCYWNrID0gbWFzazsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKG1hc2spOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51
bSBmYWNlLCBHQzNEdWludCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKGZhY2UpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1h
c2s7Ci0gICAgICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sg
PSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNL
OgotICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShm
YWNlLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcChH
QzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWls
LCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE9w
U2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogRm9y
IG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZC4KLSAgICBlYyA9IDA7Ci0gICAgV2Vi
R0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFy
Z2V0LCB0cnVlKTsKLSAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1h
Z2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpOwotICAgIEFTU0VSVCh0ZXgpOwot
ICAgIEFTU0VSVCghbGV2ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQp
KTsKLSAgICBpZiAoIXBpeGVscykgewotICAgICAgICAvLyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5H
TCBpbXBsZW1lbnRhdGlvbiBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMg
dGhlcmVmb3JlIHRydWUuCi0gICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGlm
IHRoZXkgYXJlIHVzaW5nIEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVz
Ci0gICAgICAgIC8vIGNhbiBub3QgYmUgY2xlYXJlZCB3aXRoIHRleEltYWdlMkQgYW5kIG11c3Qg
YmUgY2xlYXJlZCBieSBiaW5kaW5nIHRvIGFuIGZibyBhbmQgY2FsbGluZwotICAgICAgICAvLyBj
bGVhci4KLSAgICAgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCi0gICAgICAgICAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBib29sIHN1Y2NlZWQgPSBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVy
LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgICAgIGlmICghc3Vj
Y2VlZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGlu
dGVybmFsZm9ybWF0KSk7Ci0gICAgICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgICAgICBpZiAobV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAgICAgLy8g
VGhlIHRleEltYWdlMkQgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQg
ZG9lc24ndCBoYXZlIHRoZSBkYXRhIGZvciB0aGlzIGxldmVsLgotICAgICAgICAgICAgdGV4LT5t
YXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
KiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3VyY2Us
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgZWMgPSAwOwotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBw
cmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dDNEOjpOT05FKTsKLSAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVk
ZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRh
Rm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKLSAgICBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9w
KCk7Ci0gICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFn
ZVBpeGVsRGF0YSgpOwotCi0gICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYg
KHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpB
bHBoYURvTm90aGluZyAmJiAhZmxpcFkpCi0gICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdl
LCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0
YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFn
ZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBk
YXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBm
b3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0
YSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0
aW9uVHlwZSBmdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSBzb3VyY2VU
eXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0KQotewotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhmdW5jdGlvbk5h
bWUsIGZ1bmN0aW9uVHlwZSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyhmdW5jdGlv
bk5hbWUsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vdFRleFN1YkltYWdlMkQpIHsKLSAg
ICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRm9yIFNvdXJjZUFy
cmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVUZXhGdW5jRGF0YSgpIHdvdWxkIGhhbmRs
ZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJsZVRleEZvcm1hdAotICAgICAgICAvLyBi
eSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3IGlzIG51bGwgb3Igbm90LgotICAgICAg
ICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZpZXcpIHsKLSAgICAgICAgICAg
IGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVNpemUo
ZnVuY3Rpb25OYW1lLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hl
Y2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KLSAgICAgICAgaWYgKHhvZmZzZXQgKyB3aWR0
aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJi
YWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxl
dmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2
ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGV4dHVy
ZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8IHRleHR1cmUt
PmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleEltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxBbGxvd2VkKQotICAgICAgICB8fCAhdmFsaWRh
dGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZm
ZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0gICAgdm9pZCogZGF0
YSA9IHBpeGVscyA/IHBpeGVscy0+YmFzZUFkZHJlc3MoKSA6IDA7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHRlbXBEYXRhOwotICAgIGJvb2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0g
ICAgaWYgKGRhdGEgJiYgKG1fdW5wYWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
KSkgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3VucGFja0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YSkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7Ci0gICAgICAgIGNoYW5n
ZVVucGFja0FsaWdubWVudCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGln
bm1lbnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCi0gICAgICAgICAgICAgICAg
ICAgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVu
dCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwg
Tm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0g
ICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFn
ZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4KLSAgICAvLyBObyBjb252ZXJzaW9uIGlz
IG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVE
X0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgot
ICAgIGlmICghbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAg
IGVsc2UgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMs
IGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBk
YXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50
ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZv
cm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgp
LT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UqIGltYWdlLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICBJbnRTaXplIHNpemUo
d2lkdGgsIGhlaWdodCk7Ci0gICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAg
SW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXpl
KTsKLSAgICBpZiAoIWJ1ZikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChG
bG9hdFBvaW50KCksIGltYWdlLT5zaXplKCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9h
dFBvaW50KCksIHNpemUpOwotICAgIGJ1Zi0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICByZXR1cm4gYnVmLT5j
b3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VF
bGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgi
dGV4SW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5k
ZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0lt
YWdlKCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFn
ZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0K
LSAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQi
LCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVy
LT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1h
Z2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFz
RWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRl
eEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIs
IHRhcmdldCwgdHJ1ZSk7Ci0gICAgLy8gSWYgcG9zc2libGUsIGNvcHkgZnJvbSB0aGUgY2FudmFz
IGVsZW1lbnQgZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUKLSAgICAvLyB2aWEgdGhlIEdQVSwgd2l0
aG91dCBhIHJlYWQtYmFjayB0byBzeXN0ZW0gbWVtb3J5LgotICAgIC8vCi0gICAgLy8gRklYTUU6
IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkvVU5TSUdORURfQllURSBzaG91bGQgYmUgbGlm
dGVkIHdoZW4KLSAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGltcGxl
bWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4KLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1cmUgJiYgdHlwZSA9PSB0ZXh0dXJlLT5n
ZXRUeXBlKHRhcmdldCwgbGV2ZWwpCi0gICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpICYmIHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgSW1hZ2VCdWZm
ZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0gICAgICAgIGlmIChidWZmZXIgJiYgYnVm
ZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2Jq
ZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
RmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgdHlw
ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOwotICAgIGlmIChp
bWFnZURhdGEpCi0gICAgICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7Ci0gICAgZWxzZQotICAgICAg
ICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0
eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2Fu
dmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQot
I2lmIEVOQUJMRShWSURFTykKLVBhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEJhY2tpbmdTdG9y
ZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSW50U2l6ZSBz
aXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpKTsKLSAgICBJbWFn
ZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOwot
ICAgIGlmICghYnVmKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBJbnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgLy8gRklYTUU6IFR1cm4gdGhpcyBpbnRv
IGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBvZiBDUFUgcmVhZGJhY2suCi0gICAgdmlk
ZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7
Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tpbmdTdG9yZUNvcHkpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVu
dCgidGV4SW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygi
dGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+
dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gR28gdGhyb3VnaCB0aGUgZmFzdCBwYXRoIGRvaW5nIGEgR1BVLUdQVSB0ZXh0dXJl
cyBjb3B5IHdpdGhvdXQgYSByZWFkYmFjayB0byBzeXN0ZW0gbWVtb3J5IGlmIHBvc3NpYmxlLgot
ICAgIC8vIE90aGVyd2lzZSwgaXQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBTVyBwYXRo
LgotICAgIC8vIEZJWE1FOiBUaGUgY3VycmVudCByZXN0cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZv
cm1hdCBzaG91ZCBiZSBSR0Igb3IgUkdCQSwKLSAgICAvLyB0eXBlIHNob3VsZCBiZSBVTlNJR05F
RF9CWVRFIGFuZCBsZXZlbCBzaG91bGQgYmUgMC4gSXQgbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0
dXJlLgotICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmco
InRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCA9PSB0YXJnZXQgJiYgdGV4dHVyZQotICAgICAgICAmJiAoZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KQotICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0g
ICAgICAgICYmICh0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwp
KQotICAgICAgICAmJiAhbGV2ZWwpIHsKLSAgICAgICAgaWYgKHZpZGVvLT5jb3B5VmlkZW9UZXh0
dXJlVG9QbGF0Zm9ybVRleHR1cmUobV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwg
bGV2ZWwsIHR5cGUsIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrRmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRl
b0hlaWdodCgpLCB0eXBlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUo
KSwgZWMpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICB0ZXhJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQgcGFyYW1mLCBHQzNEaW50IHBhcmFtaSwgYm9vbCBpc0Zsb2F0KQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFBhcmFtZXRlciIsIHRh
cmdldCwgZmFsc2UpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNo
IChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgotICAgICAgICBpZiAo
KGlzRmxvYXQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYm
IHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtZiAh
PSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKQotICAgICAgICAgICAgfHwgKCFpc0Zsb2F0ICYm
IHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJFUEVBVCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoaXNGbG9hdCkgewotICAgICAgICB0ZXgtPnNldFBhcmFtZXRl
cmYocG5hbWUsIHBhcmFtZik7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0YXJn
ZXQsIHBuYW1lLCBwYXJhbWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRleC0+c2V0UGFyYW1l
dGVyaShwbmFtZSwgcGFyYW1pKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRh
cmdldCwgcG5hbWUsIHBhcmFtaSk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQgcGFyYW0pCi17Ci0gICAgdGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIHBhcmFtLCAw
LCB0cnVlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmko
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICB0
ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFyYW0sIGZhbHNlKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1F
OiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCi0gICAgZWMgPSAwOwotICAg
IEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFy
YW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlKSk7Ci0gICAgQVNTRVJUKHZhbGlk
YXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpKTsKLSAgICBBU1NFUlQo
dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCkpOwotICAg
IFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2Uy
RCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpIHsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKCh4b2Zmc2V0ICsg
d2lkdGgpID49IDApOwotICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdodCkgPj0gMCk7Ci0gICAg
QVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhvZmZzZXQgKyB3aWR0aCkp
OwotICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSA+PSAoeW9mZnNldCAr
IGhlaWdodCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpID09IGZvcm1hdCk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9
PSB0eXBlKTsKLSAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBW
ZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0
b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91
bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7ICAK
LSAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1
YkltYWdlMkQiLCAiYmFkIGltYWdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFj
dG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3Ag
YWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwotICAgIGNvbnN0IHZvaWQq
IGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKLQotICAg
IGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYgIWZs
aXBZKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAg
ICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZv
cm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlRXh0cmFj
dG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VFeHRy
YWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4
SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwgIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwgZWMpOwotICAgIGlmICht
X3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFnZTJEIiwgbGV2ZWwsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsTm90QWxsb3dlZCkKLSAgICAgICAg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJj
ZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAw
LCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0gICAg
dm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKLSAgICBWZWN0b3I8dWludDhfdD4g
dGVtcERhdGE7Ci0gICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKLSAgICBp
ZiAoZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7
Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdW5wYWNrQWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKLSAgICAgICAgY2hhbmdlVW5w
YWNrQWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVu
dCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7
Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhl
bFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGln
bm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1h
Z2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsICBwaXhlbHMtPndp
ZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGJv
b2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRh
IGlzIGFsd2F5cyBvZiBmb3JtYXQgUkdCQTguCi0gICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVk
ZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRF
IGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBp
ZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3Jt
YXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAh
PSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIGZv
cm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgp
LT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgidGV4U3Vi
SW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJl
cihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdl
KCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFnZUZv
clJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0KLSAg
ICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQi
LCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBm
b3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1s
RG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZhcywgZWMp
Ci0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFn
ZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52
YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwg
eW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdl
RGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7Ci0gICAgaWYgKGltYWdlRGF0YSkKLSAgICAg
ICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwotICAgIGVsc2UKLSAgICAgICAgdGV4U3ViSW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBj
YW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVO
QUJMRShWSURFTykKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgdmlkZW8s
IGVjKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3Vi
SW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB2
aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBl
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdl
PiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJ
bWFnZU1vZGUoKSwgZWMpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICB0
ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLSNlbmRpZgotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
bG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5v
dCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgMSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCksIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVuaWZvcm0xaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3Jh
bSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKChsb2NhdGlvbi0+dHlwZSgp
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkgJiYgeCA+PSAoaW50KW1fdGV4dHVyZVVu
aXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaSIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobG9jYXRp
b24tPmxvY2F0aW9uKCksIHgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygi
dW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCAxKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9j
YXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdi0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHYtPmRhdGEoKVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNp
emUoKSkpIHsKLSAgICAgICAgICAgICAgICBMT0coV2ViR0wsICJUZXh0dXJlIHVuaXQgc2l6ZT0l
enUsIHZbJWRdPSVkLiBMb2NhdGlvbiB0eXBlID0gJTA0WC4iLCBtX3RleHR1cmVVbml0cy5zaXpl
KCksIGksIHYtPmRhdGEoKVtpXSwgbG9jYXRpb24tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlm
b3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpLCB2LT5kYXRhKCkpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2Nh
dGlvbiwgdiwgc2l6ZSwgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+
dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBl
KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoKChHQzNEaW50Kil2KVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVy
ZVVuaXRzLnNpemUoKSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0
dXJlIHVuaXQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
c2l6ZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTJmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgeCwgeSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkg
LyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigp
LCBzaXplIC8gMiwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkg
LyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
c2l6ZSAvIDIsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNm
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJy
ZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2YiLCAibG9jYXRpb24gbm90IGZvciBjdXJy
ZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+
dW5pZm9ybTNmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCAzKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJv
Z3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNpIiwgImxvY2F0
aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRp
b24sIHYsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2Iiwg
bG9jYXRpb24sIHYsIHNpemUsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQt
PnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdD
M0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3Jh
bSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIDQpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwg
NCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24t
PnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00aSIsICJs
b2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHks
IHosIHcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIs
IGxvY2F0aW9uLCB2LCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlm
b3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHYtPmRhdGEoKSk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9y
bTRpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYs
IDQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHRyYW5zcG9zZSwgdi0+ZGF0YSgp
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdHJh
bnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRpb24s
IHRyYW5zcG9zZSwgdiwgOSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZv
cm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gOSwgdHJhbnNw
b3NlLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0
cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgOSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyA5LCB0cmFuc3Bvc2UsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0
ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0
aCgpIC8gMTYsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIHYpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxl
dGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoInVzZVByb2dyYW0iLCBwcm9ncmFt
LCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBw
cm9ncmFtID0gMDsKLSAgICBpZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVzZVByb2dyYW0iLCAicHJvZ3JhbSBub3QgdmFsaWQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7Ci0g
ICAgICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtKQotICAgICAgICAgICAgbV9jdXJyZW50UHJvZ3Jh
bS0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICAgICAgbV9jdXJyZW50UHJv
Z3JhbSA9IHByb2dyYW07Ci0gICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmplY3RPclpl
cm8ocHJvZ3JhbSkpOwotICAgICAgICBpZiAocHJvZ3JhbSkKLSAgICAgICAgICAgIHByb2dyYW0t
Pm9uQXR0YWNoZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInZhbGlkYXRlUHJvZ3JhbSIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCi17Ci0gICAgdmVydGV4QXR0cmli
ZkltcGwoInZlcnRleEF0dHJpYjFmIiwgaW5kZXgsIDEsIHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVy
dGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIDEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2Iiwg
aW5kZXgsIHYsIHNpemUsIDEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQot
ewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIsIGluZGV4LCAyLCB2MCwg
djEsIDAuMGYsIDEuMGYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCi17Ci0gICAgdmVydGV4
QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgMik7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2
ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgc2l6ZSwgMik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgi
dmVydGV4QXR0cmliM2YiLCBpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZs
b2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNm
diIsIGluZGV4LCB2LCAzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkK
LXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCBz
aXplLCAzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRm
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYy
LCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjRm
IiwgaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQot
ewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIDQp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIHZlcnRleEF0
dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIHNpemUsIDQpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBp
bmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVk
LCBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpCWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQ
b2ludGVyIiwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVy
IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUgPCAwIHx8IHN0cmlkZSA+IDI1NSB8fCBv
ZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQgc2l6ZSwgc3RyaWRl
IG9yIG9mZnNldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9ib3VuZEFy
cmF5QnVmZmVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAibm8gYm91bmQgQVJS
QVlfQlVGRkVSIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRGV0ZXJtaW5lIHRo
ZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhl
IG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCi0gICAgdW5zaWduZWQgaW50IHR5cGVTaXpl
ID0gc2l6ZUluQnl0ZXModHlwZSk7Ci0gICAgaWYgKCF0eXBlU2l6ZSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0
cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zm
c2V0KSAlIHR5cGVTaXplKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgInN0cmlk
ZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiB0eXBlU2l6ZTsKLQotICAg
IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGJ5
dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJyYXlCdWZmZXIpOwotICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3Ry
aWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKCJ2aWV3cG9ydCIs
IHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT52aWV3cG9y
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE1vZGUg
bW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImxv
c2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX2NvbnRleHRHcm91cC0+bG9zZUNvbnRleHRHcm91cChtb2RlKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dExvc3QgPSB0cnVlOwotICAgIG1f
Y29udGV4dExvc3RNb2RlID0gbW9kZTsKLQotICAgIGlmIChtb2RlID09IFJlYWxMb3N0Q29udGV4
dCkgewotICAgICAgICAvLyBJbmZvcm0gdGhlIGVtYmVkZGVyIHRoYXQgYSBsb3N0IGNvbnRleHQg
d2FzIHJlY2VpdmVkLiBJbiByZXNwb25zZSwgdGhlIGVtYmVkZGVyIG1pZ2h0Ci0gICAgICAgIC8v
IGRlY2lkZSB0byB0YWtlIGFjdGlvbiBzdWNoIGFzIGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlz
c2lvbiB0byB1c2UgV2ViR0wgYWdhaW4uCi0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjYW52
YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLmNs
aWVudCgpLmRpZExvc2VXZWJHTENvbnRleHQobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSk7Ci0gICAgfQotCi0gICAgZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBN
YWtlIGFic29sdXRlbHkgc3VyZSB3ZSBkbyBub3QgcmVmZXIgdG8gYW4gYWxyZWFkeS1kZWxldGVk
IHRleHR1cmUgb3IgZnJhbWVidWZmZXIuCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4
dHVyZTJEQmluZGluZygwKTsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZl
ckJpbmRpbmcoMCk7Ci0gICAgfQotCi0gICAgLy8gVGhlcmUgaXMgbm8gZGlyZWN0IHdheSB0byBj
bGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0aW9uIGFuZAotICAgIC8vIGxvb3Bpbmcg
dW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRl
IGxvb3AgaWYKLSAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQgaW1wbGVtZW50YXRpb24gaGFk
IGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKLSAgICAvLyBsYXJnZSBudW1iZXIgb2YgdGlt
ZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDEwMDsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIENv
bnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0gKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0
KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5SW5Db25zb2xlOwotICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wsICJsb3NlQ29u
dGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsKLQotICAgIC8vIERvbid0IGFsbG93IHJl
c3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0IGV2ZW50IGhhcyBib3RoIGJlZW4KLSAg
ICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBwcmV2ZW50ZWQuCi0gICAg
bV9yZXN0b3JlQWxsb3dlZCA9IGZhbHNlOwotCi0gICAgLy8gQWx3YXlzIGRlZmVyIHRoZSBkaXNw
YXRjaCBvZiB0aGUgY29udGV4dCBsb3N0IGV2ZW50LCB0byBpbXBsZW1lbnQKLSAgICAvLyB0aGUg
c3BlYyBiZWhhdmlvciBvZiBxdWV1ZWluZyBhIHRhc2suCi0gICAgbV9kaXNwYXRjaENvbnRleHRM
b3N0RXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpmb3JjZVJlc3RvcmVDb250ZXh0KCkKLXsKLSAgICBpZiAoIWlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IG5vdCBsb3N0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQp
IHsKLSAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFN5bnRoZXRpY0xvc3RDb250ZXh0
KQotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCByZXN0b3JhdGlvbiBub3Qg
YWxsb3dlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc3RvcmVU
aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGxhdGZvcm1MYXll
cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICghaXNDb250ZXh0TG9zdCgpICYmICFtX2lzUGVuZGlu
Z1BvbGljeVJlc29sdXRpb24pID8gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCkgOiAwOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hh
cmVkT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZU9iamVjdChv
YmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkU2hhcmVkT2JqZWN0
KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0
KCkpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRPYmplY3Qob2JqZWN0KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0T2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZENvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOwotICAg
IG1fY29udGV4dE9iamVjdHMuYWRkKG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCkKLXsKLSAgICBpZiAobV9pc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAobV9jb250
ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0T2Jq
ZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdpbigpOwotICAgICAgICAo
Kml0KS0+ZGV0YWNoQ29udGV4dCgpOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RvcCgpCi17Ci0gICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBm
b3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKLSAgICAgICAgZGVzdHJveUdy
YXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdD
M0Rib29sZWFuIHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCAm
dmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUp
KTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9vbGVhbkFy
cmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIGlmIChwbmFtZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLKSB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oMCwgMCk7Ci0gICAgfQotICAgIEdDM0Rib29s
ZWFuIHZhbHVlWzRdID0gezB9OwotICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZh
bHVlKTsKLSAgICBib29sIGJvb2xWYWx1ZVs0XTsKLSAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwg
NDsgKytpaSkKLSAgICAgICAgYm9vbFZhbHVlW2lpXSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVl
W2lpXSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29sVmFsdWUsIDQpOwotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKLXsKLSAgICBHQzNEZmxvYXQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0
RmxvYXR2KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwot
fQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRJbnRQYXJhbWV0ZXIo
R0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZh
bHVlKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7
Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpKTsKLX0KLQotV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdDM0RmbG9hdCB2YWx1ZVs0XSA9IHswfTsKLSAg
ICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpB
TElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfUkFOR0U6Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsK
LX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xJbnRBcnJh
eVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9
OwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
fQotICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5n
dGgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrVGV4dHVyZUNvbXBs
ZXRlbmVzcyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRvRHJhdykKLXsK
LSAgICBib29sIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwotICAgIFdlYkdMVGV4dHVyZTo6VGV4
dHVyZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PFdlYkdMVGV4dHVyZTo6
VGV4dHVyZUV4dGVuc2lvbkZsYWc+KChtX29lc1RleHR1cmVGbG9hdExpbmVhciA/IFdlYkdMVGV4
dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFyRW5hYmxlZCA6IDApIHwgKG1fb2VzVGV4
dHVyZUhhbGZGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkhhbGZG
bG9hdExpbmVhckVuYWJsZWQgOiAwKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlpID0gMDsgaWkg
PCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraWkpIHsKLSAgICAgICAgaWYgKChtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJE
QmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKQotICAgICAgICAgICAg
fHwgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJl
VW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4
dGVuc2lvbnMpKSkgewotICAgICAgICAgICAgaWYgKGlpICE9IG1fYWN0aXZlVGV4dHVyZVVuaXQp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOwotICAgICAg
ICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHJlc2V0QWN0aXZlVW5pdCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4
dHVyZShpaSk7Ci0gICAgICAgICAgICAgICAgcmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleDJEOwotICAgICAgICAgICAg
V2ViR0xUZXh0dXJlKiB0ZXhDdWJlTWFwOwotICAgICAgICAgICAgaWYgKHByZXBhcmVUb0RyYXcp
IHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbXNnKFN0cmluZygidGV4dHVyZSBib3VuZCB0byB0
ZXh0dXJlIHVuaXQgIikgKyBTdHJpbmc6Om51bWJlcihpaSkKLSAgICAgICAgICAgICAgICAgICAg
KyAiIGlzIG5vdCByZW5kZXJhYmxlLiBJdCBtYXliZSBub24tcG93ZXItb2YtMiBhbmQgaGF2ZSBp
bmNvbXBhdGlibGUgdGV4dHVyZSBmaWx0ZXJpbmcgb3IgaXMgbm90ICd0ZXh0dXJlIGNvbXBsZXRl
JywiCi0gICAgICAgICAgICAgICAgICAgICsgIiBvciBpdCBpcyBhIGZsb2F0L2hhbGYtZmxvYXQg
dHlwZSB3aXRoIGxpbmVhciBmaWx0ZXJpbmcgYW5kIHdpdGhvdXQgdGhlIHJlbGV2YW50IGZsb2F0
L2hhbGYtZmxvYXQgbGluZWFyIGV4dGVuc2lvbiBlbmFibGVkLiIpOwotICAgICAgICAgICAgICAg
IHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGZ1bmN0aW9uTmFtZSwgbXNnLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICAgICAgICAgIHRleDJEID0gbV9ibGFja1RleHR1cmUyRC5nZXQoKTsKLSAgICAg
ICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV9ibGFja1RleHR1cmVDdWJlTWFwLmdldCgpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0ZXgyRCA9IG1fdGV4dHVyZVVuaXRz
W2lpXS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOwotICAgICAgICAgICAgICAgIHRleEN1YmVNYXAg
PSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5k
aW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFj
a1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKHRleDJEKSk7
Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGlu
ZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VC
bGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgb2JqZWN0T3JaZXJv
KHRleEN1YmVNYXApKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVzZXRBY3RpdmVVbml0
KQotICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlVW5pdCk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4
dHVyZXMxeDEoKQotewotICAgIHVuc2lnbmVkIGNoYXIgYmxhY2tbXSA9IHswLCAwLCAwLCAyNTV9
OwotICAgIG1fYmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9ibGFja1RleHR1
cmUyRC0+b2JqZWN0KCkpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotICAgIG1fYmxhY2tUZXh0
dXJlQ3ViZU1hcCA9IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBtX2JsYWNrVGV4dHVyZUN1YmVN
YXAtPm9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJs
YWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQLCAwKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4SW50ZXJuYWxG
b3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJuYWxGb3Jt
YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCkKLXsKLSAg
ICB1bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxCaXRzQnlGb3Jt
YXQodGV4SW50ZXJuYWxGb3JtYXQpOwotICAgIHVuc2lnbmVkIGhhdmUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChjb2xvckJ1ZmZlckZvcm1hdCk7Ci0gICAgcmV0
dXJuIChuZWVkICYgaGF2ZSkgPT0gbmVlZDsKLX0KLQotR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKQotewotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsK
LSAgICBpZiAobV9hdHRyaWJ1dGVzLmFscGhhKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkE7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Ci19Ci0KLWlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpCi17Ci0g
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmpl
Y3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZl
cldpZHRoKCk7Ci0gICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+
c2l6ZSgpLndpZHRoKCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCku
d2lkdGgoKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1
ZmZlckhlaWdodCgpCi17Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5nZXRDb2xvckJ1ZmZlckhlaWdodCgpOwotICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIg
PyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJu
YWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotV2ViR0xUZXh0dXJlKiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQotewot
ICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IG51bGxwdHI7Ci0gICAgc3dpdGNoICh0YXJnZXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgotICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGlmICghdXNlU2l4RW51bXNG
b3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0
Iik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBC
aW5kaW5nLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQOgotICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0dXJlID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBp
ZiAoIXRleHR1cmUpCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOwotICAgIHJl
dHVybiB0ZXh0dXJlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVM
b2NhdGlvbkxlbmd0aChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQotewotICAgIGNvbnN0IHVuc2lnbmVkIG1heFdlYkdMTG9jYXRpb25MZW5ndGggPSAyNTY7
Ci0gICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IG1heFdlYkdMTG9jYXRpb25MZW5ndGgpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGxlbmd0aCA+IDI1NiIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4
LCBHQzNEaW50IHkpCi17Ci0gICAgaWYgKHggPCAwIHx8IHkgPCAwKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJzaXplIDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdHJpbmco
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
InN0cmluZyBub3QgQVNDSUkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAg
c3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRl
eHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGggdGV4dHVy
ZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQ6Ci0gICAgICAgIGlmIChtX29lc1RleHR1cmVGbG9hdCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVM6Ci0gICAgICAgIGlmIChtX29lc1RleHR1cmVIYWxmRmxvYXQpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0
aFRleHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgZm9ybWF0
IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxV
TUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0g
ICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAg
ICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAotICAgICAgICAgICAg
JiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBmb3JtYXQiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlw
ZSBmb3IgUkdCIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAg
ICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAg
ICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80
Ci0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzVfNV8xCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0JBIGZv
cm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAg
ICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBlbmFibGVkIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxldmVsID4gMCkgewotICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAibGV2ZWwgbXVzdCBiZSAwIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7
Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Ci0gICAgICAgIGlmICghbV93
ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQu
IERFUFRIX1NURU5DSUwgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UXzI0XzgpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZv
ciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKLSAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNMZXZlbChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkKLXsK
LSAgICBpZiAobGV2ZWwgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA8IDAiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGlmIChsZXZlbCA+PSBt
X21heFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiBy
YW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9aOgotICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVs
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IC8vIFRoaXMgZnVuY3Rpb24gb25seSBjaGVja3MgaWYgbGV2ZWwgaXMgbGVnYWwsIHNvIHdlIHJl
dHVybiB0cnVlIGFuZCBkb24ndAotICAgIC8vIGdlbmVyYXRlIElOVkFMSURfRU5VTSBpZiB0YXJn
ZXQgaXMgaWxsZWdhbC4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlKQotewotICAgIC8vIFdlIGFic29sdXRlbHkgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgZm9y
bWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgotICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGVudHJ5IHBv
aW50cyB0YWtpbmcgSFRNTEltYWdlLCBldGMuIHdpbGwgcHJvZHVjZQotICAgIC8vIHRlbXBvcmFy
eSBkYXRhIGJhc2VkIG9uIHRoaXMgY29tYmluYXRpb24sIHNvIGl0IG11c3QgYmUgbGVnYWwuCi0g
ICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0aW9uTmFtZSwgZm9ybWF0
LCB0eXBlLCBsZXZlbCkgfHwgIXZhbGlkYXRlVGV4RnVuY0xldmVsKGZ1bmN0aW9uTmFtZSwgdGFy
Z2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh3aWR0aCA8IDAg
fHwgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR0MzRGludCBtYXhUZXh0dXJl
U2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwgLSAxIC0gbGV2ZWwpOwot
ICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRDoKLSAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCB8fCBoZWln
aHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lk
dGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBpZiAoZnVuY3Rpb25UeXBl
ICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgaGVpZ2h0IGhl
cmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQuCi0gICAgICAgIC8vIEZvciB0ZXhTdWJJ
bWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5nIHlvZmZzZXQgKyBoZWlnaHQg
aXMgaW4gcmFuZ2UuCi0gICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZv
ciBjdWJlIG1hcCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IGlu
dGVybmFsZm9ybWF0KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0ICE9IGludGVybmFs
Zm9ybWF0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoYm9yZGVy
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3JkZXIgIT0gMCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFy
cmF5QnVmZmVyVmlldyogcGl4ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTnVsbERpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uKQotewotICAgIGlmICgh
cGl4ZWxzKSB7Ci0gICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBOdWxsQWxsb3dlZCkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1h
dEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5h
bWUsIGZvcm1hdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGlm
IChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWlu
dDhBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAg
ICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQxNikgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX1NIT1JUIGJ1dCBBcnJheUJ1ZmZlclZpZXcg
bm90IFVpbnQxNkFycmF5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9F
U190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5
cGVGbG9hdDMyKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgRkxPQVQgYnV0IEFy
cmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKLSAgICAgICAgLy8g
QXMgcGVyIHRoZSBzcGVjaWZpY2F0aW9uLCBBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJlIG51bGwg
d2hlbgotICAgICAgICAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGlzIGVuYWJsZWQuCi0gICAg
ICAgIGlmIChwaXhlbHMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBIQUxGX0ZM
T0FUX09FUyBidXQgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBOVUxMIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IHRv
dGFsQnl0ZXNSZXF1aXJlZDsKLSAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0
ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFja0Fs
aWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7Ci0gICAgaWYgKGVycm9yICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJv
ciwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGRpbWVuc2lvbnMiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3Rh
bEJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpIHsK
LSAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9y
bWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKLSAg
ICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPT0gdG90YWxCeXRlc1JlcXVpcmVkKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3Vn
aCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElHTk1FTlQgPiAxIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9y
bWF0KQotewotICAgIHJldHVybiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250YWlucyhm
b3JtYXQpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVz
c2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyog
cGl4ZWxzKQotewotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhl
bHMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod2lkdGggPCAwIHx8
IGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBieXRlc1Jl
cXVpcmVkID0gMDsKLQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX0FUQ19SR0JfQU1EOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0Owot
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgICAgICBpbnQg
bnVtQmxvY2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRo
OwotICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0
IC0gMSkgLyBrQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxv
Y2tzQWNyb3NzICogbnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJ
VF9BTFBIQV9BTUQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFf
SU5URVJQT0xBVEVEX0FMUEhBX0FNRDoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50
IGtCbG9ja1NpemUgPSAxNjsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7
Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgICAgIGlu
dCBudW1CbG9ja3NBY3Jvc3MgPSAod2lkdGggKyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lk
dGg7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWln
aHQgLSAxKSAvIGtCbG9ja0hlaWdodDsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1C
bG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENf
NEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRD
XzRCUFBWMV9JTUc6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXpl
ID0gODsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDg7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQg
PSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2Nr
SGVpZ2h0KSAqIDQgKyA3KSAvIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1H
OgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAg
ICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSAxNjsKLSAgICAgICAgICAgIGNvbnN0IGlu
dCBrQmxvY2tIZWlnaHQgPSA4OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1h
eCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICog
MiArIDcpIC8ga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpICE9IGJ5dGVzUmVx
dWlyZWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxlbmd0aCBvZiBBcnJheUJ1ZmZlclZpZXcgaXMg
bm90IGNvcnJlY3QgZm9yIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogewotICAgICAgICBj
b25zdCBHQzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICBjb25zdCBHQzNEc2l6ZWkg
a0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgY29uc3QgR0MzRGludCBtYXhUZXh0dXJlU2l6ZSA9
IHRhcmdldCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKLSAg
ICAgICAgY29uc3QgR0MzRHNpemVpIG1heENvbXByZXNzZWREaW1lbnNpb24gPSBtYXhUZXh0dXJl
U2l6ZSA+PiBsZXZlbDsKLSAgICAgICAgYm9vbCB3aWR0aFZhbGlkID0gKGxldmVsICYmIHdpZHRo
ID09IDEpIHx8IChsZXZlbCAmJiB3aWR0aCA9PSAyKSB8fCAoISh3aWR0aCAlIGtCbG9ja1dpZHRo
KSAmJiB3aWR0aCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKLSAgICAgICAgYm9vbCBoZWln
aHRWYWxpZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0gMSkgfHwgKGxldmVsICYmIGhlaWdodCA9PSAy
KSB8fCAoIShoZWlnaHQgJSBrQmxvY2tIZWlnaHQpICYmIGhlaWdodCA8PSBtYXhDb21wcmVzc2Vk
RGltZW5zaW9uKTsKLSAgICAgICAgaWYgKCF3aWR0aFZhbGlkIHx8ICFoZWlnaHRWYWxpZCkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBmb3IgbGV2
ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BW
UlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BW
UlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9Q
VlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
UFZSVENfMkJQUFYxX0lNRzoKLSAgICAgICAgLy8gSGVpZ2h0IGFuZCB3aWR0aCBtdXN0IGJlIHBv
d2VycyBvZiAyLgotICAgICAgICBpZiAoKHdpZHRoICYgKHdpZHRoIC0gMSkpIHx8IChoZWlnaHQg
JiAoaGVpZ2h0IC0gMSkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhl
aWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBXZWJHTFRleHR1cmUqIHRleCkKLXsKLSAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9m
ZnNldCA8IDApIHsKLSAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgPCAwIik7Ci0g
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogewotICAgICAgICBjb25z
dCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0g
NDsKLSAgICAgICAgaWYgKCh4b2Zmc2V0ICUga0Jsb2NrV2lkdGgpIHx8ICh5b2Zmc2V0ICUga0Js
b2NrSGVpZ2h0KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZz
ZXQgbm90IG11bHRpcGxlIG9mIDQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAod2lkdGggLSB4b2Zmc2V0ID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQs
IGxldmVsKQotICAgICAgICAgICAgfHwgaGVpZ2h0IC0geW9mZnNldCA+IHRleC0+Z2V0SGVpZ2h0
KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rpb25OYW1l
LCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOwotICAgIH0KLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOiB7Ci0gICAg
ICAgIGlmICh4b2Zmc2V0IHx8IHlvZmZzZXQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
eG9mZnNldCBhbmQgeW9mZnNldCBtdXN0IGJlIHplcm8iKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAod2lkdGggIT0gdGV4LT5nZXRXaWR0aCh0YXJn
ZXQsIGxldmVsKQotICAgICAgICAgICAgfHwgaGVpZ2h0ICE9IHRleC0+Z2V0SGVpZ2h0KHRhcmdl
dCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgbXVzdCBt
YXRjaCBleGlzdGluZyBsZXZlbCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0
aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICB9Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
X1NUUklQOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
UklBTkdMRV9TVFJJUDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU46
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGRyYXcgbW9kZSIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
KQotewotICAgIGlmIChtX3N0ZW5jaWxNYXNrICE9IG1fc3RlbmNpbE1hc2tCYWNrIHx8IG1fc3Rl
bmNpbEZ1bmNSZWYgIT0gbV9zdGVuY2lsRnVuY1JlZkJhY2sgfHwgbV9zdGVuY2lsRnVuY01hc2sg
IT0gbV9zdGVuY2lsRnVuY01hc2tCYWNrKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQg
YW5kIGJhY2sgc3RlbmNpbHMgc2V0dGluZ3MgZG8gbm90IG1hdGNoIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gZnVuYykKLXsKLSAgICBzd2l0Y2ggKGZ1bmMpIHsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpORVZFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMRVNTOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpHUkVBVEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFUVVBTDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpOT1RFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFdBWVM6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZnVu
Y3Rpb24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLS1tX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKLSAgICBwcmlu
dFdhcm5pbmdUb0NvbnNvbGUobWVzc2FnZSk7Ci0KLSAgICBpZiAoIW1fbnVtR0xFcnJvcnNUb0Nv
bnNvbGVBbGxvd2VkKQotICAgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoIldlYkdMOiB0b28g
bWFueSBlcnJvcnMsIG5vIG1vcmUgZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWQgdG8gdGhlIGNvbnNv
bGUgZm9yIHRoaXMgY29udGV4dC4iKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYg
KCFjYW52YXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNhbnZhcygpLT5kb2N1bWVudCgpLmFk
ZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlJlbmRlcmluZywgTWVzc2FnZUxldmVsOjpX
YXJuaW5nLCBtZXNzYWdlKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCkKLXsKLSAgICBpZiAodGFyZ2V0ICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHN3aXRjaCAo
YXR0YWNobWVudCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycwotICAgICAgICAg
ICAgJiYgYXR0YWNobWVudCA+IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMAot
ICAgICAgICAgICAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkp
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVu
dCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX0FERDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGVU5DX1NVQlRSQUNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5k
RnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0Rl
bnVtIGRzdCkKLXsKLSAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5U
X0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0NP
TE9SKQotICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQ
SEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEp
KQotICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1Ig
fHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCi0g
ICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8
fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNyYyBhbmQgZHN0Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBjYXApCi17Ci0gICAgc3dpdGNoIChjYXApIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxM
X0ZBQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9MWUdPTl9PRkZTRVRfRklMTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVf
QUxQSEFfVE9fQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NP
VkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgY2FwYWJpbGl0eSIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBH
QzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAgIGlmICghdikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9u
LCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1
bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1
aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXpl
aSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYsIHNpemUsIHJlcXVpcmVk
TWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJB
cnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAgICBpZiAoIXYpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1l
LCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1p
blNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3Jt
TWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAgICBpZiAoIWxv
Y2F0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFt
KCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9u
IGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIGlmICghdikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAodHJhbnNwb3NlKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwgKHNpemUgJSByZXF1aXJlZE1p
blNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotV2ViR0xCdWZmZXIqIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpCi17Ci0g
ICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgYnVm
ZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKS5n
ZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSOgotICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0
Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBpZiAoIWJ1ZmZlcikgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgc3dpdGNoICh1c2FnZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUUkVBTV9EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFX
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVzoKLSAgICAgICAgcmV0
dXJuIGJ1ZmZlcjsKLSAgICB9Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB1c2FnZSIpOwotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVI
VE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVu
dCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghaW1hZ2UgfHwgIWltYWdl
LT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBpbWFnZSIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0IFVSTCYgdXJsID0gaW1hZ2UtPmNhY2hl
ZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7Ci0gICAgaWYgKHVybC5pc051bGwoKSB8fCB1cmwu
aXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IGltYWdlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHdvdWxkVGFp
bnRPcmlnaW4oaW1hZ2UpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJubyBjYW52YXMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAo
d291bGRUYWludE9yaWdpbihjYW52YXMpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYg
RU5BQkxFKFZJREVPKQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSFRNTFZp
ZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlk
ZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bm8gdmlkZW8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod291bGRU
YWludE9yaWdpbih2aWRlbykpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW5kZXgg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gSW4gR0wsIHdl
IHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KLSAgICBpZiAoaW5kZXggfHwgaXNH
TEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRTaXplKSB7Ci0gICAg
ICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWYoaW5kZXgs
IHYwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
M2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
NDoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwg
djIsIHYzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIFZlcnRl
eEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0cmliVmFsdWVbaW5kZXhdOwot
ICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7Ci0gICAgYXR0cmliVmFsdWUudmFsdWVbMV0g
PSB2MTsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOwotICAgIGF0dHJpYlZhbHVlLnZh
bHVlWzNdID0gdjM7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgRmxvYXQz
MkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQotewotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXYpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdmVydGV4
QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCks
IGV4cGVjdGVkU2l6ZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSkKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0g
bV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFu
Z2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0
aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxp
YW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKLSAgICAgICAgY2FzZSAx
OgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHYpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIG1fY29udGV4dC0+
dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIDM6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmRleCwgdik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0
ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0cmliVmFsdWUuaW5pdFZhbHVlKCk7Ci0gICAg
Zm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytpaSkKLSAgICAgICAgYXR0cmli
VmFsdWUudmFsdWVbaWldID0gdltpaV07Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppbml0VmVydGV4QXR0cmliMCgpCi17Ci0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKLSAgICAKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBj
cmVhdGVCdWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmplY3QoKSk7Ci0gICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOwotICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAw
KTsKLSAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOwotICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAw
KTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOwotICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVl
WzBdID0gMC4wZjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXSA9IDAuMGY7Ci0g
ICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBmOwotICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKLSAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmls
bCA9IGZhbHNlOwotICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSBmYWxzZTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVydGV4QXR0cmliMChHQzNEc2l6
ZWkgbnVtVmVydGV4KQotewotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVy
dGV4QXR0cmliU3RhdGUoMCk7Ci0gICAgY29uc3QgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZh
bHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKLSAgICBpZiAoIW1fY3VycmVudFByb2dyYW0p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIHVzaW5nVmVydGV4QXR0cmliMCA9IG1f
Y3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7Ci0gICAgaWYgKHVzaW5nVmVy
dGV4QXR0cmliMCkKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IHRydWU7Ci0g
ICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0ZXhBdHRyaWIwKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAgJiYgIW1fdmVydGV4QXR0cmli
MFVzZWRCZWZvcmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3ZlcnRleEF0dHJpYjBV
c2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmplY3QoKSk7Ci0g
ICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZlcnRleCArIDEpICogNCAqIHNp
emVvZihHQzNEZmxvYXQpOwotICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+IG1fdmVydGV4QXR0cmli
MEJ1ZmZlclNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IGJ1
ZmZlckRhdGFTaXplOwotICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IHRydWU7
Ci0gICAgfQotICAgIGlmICh1c2luZ1ZlcnRleEF0dHJpYjAKLSAgICAgICAgJiYgKG1fZm9yY2VB
dHRyaWIwQnVmZmVyUmVmaWxsCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVswXSAh
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQotICAgICAgICAgICAgfHwgYXR0cmliVmFs
dWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0KLSAgICAgICAgICAg
IHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJd
Ci0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVszXSAhPSBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVszXSkpIHsKLSAgICAgICAgYXV0byBidWZmZXJEYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7Ci0gICAgICAgIGZvciAoR0Mz
RHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lpKSB7Ci0gICAgICAgICAgICBi
dWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVswXTsKLSAgICAgICAgICAgIGJ1
ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsxXTsKLSAgICAgICAgICAg
IGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsyXTsKLSAgICAgICAg
ICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRyaWJWYWx1ZS52YWx1ZVszXTsKLSAgICAg
ICAgfQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IGF0dHJpYlZhbHVl
LnZhbHVlWzBdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXSA9IGF0dHJp
YlZhbHVlLnZhbHVlWzFdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9
IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwotICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZl
clJlZmlsbCA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEoR3JhcGhp
Y3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0YVNpemUsIGJ1ZmZlckRhdGEu
Z2V0KCkpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgNCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0
dHJpYjBTaW11bGF0aW9uKCkKLXsKLSAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nICE9IG1f
dmVydGV4QXR0cmliMEJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKHN0YXRlLmJ1ZmZlckJp
bmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAs
IHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFs
U3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKG1fYm91bmRBcnJh
eUJ1ZmZlci5nZXQoKSkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KCkKLXsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2
ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0
bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOwotICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50
KGV2ZW50KTsKLSAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKLSAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExvc3RDb250ZXh0ICYmIG1fcmVz
dG9yZUFsbG93ZWQpCi0gICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQoKQotewot
ICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKLSAgICBpZiAoIW1fY29udGV4dExvc3QpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9y
ZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZQotICAgIC8vIHdlYmdsY29udGV4
dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgotICAgIC8vCi0gICAgLy8gQmVjYXVz
ZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1cCBmb3IgcmVhbCB2cy4gc3ludGhl
dGljIGxvc3QKLSAgICAvLyBjb250ZXh0IGV2ZW50cywgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBh
Ym91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZwotICAgIC8vIHRoZSByZXRyeSBsb29wIGZv
ciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCi0gICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgY29udGV4dExvc3RSZWFzb24gPSBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOwotCi0gICAgc3dp
dGNoIChjb250ZXh0TG9zdFJlYXNvbikgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SOgotICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24g
bWlnaHQgbm90IGZ1bGx5Ci0gICAgICAgIC8vIHN1cHBvcnQgR0xfQVJCX3JvYnVzdG5lc3Mgc2Vt
YW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCi0gICAgICAgIC8vIFdFQkdMX2xvc2VfY29u
dGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVzZWQgdG8gZm9yY2UKLSAgICAgICAgLy8g
YSBsb3N0IGNvbnRleHQuCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpH
VUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6Ci0gICAgICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4
dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0IHdhcwotICAgICAgICAvLyBndWlsdHkg
b2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCi0gICAgICAgIHByaW50V2FybmluZ1RvQ29u
c29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFnZSBjYXVzZWQgdGhlIGdyYXBo
aWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3JpbmcgdGhlIGNvbnRleHQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJTk5PQ0VOVF9DT05URVhUX1JFU0VUX0FS
QjoKLSAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBjb250ZXh0IHRvIGJlIHJlc3RvcmVkLgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VU5LTk9XTl9DT05URVhUX1JF
U0VUX0FSQjoKLSAgICAgICAgLy8gV2Fybi4gSWRlYWxseSwgcHJvbXB0IHRoZSB1c2VyIHRlbGxp
bmcgdGhlbSB0aGF0IFdlYkdMCi0gICAgICAgIC8vIGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQg
aGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8KLSAgICAgICAgLy8gcmVzZXQgYW5kIGFz
ayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRpbnVlIHJ1bm5pbmcKLSAgICAgICAgLy8g
dGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInllcyIgc2hvdWxkIHdlIHN0YXJ0Ci0gICAg
ICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgY29udGV4dC4KLSAgICAgICAgcHJpbnRX
YXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50IG9uIHRoZSBwYWdlIG1pZ2h0
IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0Iik7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLmZyYW1l
KCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFmcmFtZS0+
bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJs
ZWQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52
aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0gICAgU2Nyb2xsVmlldyog
cm9vdCA9IHZpZXctPnJvb3QoKTsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsKLSAg
ICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdpbmRvdygpOwotICAgIGlmICgh
aG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUobV9hdHRyaWJ1dGVzLCBob3N0
V2luZG93KSk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHRMb3N0
TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCi0gICAgICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFy
dE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBpcyB0aGUgYmVz
dCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCi0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICIiLCAiZXJy
b3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250
ZXh0M0QuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKLSAgICAgICAgRHJhd2luZ0J1ZmZlcjo6UHJlc2VydmVE
cmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZl
ciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJhd2luZ0J1ZmZlcjo6RGlzY2FyZDsKLSAg
ICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJlbWVudCBhbHBoYSA9IG1fYXR0cmlidXRl
cy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDogRHJhd2luZ0J1ZmZlcjo6T3BhcXVlOwot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoY29udGV4dC5n
ZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHByZXNlcnZlLCBhbHBoYSk7Ci0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0KLQotICAgIG1fY29udGV4dCA9IGNvbnRl
eHQ7Ci0gICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwotICAgIHNldHVwRmxhZ3MoKTsKLSAgICBp
bml0aWFsaXplTmV3Q29udGV4dCgpOwotICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KFdlYkdM
Q29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dHJlc3RvcmVkRXZl
bnQsIGZhbHNlLCB0cnVlLCAiIikpOwotfQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4dCkgY29uc3QKLXsKLSAgICBpZiAodGV4
dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1
cm4gdGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hl
OjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKLSAgICA6IG1fYnVmZmVycyhzdGQ6
Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5bXT4oY2FwYWNpdHkpKQot
ICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKLXsKLX0KLQotSW1hZ2VCdWZmZXIqIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKLXsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9jYXBhY2l0
eTsgKytpKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICghYnVmKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChidWYt
PmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBi
dWJibGVUb0Zyb250KGkpOwotICAgICAgICByZXR1cm4gYnVmOwotICAgIH0KLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
MSk7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpID0gc3Rk
OjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwotICAgIG1fYnVmZmVyc1tpXSA9IFdURjo6bW92ZSh0
ZW1wKTsKLQotICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7Ci0gICAg
YnViYmxlVG9Gcm9udChpKTsKLSAgICByZXR1cm4gYnVmOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxlVG9Gcm9udChpbnQgaWR4KQot
ewotICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCi0gICAgICAgIG1fYnVmZmVyc1tp
XS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKLX0KLQotbmFtZXNwYWNlIHsKLQotICAgIFN0cmluZyBH
ZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZXJy
b3IpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNOgotICAg
ICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX1ZBTFVF
IjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT046Ci0g
ICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9OIjsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKLSAgICAgICAgICAgIHJldHVybiAiT1VUX09G
X01FTU9SWSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTiI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9T
VF9XRUJHTDoKLSAgICAgICAgICAgIHJldHVybiAiQ09OVEVYVF9MT1NUX1dFQkdMIjsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiV2ViR0wgRVJS
T1IoJTA0eCkiLCBlcnJvcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0gLy8gbmFtZXNwYWNlIGFu
b255bW91cwotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3ludGhlc2l6ZUdMRXJyb3Io
R0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVz
Y3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5KQotewotICAgIGlmICht
X3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRpc3BsYXkgPT0gRGlzcGxheUluQ29uc29s
ZSkgewotICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsgR2V0RXJyb3JTdHJp
bmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1lKSArICI6ICIgKyBTdHJpbmco
ZGVzY3JpcHRpb24pOwotICAgICAgcHJpbnRHTEVycm9yVG9Db25zb2xlKHN0cik7Ci0gICAgfQot
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwotfQotCi0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29uc29sZShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQotewotICAgIGlmIChtX3N5bnRo
ZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmcoIldl
YkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlv
bik7Ci0gICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIpOwotICAgIH0KLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRlc3QoKQotewotICAgIGJvb2wg
aGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKLQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZykKLSAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+aGFz
U3RlbmNpbEJ1ZmZlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8V2ViR0xDb250ZXh0
QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgICAg
IGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+c3RlbmNpbCgpOwotICAgIH0KLSAgICBl
bmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCwKLSAgICAgICAg
ICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3RlbmNpbEJ1ZmZlcik7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2Fw
YWJpbGl0eSwgYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSkKLSAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7Ci0gICAgZWxzZQotICAgICAgICBtX2NvbnRleHQtPmRp
c2FibGUoY2FwYWJpbGl0eSk7Ci19Ci0KLUludFNpemUgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
bGFtcGVkQ2FudmFzU2l6ZSgpCi17Ci0gICAgcmV0dXJuIEludFNpemUoY2xhbXAoY2FudmFzKCkt
PndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBdKSwKLSAgICAgICAgICAgICAgICAgICBj
bGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzFdKSk7Ci19Ci0K
LUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhEcmF3QnVmZmVycygpCi17Ci0g
ICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlm
ICghbV9tYXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRl
bnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhEcmF3QnVmZmVycyk7Ci0gICAg
aWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0
dGFjaG1lbnRzKTsKLSAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMgcmVxdWlyZXMgTUFYX0NPTE9S
X0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCi0gICAgcmV0dXJuIHN0ZDo6bWluKG1f
bWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7Ci19Ci0KLUdDM0RpbnQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKLXsKLSAgICBpZiAo
IXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX21h
eENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5z
aW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRz
KTsKLSAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVudW0gYnVmKQotewotICAgIG1f
YmFja0RyYXdCdWZmZXIgPSBidWY7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKLXsKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAg
IGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCi17Ci0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAg
ICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlVW5p
dHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSwgZWMpOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNEcmF3QnVmZmVycygpCi17Ci0g
ICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkKSB7Ci0gICAgICAg
IG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSB0cnVlOwotICAgICAgICBt
X2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKHRoaXMp
OwotICAgIH0KLSAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1N1cHBvcnRlZDsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwg
R0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewot
ICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgbW9kZSwg
Zmlyc3QsIGNvdW50LCBwcmltY291bnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJp
bWNvdW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImRyYXdBcnJheXNJbnN0YW5jZWQiLCAicHJpbWNvdW50IDwgMCIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFwcmltY291bnQpIHsKLSAgICAg
ICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
bGVhcklmQ29tcG9zaXRlZCgpOwotCi0gICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
ZmFsc2U7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwot
ICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxl
dGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgdHJ1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBy
aW1jb3VudCk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0
LCBjb3VudCwgcHJpbWNvdW50KTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0
ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRy
aWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgZmFsc2UpOwot
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsK
LSAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7Ci0gICAgaWYgKCF2YWxpZGF0ZURyYXdFbGVt
ZW50cygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgbW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwg
bnVtRWxlbWVudHMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJpbWNvdW50IDwgMCkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImRyYXdFbGVtZW50c0luc3RhbmNlZCIsICJwcmltY291bnQgPCAwIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXByaW1jb3VudCkgewotICAgICAgICBtYXJrQ29u
dGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNsZWFySWZDb21w
b3NpdGVkKCk7Ci0KLSAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQot
ICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGlj
X2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpOwotICAgICAgICB2ZXJ0ZXhB
dHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKLSAg
ICB9Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVD
b21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIHRydWUpOwotICAgIG1fY29udGV4
dC0+ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpLCBwcmltY291bnQpOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRl
clZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgp
KQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNl
ZCIsIGZhbHNlKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1
aW50IGRpdmlzb3IpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InZlcnRleEF0dHJpYkRpdmlzb3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0
dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
RGl2aXNvcihpbmRleCwgZGl2aXNvcik7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMTc2OTk0KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDox
NzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRfaAorI2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAorCisjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgor
I2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRl
ICJXZWJHTEdldEluZm8uaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8cnVudGltZS9G
bG9hdDMyQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBB
TkdMRUluc3RhbmNlZEFycmF5czsKK2NsYXNzIEVYVEJsZW5kTWluTWF4OworY2xhc3MgRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljOworY2xhc3MgRVhUU2hhZGVyVGV4dHVyZUxPRDsKK2NsYXNz
IEVYVHNSR0I7CitjbGFzcyBFWFRGcmFnRGVwdGg7CitjbGFzcyBIVE1MSW1hZ2VFbGVtZW50Owor
Y2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VE
YXRhOworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM7CitjbGFz
cyBPRVNUZXh0dXJlRmxvYXQ7CitjbGFzcyBPRVNUZXh0dXJlRmxvYXRMaW5lYXI7CitjbGFzcyBP
RVNUZXh0dXJlSGFsZkZsb2F0OworY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKK2Ns
YXNzIE9FU1ZlcnRleEFycmF5T2JqZWN0OworY2xhc3MgT0VTRWxlbWVudEluZGV4VWludDsKK2Ns
YXNzIFdlYkdMQWN0aXZlSW5mbzsKK2NsYXNzIFdlYkdMQnVmZmVyOworY2xhc3MgV2ViR0xDb250
ZXh0R3JvdXA7CitjbGFzcyBXZWJHTENvbnRleHRPYmplY3Q7CitjbGFzcyBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDOworY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOworY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM7CitjbGFzcyBXZWJHTENvbnRleHRBdHRyaWJ1dGVz
OworY2xhc3MgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzsKK2NsYXNzIFdlYkdMRGVidWdTaGFkZXJz
OworY2xhc3MgV2ViR0xEZXB0aFRleHR1cmU7CitjbGFzcyBXZWJHTERyYXdCdWZmZXJzOworY2xh
c3MgV2ViR0xFeHRlbnNpb247CitjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOworY2xhc3MgV2ViR0xM
b3NlQ29udGV4dDsKK2NsYXNzIFdlYkdMT2JqZWN0OworY2xhc3MgV2ViR0xQcm9ncmFtOworY2xh
c3MgV2ViR0xSZW5kZXJidWZmZXI7CitjbGFzcyBXZWJHTFNoYWRlcjsKK2NsYXNzIFdlYkdMU2hh
cmVkT2JqZWN0OworY2xhc3MgV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ7CitjbGFzcyBXZWJH
TFRleHR1cmU7CitjbGFzcyBXZWJHTFVuaWZvcm1Mb2NhdGlvbjsKK2NsYXNzIFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0
LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50Kiwg
V2ViR0xDb250ZXh0QXR0cmlidXRlcyopOworICAgIHZpcnR1YWwgfldlYkdMUmVuZGVyaW5nQ29u
dGV4dCgpOworCisgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisjaWYgUExBVEZPUk0oV0lOKQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYWNj
ZWxlcmF0ZWQgM2QgY2FudmFzIG9uIFdpbmRvd3MuCisgICAgdmlydHVhbCBib29sIGlzQWNjZWxl
cmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorI2Vsc2UKKyAgICB2aXJ0
dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
KyNlbmRpZgorCisgICAgaW50IGRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0OworICAgIGludCBk
cmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3Q7CisKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYXR0YWNoU2hhZGVyKFdl
YkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmlu
ZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBXZWJHTEJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJpbmRGcmFt
ZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5k
ZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51
bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJsZW5k
Q29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0Mz
RGZsb2F0IGFscGhhKTsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSk7Cisg
ICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0g
bW9kZUFscGhhKTsKKyAgICB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51
bSBkZmFjdG9yKTsKKyAgICB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwg
R0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpOwor
CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUsIEdD
M0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJW
aWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYnVm
ZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVy
KiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVt
IHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRp
b25Db2RlJik7CisKKyAgICBHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVt
IHRhcmdldCk7CisgICAgdm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzayk7CisgICAgdm9pZCBj
bGVhckNvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0IGJsdWUs
IEdDM0RmbG9hdCBhbHBoYSk7CisgICAgdm9pZCBjbGVhckRlcHRoKEdDM0RmbG9hdCk7CisgICAg
dm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCk7CisgICAgdm9pZCBjb2xvck1hc2soR0MzRGJvb2xl
YW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4g
YWxwaGEpOworICAgIHZvaWQgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNv
ZGUmKTsKKworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSk7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVy
VmlldyogZGF0YSk7CisKKyAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKTsK
KyAgICB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworCisgICAgUGFzc1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4gY3JlYXRlQnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVm
ZmVyPiBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBj
cmVhdGVQcm9ncmFtKCk7CisgICAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRl
UmVuZGVyYnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gY3JlYXRlU2hhZGVy
KEdDM0RlbnVtIHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4gY3JlYXRlVGV4dHVyZSgpOworCisgICAgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2Rl
KTsKKworICAgIHZvaWQgZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKik7CisgICAgdm9pZCBkZWxl
dGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7CisgICAgdm9pZCBkZWxldGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSopOworICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVy
YnVmZmVyKik7CisgICAgdm9pZCBkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKyAgICB2b2lk
IGRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlKik7CisKKyAgICB2b2lkIGRlcHRoRnVuYyhHQzNE
ZW51bSk7CisgICAgdm9pZCBkZXB0aE1hc2soR0MzRGJvb2xlYW4pOworICAgIHZvaWQgZGVwdGhS
YW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKTsKKyAgICB2b2lkIGRldGFjaFNo
YWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKTsKKyAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJhd0FycmF5
cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsK
KworICAgIHZvaWQgZW5hYmxlKEdDM0RlbnVtIGNhcCk7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZmlu
aXNoKCk7CisgICAgdm9pZCBmbHVzaCgpOworICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJi
dWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSosIEdDM0RpbnQgbGV2ZWwsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGZyb250RmFjZShHQzNEZW51bSBtb2RlKTsKKyAgICB2
b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCk7CisKKyAgICBQYXNzUmVmUHRyPFdl
YkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGlu
ZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdl
dEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBib29sIGdldEF0dGFjaGVkU2hhZGVycyhXZWJHTFByb2dyYW0qLCBWZWN0b3I8
UmVmUHRyPFdlYkdMU2hhZGVyPj4mLCBFeGNlcHRpb25Db2RlJik7CisgICAgR0MzRGludCBnZXRB
dHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIFdl
YkdMR2V0SW5mbyBnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmli
dXRlcz4gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBHQzNEZW51bSBnZXRFcnJvcigpOwor
ICAgIFdlYkdMRXh0ZW5zaW9uKiBnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAg
ICBXZWJHTEdldEluZm8gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQ
cm9ncmFtKiwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgZ2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdM
R2V0SW5mbyBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdMR2V0SW5mbyBnZXRTaGFkZXJQYXJh
bWV0ZXIoV2ViR0xTaGFkZXIqLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IGdldFNoYWRlclByZWNp
c2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBF
eGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIGdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlcios
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNp
b25zKCk7CisgICAgV2ViR0xHZXRJbmZvIGdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFVu
aWZvcm0oV2ViR0xQcm9ncmFtKiwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBFeGNlcHRp
b25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gZ2V0VW5pZm9y
bUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBXZWJHTEdldEluZm8gZ2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIGxvbmcgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJP
ZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKTsKKworICAgIHZvaWQgaGludChH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpOworICAgIEdDM0Rib29sZWFuIGlzQnVmZmVy
KFdlYkdMQnVmZmVyKik7CisgICAgYm9vbCBpc0NvbnRleHRMb3N0KCkgY29uc3Q7CisgICAgR0Mz
RGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNhcCk7CisgICAgR0MzRGJvb2xlYW4gaXNGcmFt
ZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7CisgICAgR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFdl
YkdMUHJvZ3JhbSopOworICAgIEdDM0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVy
YnVmZmVyKik7CisgICAgR0MzRGJvb2xlYW4gaXNTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKyAgICBH
QzNEYm9vbGVhbiBpc1RleHR1cmUoV2ViR0xUZXh0dXJlKik7CisKKyAgICB2b2lkIGxpbmVXaWR0
aChHQzNEZmxvYXQpOworICAgIHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQg
cGFyYW0pOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxv
YXQgdW5pdHMpOworICAgIHZvaWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2
YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KTsKKyAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAgdm9pZCBz
aGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVp
bnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdD
M0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5j
aWxNYXNrKEdDM0R1aW50KTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0g
ZmFjZSwgR0MzRHVpbnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51
bSB6cGFzcyk7CisKKyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZp
ZXcqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKKworICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pOworICAgIHZvaWQg
dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBh
cmFtKTsKKworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
RGF0YSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBI
VE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2lmIEVOQUJM
RShWSURFTykKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50
KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKyAgICB2b2lkIHVuaWZvcm0xZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3Jt
MWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTFpKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTFp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMmYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
ZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlm
b3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0
MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTNmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00
Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtNGZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwg
R0MzRGludCB3LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5z
cG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Ri
b29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSog
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
M0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2
b2lkIHVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZv
aWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KTsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVl
cywgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
R0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXpl
KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmli
M2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVy
dGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVp
IHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0Mz
RGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0
LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworCisgICAgLy8gV0VCS0lU
X2xvc2VfY29udGV4dCBzdXBwb3J0CisgICAgZW51bSBMb3N0Q29udGV4dE1vZGUgeworICAgICAg
ICAvLyBMb3N0IGNvbnRleHQgb2NjdXJyZWQgYXQgdGhlIGdyYXBoaWNzIHN5c3RlbSBsZXZlbC4K
KyAgICAgICAgUmVhbExvc3RDb250ZXh0LAorCisgICAgICAgIC8vIExvc3QgY29udGV4dCBwcm92
b2tlZCBieSBXRUJLSVRfbG9zZV9jb250ZXh0LgorICAgICAgICBTeW50aGV0aWNMb3N0Q29udGV4
dAorICAgIH07CisgICAgdm9pZCBmb3JjZUxvc3RDb250ZXh0KExvc3RDb250ZXh0TW9kZSk7Cisg
ICAgdm9pZCBmb3JjZVJlc3RvcmVDb250ZXh0KCk7CisgICAgdm9pZCBsb3NlQ29udGV4dEltcGwo
TG9zdENvbnRleHRNb2RlKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRl
eHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIFdlYkdMQ29udGV4
dEdyb3VwKiBjb250ZXh0R3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRHcm91cC5nZXQo
KTsgfQorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAg
ICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKSBvdmVycmlkZTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKworICAgIHZvaWQgcmVtb3Zl
U2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0
T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOworICAgIAorICAgIHVuc2lnbmVkIGdldE1heFZl
cnRleEF0dHJpYnMoKSBjb25zdCB7IHJldHVybiBtX21heFZlcnRleEF0dHJpYnM7IH0KKworICAg
IC8vIEFOR0xFX2luc3RhbmNlZF9hcnJheXMgZXh0ZW5zaW9uIGZ1bmN0aW9ucy4KKyAgICB2b2lk
IGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
emVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKKyAgICB2b2lkIGRyYXdFbGVtZW50c0lu
c3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxv
bmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpOworICAgIHZvaWQgdmVydGV4QXR0
cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcik7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMRHJhd0J1ZmZlcnM7CisgICAgZnJpZW5kIGNsYXNzIFdl
YkdMRnJhbWVidWZmZXI7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMT2JqZWN0OworICAgIGZyaWVu
ZCBjbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xEZWJ1
Z1NoYWRlcnM7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM7Cisg
ICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzsKKyAgICBmcmllbmQg
Y2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrOworICAgIGZyaWVuZCBjbGFzcyBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOworCisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhU
TUxDYW52YXNFbGVtZW50KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOworICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CisgICAgdm9pZCBp
bml0aWFsaXplTmV3Q29udGV4dCgpOworICAgIHZvaWQgc2V0dXBGbGFncygpOworCisgICAgLy8g
QWN0aXZlRE9NT2JqZWN0CisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gIldlYkdMUmVuZGVyaW5nQ29udGV4dCI7IH0KKworICAgIHZvaWQgYWRkU2hhcmVkT2Jq
ZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdM
Q29udGV4dE9iamVjdCopOworICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwor
CisgICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB2b2lkIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOworCisgICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBvbiB0b3Ag
b2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9uLgorICAgIGJvb2wgaXNHTEVTMkNvbXBs
aWFudCgpIHsgcmV0dXJuIG1faXNHTEVTMkNvbXBsaWFudDsgfQorICAgIC8vIFF1ZXJ5IGlmIHRo
ZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KKyAgICBib29sIGlzR0xFUzJOUE9U
U3RyaWN0KCkgeyByZXR1cm4gbV9pc0dMRVMyTlBPVFN0cmljdDsgfQorICAgIC8vIFF1ZXJ5IGlm
IHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1vZi1ib3VuZHMg
YnVmZmVyIGFjY2Vzc2VzLgorICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNB
Y2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
czsgfQorICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0aWFsaXplcyB0
ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCisgICAgYm9vbCBpc1Jlc291cmNlU2FmZSgpIHsg
cmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7IH0KKyAgICAvLyBRdWVyeSBpZiBkZXB0aF9zdGVuY2ls
IGJ1ZmZlciBpcyBzdXBwb3J0ZWQuCisgICAgYm9vbCBpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgp
IHsgcmV0dXJuIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7IH0KKworICAgIC8vIEhlbHBlciB0
byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKKyAgICAvLyBs
aWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KKyAgICB1bnNpZ25lZCBpbnQgc2l6ZUluQnl0ZXMo
R0MzRGVudW0gdHlwZSk7CisKKyAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIGNvdW50IGFuZCBv
ZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVudCBhcnJheSBidWZmZXIK
KyAgICBib29sIHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKKworICAgIC8vIENvbnNlcnZhdGl2ZSBidXQg
cXVpY2sgaW5kZXggdmFsaWRhdGlvbgorICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29uc2Vy
dmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKKwor
ICAgIC8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlvbiAtLSBvbmx5IGRvbmUgaWYg
Y29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCisgICAgYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlQcmVj
aXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVu
c2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKKyAgICBib29sIHZhbGlkYXRlVmVydGV4QXR0
cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50ID0g
MCk7CisKKyAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciosIFdlYkdMT2Jq
ZWN0Kik7CisKKyAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RHNpemVpIHByaW1jb3VudCk7CisgICAgYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6
ZWkgcHJpbWNvdW50KTsKKworICAgIC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0
LgorICAgIHZvaWQgYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOworCisgICAg
UGFzc1JlZlB0cjxJbWFnZT4gZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSosIGludCB3aWR0aCwg
aW50IGhlaWdodCwgaW50IGRldmljZVNjYWxlRmFjdG9yKTsKKworI2lmIEVOQUJMRShWSURFTykK
KyAgICBQYXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50
KiwgQmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKyAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0
R3JvdXA+IG1fY29udGV4dEdyb3VwOworCisgICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciBy
ZW5kZXJpbmcgdG8gYSBEcmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5CisgICAgLy8g
dG8gdGhlIGJhY2stYnVmZmVyIG9mIG1fY29udGV4dC4KKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZl
cj4gbV9kcmF3aW5nQnVmZmVyOworCisgICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBl
dmVudCBvbmNlIGl0IGlzIGRldGVybWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgorICAgIC8vIFRo
aXMgaXMgdXNlZCBib3RoIGZvciBzeW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZv
ciByZWFsIG9uZXMsIGl0J3MKKyAgICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3Jp
cHQgb24gdGhlIHN0YWNrLCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKKyAgICAvLyBvbiBo
b3cgZXhhY3RseSB0aGUgcGxhdGZvcm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxv
c3QuIEZvciBiZXR0ZXIKKyAgICAvLyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRp
c3BhdGNoIG9mIHRoZSBldmVudC4KKyAgICBUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVu
dFRpbWVyOworICAgIGJvb2wgbV9yZXN0b3JlQWxsb3dlZDsKKyAgICBUaW1lciBtX3Jlc3RvcmVU
aW1lcjsKKworICAgIGJvb2wgbV9uZWVkc1VwZGF0ZTsKKyAgICBib29sIG1fbWFya2VkQ2FudmFz
RGlydHk7CisgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3Rz
OworCisgICAgLy8gTGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFi
b3V0IHNpemVzIGZvciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRf
QVJSQVlfQlVGRkVSCisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7
CisgICAgCisgICAgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZl
cnRleEFycmF5T2JqZWN0OworICAgIFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3Q7CisgICAgdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2Jq
ZWN0KFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCisg
ICAgeworICAgICAgICBpZiAoYXJyYXlPYmplY3QpCisgICAgICAgICAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QgPSBhcnJheU9iamVjdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CisgICAg
fQorICAgIAorICAgIGNsYXNzIFZlcnRleEF0dHJpYlZhbHVlIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFZlcnRleEF0dHJpYlZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5pdFZhbHVl
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgaW5pdFZhbHVlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFsdWVbMF0gPSAwLjBmOworICAgICAgICAgICAgdmFsdWVbMV0g
PSAwLjBmOworICAgICAgICAgICAgdmFsdWVbMl0gPSAwLjBmOworICAgICAgICAgICAgdmFsdWVb
M10gPSAxLjBmOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBHQzNEZmxvYXQgdmFsdWVb
NF07CisgICAgfTsKKyAgICBWZWN0b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0cmli
VmFsdWU7CisgICAgdW5zaWduZWQgbV9tYXhWZXJ0ZXhBdHRyaWJzOworICAgIFJlZlB0cjxXZWJH
TEJ1ZmZlcj4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOworICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyU2l6ZTsKKyAgICBHQzNEZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07
CisgICAgYm9vbCBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbDsKKyAgICBib29sIG1fdmVydGV4
QXR0cmliMFVzZWRCZWZvcmU7CisKKyAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQ
cm9ncmFtOworICAgIFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGlu
ZzsKKyAgICBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsK
KyAgICBzdHJ1Y3QgVGV4dHVyZVVuaXRTdGF0ZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1
cmU+IHRleHR1cmUyREJpbmRpbmc7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1
cmVDdWJlTWFwQmluZGluZzsKKyAgICB9OworICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBt
X3RleHR1cmVVbml0czsKKyAgICB1bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7CisK
KyAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZTJEOworICAgIFJlZlB0cjxX
ZWJHTFRleHR1cmU+IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcDsKKworICAgIFZlY3RvcjxHQzNEZW51
bT4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CisKKyAgICAvLyBGaXhlZC1zaXplIGNhY2hl
IG9mIHJldXNhYmxlIGltYWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCisg
ICAgY2xhc3MgTFJVSW1hZ2VCdWZmZXJDYWNoZSB7CisgICAgcHVibGljOgorICAgICAgICBMUlVJ
bWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSk7CisgICAgICAgIC8vIFRoZSBwb2ludGVyIHJl
dHVybmVkIGlzIG93bmVkIGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgorICAgICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdm9pZCBidWJibGVUb0Zyb250KGludCBpZHgpOworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7CisgICAgICAgIGlu
dCBtX2NhcGFjaXR5OworICAgIH07CisgICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRl
ZEltYWdlQ2FjaGU7CisKKyAgICBHQzNEaW50IG1fbWF4VGV4dHVyZVNpemU7CisgICAgR0MzRGlu
dCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKKyAgICBHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVy
U2l6ZTsKKyAgICBHQzNEaW50IG1fbWF4Vmlld3BvcnREaW1zWzJdOworICAgIEdDM0RpbnQgbV9t
YXhUZXh0dXJlTGV2ZWw7CisgICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisK
KyAgICBHQzNEaW50IG1fbWF4RHJhd0J1ZmZlcnM7CisgICAgR0MzRGludCBtX21heENvbG9yQXR0
YWNobWVudHM7CisgICAgR0MzRGVudW0gbV9iYWNrRHJhd0J1ZmZlcjsKKyAgICBib29sIG1fZHJh
d0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQ7CisgICAgYm9vbCBtX2RyYXdCdWZmZXJz
U3VwcG9ydGVkOworCisgICAgR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7CisgICAgR0MzRGludCBt
X3VucGFja0FsaWdubWVudDsKKyAgICBib29sIG1fdW5wYWNrRmxpcFk7CisgICAgYm9vbCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGE7CisgICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29u
dmVyc2lvbjsKKyAgICBib29sIG1fY29udGV4dExvc3Q7CisgICAgTG9zdENvbnRleHRNb2RlIG1f
Y29udGV4dExvc3RNb2RlOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0
cmlidXRlczsKKworICAgIGJvb2wgbV9sYXllckNsZWFyZWQ7CisgICAgR0MzRGZsb2F0IG1fY2xl
YXJDb2xvcls0XTsKKyAgICBib29sIG1fc2Npc3NvckVuYWJsZWQ7CisgICAgR0MzRGZsb2F0IG1f
Y2xlYXJEZXB0aDsKKyAgICBHQzNEaW50IG1fY2xlYXJTdGVuY2lsOworICAgIEdDM0Rib29sZWFu
IG1fY29sb3JNYXNrWzRdOworICAgIEdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOworCisgICAgYm9v
bCBtX3N0ZW5jaWxFbmFibGVkOworICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNp
bE1hc2tCYWNrOworICAgIEdDM0RpbnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1Jl
ZkJhY2s7IC8vIE5vdGUgdGhhdCB0aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywg
bm90IHRoZSBpbnRlcm5hbCBjbGFtcGVkIHZhbHVlLgorICAgIEdDM0R1aW50IG1fc3RlbmNpbEZ1
bmNNYXNrLCBtX3N0ZW5jaWxGdW5jTWFza0JhY2s7CisKKyAgICBib29sIG1faXNHTEVTMkNvbXBs
aWFudDsKKyAgICBib29sIG1faXNHTEVTMk5QT1RTdHJpY3Q7CisgICAgYm9vbCBtX2lzRXJyb3JH
ZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7CisgICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZl
OworICAgIGJvb2wgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKKyAgICBib29sIG1faXNSb2J1
c3RuZXNzRVhUU3VwcG9ydGVkOworCisgICAgYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25z
b2xlOworICAgIGludCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKKworICAgIC8vIEEg
V2ViR0xSZW5kZXJpbmdDb250ZXh0IGNhbiBiZSBjcmVhdGVkIGluIGEgc3RhdGUgd2hlcmUgaXQg
YXBwZWFycyBhcworICAgIC8vIGEgdmFsaWQgYW5kIGFjdGl2ZSBjb250ZXh0LCBidXQgd2lsbCBu
b3QgZXhlY3V0ZSBhbnkgaW1wb3J0YW50IG9wZXJhdGlvbnMKKyAgICAvLyB1bnRpbCBpdHMgbG9h
ZCBwb2xpY3kgaXMgY29tcGxldGVseSByZXNvbHZlZC4KKyAgICBib29sIG1faXNQZW5kaW5nUG9s
aWN5UmVzb2x1dGlvbjsKKyAgICBib29sIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbjsK
KyAgICBib29sIGlzQ29udGV4dExvc3RPclBlbmRpbmcoKTsKKworICAgIC8vIEVuYWJsZWQgZXh0
ZW5zaW9uIG9iamVjdHMuCisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVEZyYWdEZXB0aD4gbV9leHRG
cmFnRGVwdGg7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVEJsZW5kTWluTWF4PiBtX2V4dEJsZW5k
TWluTWF4OworICAgIHN0ZDo6dW5pcXVlX3B0cjxFWFRzUkdCPiBtX2V4dHNSR0I7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRUZXh0dXJlRmls
dGVyQW5pc290cm9waWM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRleHR1cmVMT0Q+
IG1fZXh0U2hhZGVyVGV4dHVyZUxPRDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZs
b2F0PiBtX29lc1RleHR1cmVGbG9hdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZs
b2F0TGluZWFyPiBtX29lc1RleHR1cmVGbG9hdExpbmVhcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVIYWxmRmxvYXRM
aW5lYXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+IG1fb2Vz
U3RhbmRhcmREZXJpdmF0aXZlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVmVydGV4QXJyYXlP
YmplY3Q+IG1fb2VzVmVydGV4QXJyYXlPYmplY3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9FU0Vs
ZW1lbnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViR0xMb3NlQ29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJlckluZm87Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFkZXJz
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDPiBtX3dlYmds
Q29tcHJlc3NlZFRleHR1cmVBVEM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVTM1RDOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVyZT4gbV93ZWJn
bERlcHRoVGV4dHVyZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVmZmVycz4gbV93
ZWJnbERyYXdCdWZmZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3RhbmNlZEFycmF5
cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKKworICAgIC8vIEhlbHBlcnMgZm9yIGdldFBhcmFt
ZXRlciBhbmQgb3RoZXJzCisgICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJhbWV0ZXIoR0Mz
RGVudW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVu
dW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSk7CisgICAg
V2ViR0xHZXRJbmZvIGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7CisgICAgV2ViR0xHZXRJbmZv
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0
V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0
V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CisKKyAgICAvLyBDbGVhciB0aGUgYmFj
a2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVyYXRpb24uCisg
ICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55IGNsZWFyIHRoYXQg
d291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKKyAgICAvLyBhbmQgdGhlIGZ1bmN0aW9u
IHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4KKyAgICBib29s
IGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAwKTsKKworICAgIC8v
IEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1lYnVmZmVyIG1h
eSBkZXN0cm95LgorICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworCisgICAgdm9p
ZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4SW1hZ2UyREltcGwoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0
bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2Uy
REltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBjaGVja1RleHR1cmVD
b21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOworCisgICAgdm9pZCBjcmVhdGVGYWxsYmFj
a0JsYWNrVGV4dHVyZXMxeDEoKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29weVRl
eHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0CisgICAgLy8gYW5k
IHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVmZmVy
IGNvbWJpbmF0aW9uCisgICAgLy8gaXMgdmFsaWQuCisgICAgYm9vbCBpc1RleEludGVybmFsRm9y
bWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBmb3JtYXQuCisgICAg
R0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7CisKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgorICAgIGlu
dCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0
byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgorICAgIGludCBnZXRCb3VuZEZy
YW1lYnVmZmVySGVpZ2h0KCk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5IGxp
bWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbnMuCisg
ICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgc2l6
ZSBpcyBub24tbmVnYXRpdmUuCisgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVybiBm
YWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgorICAgIGJv
b2wgdmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNE
aW50IHkpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFsbCBjaGFyYWN0
ZXJzIGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQorICAgIC8vIEFTQ0lJIHN1YnNldCBhcyBk
ZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCisgICAgYm9vbCB2YWxpZGF0
ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOworCisgICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQgdGV4dHVyZSBib3VuZCB0byB0
aGUgdGFyZ2V0LgorICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0dXJuIDAgaWYgdGFy
Z2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcworICAgIC8vIG51bGwuICBPdGhlcndp
c2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgorICAgIFdlYkdMVGV4
dHVyZSogdmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApOworCisgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBmdW5jdGlvbnMge2Nv
cHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMg
ZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVu
Y0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4K
KyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwgaXMg
aW52YWxpZC4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKKworICAgIGVudW0gVGV4
RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgeworICAgICAgICBOb3RUZXhTdWJJbWFnZTJELAor
ICAgICAgICBUZXhTdWJJbWFnZTJELAorICAgIH07CisKKyAgICBlbnVtIFRleEZ1bmNWYWxpZGF0
aW9uU291cmNlVHlwZSB7CisgICAgICAgIFNvdXJjZUFycmF5QnVmZmVyVmlldywKKyAgICAgICAg
U291cmNlSW1hZ2VEYXRhLAorICAgICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LAorICAgICAg
ICBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwKKyAgICAgICAgU291cmNlSFRNTFZpZGVvRWxlbWVu
dCwKKyAgICB9OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQg
dG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3RhcmdldC93aWR0aC9oZWln
aHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCisgICAgLy8gT3RoZXJ3aXNlLCBp
dCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdvcmsuCisgICAgYm9v
bCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRh
dGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkg
d2lkdGgsCisgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzIGZv
ciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJy
b3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICBib29s
IHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9u
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlKTsKKworICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKKyAgICAgICAgTnVsbEFsbG93ZWQs
CisgICAgICAgIE51bGxOb3RBbGxvd2VkCisgICAgfTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKKyAgICAvLyBpcyBv
ZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3IgdGhlIHRleElt
YWdlIGNhbGwuCisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlm
IHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRhKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24pOworCisgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQgaXMgc2V0dGFibGUg
YXMgaW4KKyAgICAvLyB5b3UgY2FuIHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9yIGNhbGwg
dGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5kCisgICAgLy8gY29weVRleFN1YkltYWdlMkQu
CisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBmb3Jt
YXQgaXMgbm90IHNldHRhYmxlLgorICAgIGJvb2wgdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgaXMgY29ycmVj
dCBzaXplCisgICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVuc2lvbnMuCisgICAg
Ym9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKKworICAgIC8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0
cy4KKyAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQp
OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVy
ZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKKyAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorICAg
IGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOworCisgICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBm
b3IKKyAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2Vk
VGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqKTsKKworICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0FycmF5cy9FbGVt
ZW50c30uCisgICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0pOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlmIGZy
b250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdzIGFyZSB0aGUgc2Ft
ZS4KKyAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc3RlbmNpbCBmdW5j
LgorICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBh
bmQgdGV4UGFyYW1ldGVyaS4KKyAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFtZiwgYm9vbCBp
c0Zsb2F0KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCBHTCBlcnJvcnMgdG8g
Y29uc29sZS4KKyAgICB2b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBj
b25zdCBjaGFyKiByZWFzb24pOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50IHdh
cm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQorICAgIC8vIHVzZWQgb25seSB0byB3YXJuIGFi
b3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCisgICAgdm9pZCBwcmludFdhcm5pbmdUb0Nv
bnNvbGUoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRh
dGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25zLgorICAgIC8vIEdl
bmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCisgICAgYm9vbCB2YWxp
ZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOworCisgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCisgICAgYm9vbCB2YWxpZGF0
ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0b3JzLgorICAg
IGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KKyAgICBib29sIHZhbGlkYXRlQ2FwYWJpbGl0eShj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKworICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1bmN0aW9ucy4K
KyAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSosIEdDM0RzaXpl
aSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJBcnJheSosIEdD
M0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgdm9pZCosIEdD
M0RzaXplaSwgR0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBt
b2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKKworICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJEYXRhLgorICAg
IC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAwIGlmIHBh
cmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVmZmVyRGF0
YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHVzYWdlKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFn
ZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2lu
LgorICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBjYW52YXMgaXMgcmVh
ZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KKyAgICBib29sIHZhbGlkYXRlSFRNTENhbnZh
c0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVhZHkgd291bGRu
J3QgdGFpbnQgT3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsK
KyNlbmRpZgorCisgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ7dn0u
CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0RmbG9h
dCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOworICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSosIEdD
M0RzaXplaSBleHBlY3RlZFNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCosIEdDM0RzaXpl
aSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9y
IGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBmdW5jdGlvbnMuCisg
ICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVydGhl
ciBwcm9jZXNzaW5nLgorICAgIGJvb2wgZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0Kik7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBiaW5kVGV4dHVyZSwg
ZXRjKSBhbmQgdXNlUHJvZ3JhbS4KKyAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJl
ZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8gdHJ1ZSB1cG9uIHJldHVybi4KKyAgICAvLyBSZXR1
cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3Np
bmcuCisgICAgYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7CisKKyAgICAvLyBIZWxwZXJzIGZvciBz
aW11bGF0aW5nIHZlcnRleEF0dHJpYjAKKyAgICB2b2lkIGluaXRWZXJ0ZXhBdHRyaWIwKCk7Cisg
ICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCk7CisgICAg
dm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworCisgICAg
dm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKTsKKyAgICAvLyBIZWxwZXIgZm9yIHJlc3Rv
cmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KKyAgICB2b2lkIG1heWJlUmVzdG9yZUNvbnRleHQo
KTsKKworICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxlZ2VkIGNvZGUg
aW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAorICAgIC8vIGEgU2FmYXJpIG9yIENocm9tZSBl
eHRlbnNpb24uCisgICAgYm9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3Q7CisK
KyAgICBlbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7CisgICAgICAgIERpc3BsYXlJbkNv
bnNvbGUsCisgICAgICAgIERvbnREaXNwbGF5SW5Db25zb2xlCisgICAgfTsKKworICAgIC8vIFdy
YXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0aGF0IHNlbmRz
IGEgbWVzc2FnZQorICAgIC8vIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCisgICAgdm9pZCBz
eW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25z
dCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0gRGlzcGxheUlu
Q29uc29sZSk7CisKKyAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBjb25z
dDsKKworICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBiYXNlZCBvbiB1c2Vy
IHNldHRpbmcgYW5kCisgICAgLy8gd2hldGhlciB0aGUgY3VycmVudCBGQk8gaGFzIGEgc3RlbmNp
bCBidWZmZXIuCisgICAgdm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7CisKKyAgICAvLyBIZWxwZXIg
Zm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCisgICAgdm9pZCBlbmFibGVP
ckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOworCisgICAgLy8gQ2xh
bXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMuCisgICAgSW50
U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworCisgICAgLy8gRmlyc3QgdGltZSBjYWxsZWQsIGlm
IEVYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFsdWU7IG90aGVyd2lz
ZSByZXR1cm4gMC4KKyAgICAvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUuCisgICAg
R0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOworICAgIEdDM0RpbnQgZ2V0TWF4Q29sb3JBdHRh
Y2htZW50cygpOworCisgICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7CisKKyAg
ICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKKyAgICB2b2lkIHJlc3RvcmVDdXJy
ZW50VGV4dHVyZTJEKCk7CisKKyAgICAvLyBDaGVjayBpZiBFWFRfZHJhd19idWZmZXJzIGV4dGVu
c2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wgcmVxdWlyZW1l
bnRzLgorICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMMVJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNzg0ICsyNiwxNiBAQAogI2lmbmRlZiBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAog
I2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkRy
YXdpbmdCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJXZWJHTEdldElu
Zm8uaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXku
aD4KLSNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQU5HTEVJbnN0YW5jZWRBcnJheXM7Ci1jbGFzcyBF
WFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7Ci1jbGFzcyBFWFRTaGFkZXJUZXh0dXJlTE9EOwot
Y2xhc3MgSFRNTEltYWdlRWxlbWVudDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Ci1jbGFzcyBJ
bWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBPRVNT
dGFuZGFyZERlcml2YXRpdmVzOwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0OwotY2xhc3MgT0VTVGV4
dHVyZUZsb2F0TGluZWFyOwotY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdDsKLWNsYXNzIE9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXI7Ci1jbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKLWNsYXNz
IE9FU0VsZW1lbnRJbmRleFVpbnQ7Ci1jbGFzcyBXZWJHTEFjdGl2ZUluZm87Ci1jbGFzcyBXZWJH
TEJ1ZmZlcjsKLWNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xDb250ZXh0T2Jq
ZWN0OwotY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLWNsYXNzIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOwotY2xh
c3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKLWNsYXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87
Ci1jbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLWNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlOwotY2xh
c3MgV2ViR0xEcmF3QnVmZmVyczsKLWNsYXNzIFdlYkdMRXh0ZW5zaW9uOwotY2xhc3MgV2ViR0xG
cmFtZWJ1ZmZlcjsKLWNsYXNzIFdlYkdMTG9zZUNvbnRleHQ7Ci1jbGFzcyBXZWJHTE9iamVjdDsK
LWNsYXNzIFdlYkdMUHJvZ3JhbTsKLWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwotY2xhc3MgV2Vi
R0xTaGFkZXI7Ci1jbGFzcyBXZWJHTFNoYXJlZE9iamVjdDsKLWNsYXNzIFdlYkdMU2hhZGVyUHJl
Y2lzaW9uRm9ybWF0OwotY2xhc3MgV2ViR0xUZXh0dXJlOwotY2xhc3MgV2ViR0xVbmlmb3JtTG9j
YXRpb247Ci1jbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwotCi10eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwotCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJs
aWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitjbGFz
cyBXZWJHTDFSZW5kZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENvbnRleHRBdHRy
aWJ1dGVzKik7Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCk7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNpZiBQ
TEFURk9STShXSU4pCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBhY2NlbGVyYXRlZCAzZCBjYW52
YXMgb24gV2luZG93cy4KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZWxzZQotICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vs
ZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICBp
bnQgZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3Q7Ci0gICAgaW50IGRyYXdpbmdCdWZmZXJIZWln
aHQoKSBjb25zdDsKLQotICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2Vi
R0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24o
V2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVm
ZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJp
bmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xU
ZXh0dXJlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmxlbmRDb2xvcihHQzNEZmxvYXQg
cmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwot
ICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGJsZW5kRXF1
YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpOwotICAg
IHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOwotICAg
IHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0Is
IEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7Ci0KLSAgICB2b2lkIGJ1ZmZl
ckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJh
eUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0Rl
bnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxv
bmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAg
IEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsKLSAgICB2
b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKLSAgICB2b2lkIGNsZWFyQ29sb3IoR0MzRGZs
b2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhh
KTsKLSAgICB2b2lkIGNsZWFyRGVwdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGNsZWFyU3RlbmNp
bChHQzNEaW50KTsKLSAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29s
ZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7Ci0gICAgdm9p
ZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZm
ZXJWaWV3KiBkYXRhKTsKLSAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKTsKLQot
ICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOwotICAgIHZvaWQgY29weVRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAgICBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVh
dGVCdWZmZXIoKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZUZyYW1l
YnVmZmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsK
LSAgICBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5kZXJidWZmZXIoKTsK
LSAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKCk7Ci0KLSAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOwotCi0gICAgdm9pZCBk
ZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFdl
YkdMRnJhbWVidWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7
Ci0gICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKLSAgICB2
b2lkIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciopOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShX
ZWJHTFRleHR1cmUqKTsKLQotICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsKLSAgICB2b2lk
IGRlcHRoTWFzayhHQzNEYm9vbGVhbik7Ci0gICAgdm9pZCBkZXB0aFJhbmdlKEdDM0RmbG9hdCB6
TmVhciwgR0MzRGZsb2F0IHpGYXIpOwotICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3Jh
bSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZGlzYWJsZShHQzNE
ZW51bSBjYXApOwotICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGlu
ZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUs
IEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0g
dHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBlbmFi
bGUoR0MzRGVudW0gY2FwKTsKLSAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1
aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmaW5pc2goKTsKLSAgICB2b2lk
IGZsdXNoKCk7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2Vi
R0xSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoR0MzRGVudW0gdGFyZ2V0KTsKLQotICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBn
ZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5pZm9ybShX
ZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wg
Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSosIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFk
ZXI+PiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEJ1
ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBnZXRDb250ZXh0
QXR0cmlidXRlcygpOwotICAgIEdDM0RlbnVtIGdldEVycm9yKCk7Ci0gICAgV2ViR0xFeHRlbnNp
b24qIGdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIFdlYkdMR2V0SW5mbyBn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdM
R2V0SW5mbyBnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBXZWJHTEdldEluZm8gZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qLCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhX
ZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRl
ciosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIGdldFNoYWRl
ckluZm9Mb2coV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxX
ZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0Rl
bnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFZlY3RvcjxTdHJpbmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKLSAgICBXZWJH
TEdldEluZm8gZ2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9ybShXZWJHTFByb2dy
YW0qLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQ
cm9ncmFtKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0SW5m
byBnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgbG9uZyBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBp
bmRleCwgR0MzRGVudW0gcG5hbWUpOwotCi0gICAgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gbW9kZSk7Ci0gICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZmZXIqKTsK
LSAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKLSAgICBHQzNEYm9vbGVhbiBpc0VuYWJs
ZWQoR0MzRGVudW0gY2FwKTsKLSAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJh
bWVidWZmZXIqKTsKLSAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7Ci0g
ICAgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKLSAgICBH
QzNEYm9vbGVhbiBpc1NoYWRlcihXZWJHTFNoYWRlciopOwotICAgIEdDM0Rib29sZWFuIGlzVGV4
dHVyZShXZWJHTFRleHR1cmUqKTsKLQotICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCk7Ci0g
ICAgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9p
ZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7Ci0gICAg
dm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZm
ZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbGVhc2VTaGFkZXJD
b21waWxlcigpOwotICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpOwotICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVh
biBpbnZlcnQpOwotICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHNoYWRlclNvdXJjZShXZWJH
TFNoYWRlciosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHN0ZW5j
aWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKLSAgICB2
b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0Mz
RGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE1hc2soR0MzRHVpbnQp
OwotICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBt
YXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwg
R0MzRGVudW0genBhc3MpOwotICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFj
ZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKLQotICAg
IHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNpZiBFTkFCTEUo
VklERU8pCi0gICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKLSNlbmRpZgotCi0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwotCi0gICAgdm9p
ZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENh
bnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZv
aWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQg
eG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0jZW5kaWYKLQotICAgIHZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5
KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNp
emVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yaShjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5p
Zm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2YoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zaXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxv
YXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00ZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1
bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRy
aXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJy
YXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgdXNlUHJvZ3JhbShX
ZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0o
V2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIx
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2
KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6
ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwg
RmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwotICAgIHZvaWQgdmVy
dGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0Mz
RGZsb2F0IHopOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhB
dHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxv
YXQgeiwgR0MzRGZsb2F0IHcpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGlu
ZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0Rl
bnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSBzdHJpZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAgICAvLyBXRUJLSVRfbG9zZV9jb250ZXh0IHN1
cHBvcnQKLSAgICBlbnVtIExvc3RDb250ZXh0TW9kZSB7Ci0gICAgICAgIC8vIExvc3QgY29udGV4
dCBvY2N1cnJlZCBhdCB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGxldmVsLgotICAgICAgICBSZWFsTG9z
dENvbnRleHQsCi0KLSAgICAgICAgLy8gTG9zdCBjb250ZXh0IHByb3Zva2VkIGJ5IFdFQktJVF9s
b3NlX2NvbnRleHQuCi0gICAgICAgIFN5bnRoZXRpY0xvc3RDb250ZXh0Ci0gICAgfTsKLSAgICB2
b2lkIGZvcmNlTG9zdENvbnRleHQoTG9zdENvbnRleHRNb2RlKTsKLSAgICB2b2lkIGZvcmNlUmVz
dG9yZUNvbnRleHQoKTsKLSAgICB2b2lkIGxvc2VDb250ZXh0SW1wbChMb3N0Q29udGV4dE1vZGUp
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0gICAgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRH
cm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9Ci0gICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLQotICAgIHZvaWQgbWFya0xheWVy
Q29tcG9zaXRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcygpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwotCi0gICAgdm9pZCByZW1vdmVTaGFyZWRPYmplY3QoV2Vi
R0xTaGFyZWRPYmplY3QqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0Kik7Ci0gICAgCi0gICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmlicygpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4VmVydGV4QXR0cmliczsgfQotCi0gICAgLy8gQU5HTEVfaW5zdGFu
Y2VkX2FycmF5cyBleHRlbnNpb24gZnVuY3Rpb25zLgotICAgIHZvaWQgZHJhd0FycmF5c0luc3Rh
bmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rz
aXplaSBwcmltY291bnQpOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwg
R0MzRHNpemVpIHByaW1jb3VudCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1
aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xh
c3MgV2ViR0xEcmF3QnVmZmVyczsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsK
LSAgICBmcmllbmQgY2xhc3MgV2ViR0xPYmplY3Q7Ci0gICAgZnJpZW5kIGNsYXNzIE9FU1ZlcnRl
eEFycmF5T2JqZWN0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLSAgICBm
cmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLSAgICBmcmllbmQgY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQzsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0
RXJyb3JNZXNzYWdlQ2FsbGJhY2s7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM7Ci0KLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQq
LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKTsKLSAgICB2b2lkIGluaXRpYWxpemVOZXdDb250
ZXh0KCk7Ci0gICAgdm9pZCBzZXR1cEZsYWdzKCk7Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QK
LSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRkU2hhcmVkT2Jq
ZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7Ci0gICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdM
Q29udGV4dE9iamVjdCopOwotICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwot
Ci0gICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLSAgICB2b2lkIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOwotCi0gICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBvbiB0b3Ag
b2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9uLgotICAgIGJvb2wgaXNHTEVTMkNvbXBs
aWFudCgpIHsgcmV0dXJuIG1faXNHTEVTMkNvbXBsaWFudDsgfQotICAgIC8vIFF1ZXJ5IGlmIHRo
ZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KLSAgICBib29sIGlzR0xFUzJOUE9U
U3RyaWN0KCkgeyByZXR1cm4gbV9pc0dMRVMyTlBPVFN0cmljdDsgfQotICAgIC8vIFF1ZXJ5IGlm
IHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1vZi1ib3VuZHMg
YnVmZmVyIGFjY2Vzc2VzLgotICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNB
Y2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
czsgfQotICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0aWFsaXplcyB0
ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgYm9vbCBpc1Jlc291cmNlU2FmZSgpIHsg
cmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7IH0KLSAgICAvLyBRdWVyeSBpZiBkZXB0aF9zdGVuY2ls
IGJ1ZmZlciBpcyBzdXBwb3J0ZWQuCi0gICAgYm9vbCBpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgp
IHsgcmV0dXJuIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7IH0KLQotICAgIC8vIEhlbHBlciB0
byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKLSAgICAvLyBs
aWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KLSAgICB1bnNpZ25lZCBpbnQgc2l6ZUluQnl0ZXMo
R0MzRGVudW0gdHlwZSk7Ci0KLSAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIGNvdW50IGFuZCBv
ZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVudCBhcnJheSBidWZmZXIK
LSAgICBib29sIHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKLQotICAgIC8vIENvbnNlcnZhdGl2ZSBidXQg
cXVpY2sgaW5kZXggdmFsaWRhdGlvbgotICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29uc2Vy
dmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKLQot
ICAgIC8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlvbiAtLSBvbmx5IGRvbmUgaWYg
Y29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCi0gICAgYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlQcmVj
aXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVu
c2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKLSAgICBib29sIHZhbGlkYXRlVmVydGV4QXR0
cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50ID0g
MCk7Ci0KLSAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciosIFdlYkdMT2Jq
ZWN0Kik7Ci0KLSAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RHNpemVpIHByaW1jb3VudCk7Ci0gICAgYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzKTsKLQotICAg
IC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0LgotICAgIHZvaWQgYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOwotCi0gICAgUGFzc1JlZlB0cjxJbWFnZT4gZHJh
d0ltYWdlSW50b0J1ZmZlcihJbWFnZSosIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRldmlj
ZVNjYWxlRmFjdG9yKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBQYXNzUmVmUHRyPEltYWdl
PiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgQmFja2luZ1N0b3JlQ29weSwg
RXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IG1fY29udGV4dDsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4dEdyb3Vw
OwotCi0gICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBEcmF3aW5n
QnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5Ci0gICAgLy8gdG8gdGhlIGJhY2stYnVmZmVyIG9m
IG1fY29udGV4dC4KLSAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOwot
Ci0gICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0IGlzIGRldGVy
bWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgotICAgIC8vIFRoaXMgaXMgdXNlZCBib3RoIGZvciBz
eW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMsIGl0J3MKLSAg
ICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0YWNrLCBidXQg
dGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKLSAgICAvLyBvbiBob3cgZXhhY3RseSB0aGUgcGxhdGZv
cm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBiZXR0ZXIKLSAgICAv
LyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBldmVudC4K
LSAgICBUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOwotICAgIGJvb2wgbV9y
ZXN0b3JlQWxsb3dlZDsKLSAgICBUaW1lciBtX3Jlc3RvcmVUaW1lcjsKLQotICAgIGJvb2wgbV9u
ZWVkc1VwZGF0ZTsKLSAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7Ci0gICAgSGFzaFNldDxX
ZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3RzOwotCi0gICAgLy8gTGlzdCBvZiBi
b3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFib3V0IHNpemVzIGZvciBBUlJBWV9C
VUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRfQVJSQVlfQlVGRkVSCi0gICAgUmVm
UHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAgCi0gICAgUmVmUHRyPFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0OwotICAg
IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3Q7Ci0gICAgdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2JqZWN0KFBhc3NSZWZQdHI8V2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCi0gICAgewotICAgICAgICBpZiAoYXJy
YXlPYmplY3QpCi0gICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBhcnJheU9i
amVjdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgfQotICAgIAotICAgIGNsYXNzIFZl
cnRleEF0dHJpYlZhbHVlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFZlcnRleEF0dHJpYlZhbHVl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgaW5pdFZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHZvaWQgaW5pdFZhbHVlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFs
dWVbMF0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOwotICAgICAgICAgICAg
dmFsdWVbMl0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbM10gPSAxLjBmOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBHQzNEZmxvYXQgdmFsdWVbNF07Ci0gICAgfTsKLSAgICBWZWN0
b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0cmliVmFsdWU7Ci0gICAgdW5zaWduZWQg
bV9tYXhWZXJ0ZXhBdHRyaWJzOwotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyOwotICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZTsKLSAgICBHQzNE
ZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07Ci0gICAgYm9vbCBtX2ZvcmNlQXR0
cmliMEJ1ZmZlclJlZmlsbDsKLSAgICBib29sIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmU7Ci0K
LSAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOwotICAgIFJlZlB0cjxX
ZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAgICBSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKLSAgICBzdHJ1Y3QgVGV4dHVyZVVu
aXRTdGF0ZSB7Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmUyREJpbmRpbmc7
Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmVDdWJlTWFwQmluZGluZzsKLSAg
ICB9OwotICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0czsKLSAgICB1
bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7Ci0KLSAgICBSZWZQdHI8V2ViR0xUZXh0
dXJlPiBtX2JsYWNrVGV4dHVyZTJEOwotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxhY2tU
ZXh0dXJlQ3ViZU1hcDsKLQotICAgIFZlY3RvcjxHQzNEZW51bT4gbV9jb21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7Ci0KLSAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJldXNhYmxlIGltYWdlIGJ1
ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCi0gICAgY2xhc3MgTFJVSW1hZ2VCdWZm
ZXJDYWNoZSB7Ci0gICAgcHVibGljOgotICAgICAgICBMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBj
YXBhY2l0eSk7Ci0gICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93bmVkIGJ5IHRo
ZSBpbWFnZSBidWZmZXIgbWFwLgotICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBidWJibGVUb0Zy
b250KGludCBpZHgpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7Ci0gICAgICAgIGludCBtX2NhcGFjaXR5OwotICAgIH07
Ci0gICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZEltYWdlQ2FjaGU7Ci0KLSAgICBH
QzNEaW50IG1fbWF4VGV4dHVyZVNpemU7Ci0gICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZTsKLSAgICBHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKLSAgICBHQzNEaW50IG1f
bWF4Vmlld3BvcnREaW1zWzJdOwotICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlTGV2ZWw7Ci0gICAg
R0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0KLSAgICBHQzNEaW50IG1fbWF4RHJh
d0J1ZmZlcnM7Ci0gICAgR0MzRGludCBtX21heENvbG9yQXR0YWNobWVudHM7Ci0gICAgR0MzRGVu
dW0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICBib29sIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVt
ZW50c0NoZWNrZWQ7Ci0gICAgYm9vbCBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOwotCi0gICAgR0Mz
RGludCBtX3BhY2tBbGlnbm1lbnQ7Ci0gICAgR0MzRGludCBtX3VucGFja0FsaWdubWVudDsKLSAg
ICBib29sIG1fdW5wYWNrRmxpcFk7Ci0gICAgYm9vbCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGE7
Ci0gICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKLSAgICBib29sIG1f
Y29udGV4dExvc3Q7Ci0gICAgTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RNb2RlOwotICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKLQotICAgIGJvb2wg
bV9sYXllckNsZWFyZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJDb2xvcls0XTsKLSAgICBib29s
IG1fc2Npc3NvckVuYWJsZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJEZXB0aDsKLSAgICBHQzNE
aW50IG1fY2xlYXJTdGVuY2lsOwotICAgIEdDM0Rib29sZWFuIG1fY29sb3JNYXNrWzRdOwotICAg
IEdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOwotCi0gICAgYm9vbCBtX3N0ZW5jaWxFbmFibGVkOwot
ICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNpbE1hc2tCYWNrOwotICAgIEdDM0Rp
bnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1JlZkJhY2s7IC8vIE5vdGUgdGhhdCB0
aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywgbm90IHRoZSBpbnRlcm5hbCBjbGFt
cGVkIHZhbHVlLgotICAgIEdDM0R1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBtX3N0ZW5jaWxGdW5j
TWFza0JhY2s7Ci0KLSAgICBib29sIG1faXNHTEVTMkNvbXBsaWFudDsKLSAgICBib29sIG1faXNH
TEVTMk5QT1RTdHJpY3Q7Ci0gICAgYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXM7Ci0gICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZlOwotICAgIGJvb2wgbV9pc0RlcHRo
U3RlbmNpbFN1cHBvcnRlZDsKLSAgICBib29sIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkOwot
Ci0gICAgYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlOwotICAgIGludCBtX251bUdM
RXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKLQotICAgIC8vIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0
IGNhbiBiZSBjcmVhdGVkIGluIGEgc3RhdGUgd2hlcmUgaXQgYXBwZWFycyBhcwotICAgIC8vIGEg
dmFsaWQgYW5kIGFjdGl2ZSBjb250ZXh0LCBidXQgd2lsbCBub3QgZXhlY3V0ZSBhbnkgaW1wb3J0
YW50IG9wZXJhdGlvbnMKLSAgICAvLyB1bnRpbCBpdHMgbG9hZCBwb2xpY3kgaXMgY29tcGxldGVs
eSByZXNvbHZlZC4KLSAgICBib29sIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKLSAgICBi
b29sIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbjsKLSAgICBib29sIGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKTsKLQotICAgIC8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVjdHMuCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRUZXh0dXJl
RmlsdGVyQW5pc290cm9waWM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRleHR1cmVM
T0Q+IG1fZXh0U2hhZGVyVGV4dHVyZUxPRDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVy
ZUZsb2F0PiBtX29lc1RleHR1cmVGbG9hdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVy
ZUZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVGbG9hdExpbmVhcjsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0OwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVIYWxmRmxv
YXRMaW5lYXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+IG1f
b2VzU3RhbmRhcmREZXJpdmF0aXZlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVmVydGV4QXJy
YXlPYmplY3Q+IG1fb2VzVmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9F
U0VsZW1lbnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViR0xMb3NlQ29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJlckluZm87
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFk
ZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDPiBtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVBVEM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVyZT4gbV93
ZWJnbERlcHRoVGV4dHVyZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVmZmVycz4g
bV93ZWJnbERyYXdCdWZmZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3RhbmNlZEFy
cmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKLQotICAgIC8vIEhlbHBlcnMgZm9yIGdldFBh
cmFtZXRlciBhbmQgb3RoZXJzCi0gICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJhbWV0ZXIo
R0MzRGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSk7Ci0g
ICAgV2ViR0xHZXRJbmZvIGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgV2ViR0xHZXRJ
bmZvIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8g
Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8g
Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7Ci0KLSAgICAvLyBDbGVhciB0aGUg
YmFja2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVyYXRpb24u
Ci0gICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55IGNsZWFyIHRo
YXQgd291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKLSAgICAvLyBhbmQgdGhlIGZ1bmN0
aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4KLSAgICBi
b29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAwKTsKLQotICAg
IC8vIEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1lYnVmZmVy
IG1heSBkZXN0cm95LgotICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwotCi0gICAg
dm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQq
IHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyREltcGwoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSos
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBjaGVja1RleHR1
cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOwotCi0gICAgdm9pZCBjcmVhdGVGYWxs
YmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29w
eVRleHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0Ci0gICAgLy8g
YW5kIHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVm
ZmVyIGNvbWJpbmF0aW9uCi0gICAgLy8gaXMgdmFsaWQuCi0gICAgYm9vbCBpc1RleEludGVybmFs
Rm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBmb3JtYXQuCi0g
ICAgR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7Ci0KLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgotICAg
IGludCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgotICAgIGludCBnZXRCb3Vu
ZEZyYW1lYnVmZmVySGVpZ2h0KCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5
IGxpbWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbnMu
Ci0gICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYg
c2l6ZSBpcyBub24tbmVnYXRpdmUuCi0gICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVy
biBmYWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgotICAg
IGJvb2wgdmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBH
QzNEaW50IHkpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFsbCBjaGFy
YWN0ZXJzIGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQotICAgIC8vIEFTQ0lJIHN1YnNldCBh
cyBkZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCi0gICAgYm9vbCB2YWxp
ZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQgdGV4dHVyZSBib3VuZCB0
byB0aGUgdGFyZ2V0LgotICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0dXJuIDAgaWYg
dGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcwotICAgIC8vIG51bGwuICBPdGhl
cndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgotICAgIFdlYkdM
VGV4dHVyZSogdmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApOwotCi0gICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBmdW5jdGlvbnMg
e2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVy
bnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4
RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFn
ZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwg
aXMgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKLQotICAgIGVudW0g
VGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgewotICAgICAgICBOb3RUZXhTdWJJbWFnZTJE
LAotICAgICAgICBUZXhTdWJJbWFnZTJELAotICAgIH07Ci0KLSAgICBlbnVtIFRleEZ1bmNWYWxp
ZGF0aW9uU291cmNlVHlwZSB7Ci0gICAgICAgIFNvdXJjZUFycmF5QnVmZmVyVmlldywKLSAgICAg
ICAgU291cmNlSW1hZ2VEYXRhLAotICAgICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LAotICAg
ICAgICBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwKLSAgICAgICAgU291cmNlSFRNTFZpZGVvRWxl
bWVudCwKLSAgICB9OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdl
MkQgdG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3RhcmdldC93aWR0aC9o
ZWlnaHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCi0gICAgLy8gT3RoZXJ3aXNl
LCBpdCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdvcmsuCi0gICAg
Ym9vbCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFs
aWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsCi0gICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJz
IGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wg
ZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBi
b29sIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0
aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlKTsKLQotICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKLSAgICAgICAgTnVsbEFsbG93
ZWQsCi0gICAgICAgIE51bGxOb3RBbGxvd2VkCi0gICAgfTsKLQotICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKLSAgICAvLyBp
cyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3IgdGhlIHRl
eEltYWdlIGNhbGwuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNl
IGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRh
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24pOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQgaXMgc2V0dGFi
bGUgYXMgaW4KLSAgICAvLyB5b3UgY2FuIHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9yIGNh
bGwgdGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5kCi0gICAgLy8gY29weVRleFN1YkltYWdl
MkQuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBm
b3JtYXQgaXMgbm90IHNldHRhYmxlLgotICAgIGJvb2wgdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1h
dChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCk7Ci0KLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgaXMgY29y
cmVjdCBzaXplCi0gICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVuc2lvbnMuCi0g
ICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKLQotICAg
IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1cmUgZm9y
bWF0cy4KLSAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3Jt
YXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4
dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0Lgot
ICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxp
ZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVz
c2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqKTsKLQot
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0FycmF5cy9F
bGVtZW50c30uCi0gICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlm
IGZyb250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdzIGFyZSB0aGUg
c2FtZS4KLSAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc3RlbmNpbCBm
dW5jLgotICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVy
ZiBhbmQgdGV4UGFyYW1ldGVyaS4KLSAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFtZiwgYm9v
bCBpc0Zsb2F0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCBHTCBlcnJvcnMg
dG8gY29uc29sZS4KLSAgICB2b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcm
KTsKLSAgICB2b2lkIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
LCBjb25zdCBjaGFyKiByZWFzb24pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50
IHdhcm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQotICAgIC8vIHVzZWQgb25seSB0byB3YXJu
IGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCi0gICAgdm9pZCBwcmludFdhcm5pbmdU
b0NvbnNvbGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFs
aWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25zLgotICAgIC8v
IEdlbmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCi0gICAgYm9vbCB2
YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCi0gICAgYm9vbCB2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0b3JzLgot
ICAgIGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KLSAgICBib29sIHZhbGlkYXRlQ2FwYWJpbGl0
eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1bmN0aW9u
cy4KLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSosIEdDM0Rz
aXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJBcnJheSos
IEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgdm9pZCos
IEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdDM0RzaXpl
aSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKLQotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJEYXRhLgot
ICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAwIGlm
IHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHVzYWdlKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1J
bWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3Jp
Z2luLgotICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBjYW52YXMgaXMg
cmVhZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KLSAgICBib29sIHZhbGlkYXRlSFRNTENh
bnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxlbWVudCos
IEV4Y2VwdGlvbkNvZGUmKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVhZHkgd291
bGRuJ3QgdGFpbnQgT3JpZ2luLgotICAgIGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKLSNlbmRpZgotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ7
dn0uCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0Rm
bG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSos
IEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCosIEdDM0Rz
aXplaSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
Zm9yIGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBmdW5jdGlvbnMu
Ci0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVy
dGhlciBwcm9jZXNzaW5nLgotICAgIGJvb2wgZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0Kik7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBiaW5kVGV4dHVy
ZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KLSAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5
IGJlZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8gdHJ1ZSB1cG9uIHJldHVybi4KLSAgICAvLyBS
ZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nl
c3NpbmcuCi0gICAgYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7Ci0KLSAgICAvLyBIZWxwZXJzIGZv
ciBzaW11bGF0aW5nIHZlcnRleEF0dHJpYjAKLSAgICB2b2lkIGluaXRWZXJ0ZXhBdHRyaWIwKCk7
Ci0gICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCk7Ci0g
ICAgdm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotCi0g
ICAgdm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKTsKLSAgICAvLyBIZWxwZXIgZm9yIHJl
c3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KLSAgICB2b2lkIG1heWJlUmVzdG9yZUNvbnRl
eHQoKTsKLQotICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxlZ2VkIGNv
ZGUgaW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAotICAgIC8vIGEgU2FmYXJpIG9yIENocm9t
ZSBleHRlbnNpb24uCi0gICAgYm9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3Q7
Ci0KLSAgICBlbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7Ci0gICAgICAgIERpc3BsYXlJ
bkNvbnNvbGUsCi0gICAgICAgIERvbnREaXNwbGF5SW5Db25zb2xlCi0gICAgfTsKLQotICAgIC8v
IFdyYXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0aGF0IHNl
bmRzIGEgbWVzc2FnZQotICAgIC8vIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCi0gICAgdm9p
ZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0gRGlzcGxh
eUluQ29uc29sZSk7Ci0KLSAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBj
b25zdDsKLQotICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBiYXNlZCBvbiB1
c2VyIHNldHRpbmcgYW5kCi0gICAgLy8gd2hldGhlciB0aGUgY3VycmVudCBGQk8gaGFzIGEgc3Rl
bmNpbCBidWZmZXIuCi0gICAgdm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7Ci0KLSAgICAvLyBIZWxw
ZXIgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCi0gICAgdm9pZCBlbmFi
bGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOwotCi0gICAgLy8g
Q2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMuCi0gICAg
SW50U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwotCi0gICAgLy8gRmlyc3QgdGltZSBjYWxsZWQs
IGlmIEVYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFsdWU7IG90aGVy
d2lzZSByZXR1cm4gMC4KLSAgICAvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUuCi0g
ICAgR0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOwotICAgIEdDM0RpbnQgZ2V0TWF4Q29sb3JB
dHRhY2htZW50cygpOwotCi0gICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7Ci0K
LSAgICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKLSAgICB2b2lkIHJlc3RvcmVD
dXJyZW50VGV4dHVyZTJEKCk7Ci0KLSAgICAvLyBDaGVjayBpZiBFWFRfZHJhd19idWZmZXJzIGV4
dGVuc2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wgcmVxdWly
ZW1lbnRzLgotICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworICAgIFdlYkdMMVJlbmRl
cmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyk7CisgICAgV2ViR0wxUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyk7CiB9OwotCisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29u
dGV4dC5pZGwJKHJldmlzaW9uIDE3Njk5NCkJKGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDoxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMZW51bTsKK3R5cGVkZWYgYm9vbGVhbiAgICAg
ICAgR0xib29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGJpdGZpZWxkOwordHlwZWRl
ZiBieXRlICAgICAgICAgICBHTGJ5dGU7ICAgICAgICAgLyogJ2J5dGUnIHNob3VsZCBiZSBhIHNp
Z25lZCA4IGJpdCB0eXBlLiAqLwordHlwZWRlZiBzaG9ydCAgICAgICAgICBHTHNob3J0OwordHlw
ZWRlZiBsb25nICAgICAgICAgICBHTGludDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgR0xzaXpl
aTsKK3R5cGVkZWYgbG9uZyBsb25nICAgICAgR0xpbnRwdHI7Cit0eXBlZGVmIGxvbmcgbG9uZyAg
ICAgIEdMc2l6ZWlwdHI7Cit0eXBlZGVmIG9jdGV0ICAgICAgICAgIEdMdWJ5dGU7ICAgICAgICAv
KiAnb2N0ZXQnIHNob3VsZCBiZSBhbiB1bnNpZ25lZCA4IGJpdCB0eXBlLiAqLwordHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBHTHVzaG9ydDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0x1aW50Owor
dHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xmbG9hdDsKK3R5cGVkZWYgdW5yZXN0cmljdGVk
IGZsb2F0IEdMY2xhbXBmOworCitbCisgICAgQ29uZGl0aW9uYWw9V0VCR0wsCisgICAgSlNDdXN0
b21NYXJrRnVuY3Rpb24sCisgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKK10gaW50ZXJmYWNlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeworCisgICAgLyog
Q2xlYXJCdWZmZXJNYXNrICovCisgICAgY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAg
ICAgICAgICAgICA9IDB4MDAwMDAxMDA7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQlVGRkVS
X0JJVCAgICAgICAgICAgICA9IDB4MDAwMDA0MDA7CisgICAgY29uc3QgR0xlbnVtIENPTE9SX0JV
RkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7CisKKyAgICAvKiBCZWdpbk1vZGUg
Ki8KKyAgICBjb25zdCBHTGVudW0gUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MDAwOworICAgIGNvbnN0IEdMZW51bSBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDE7CisgICAgY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9
IDB4MDAwMjsKKyAgICBjb25zdCBHTGVudW0gTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAg
ID0gMHgwMDAzOworICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAwMDQ7CisgICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAgICAgICAg
ICAgICA9IDB4MDAwNTsKKyAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfRkFOICAgICAgICAgICAg
ICAgICAgID0gMHgwMDA2OworCisgICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBp
biBFUzIwKSAqLworICAgIC8qICAgICAgTkVWRVIgKi8KKyAgICAvKiAgICAgIExFU1MgKi8KKyAg
ICAvKiAgICAgIEVRVUFMICovCisgICAgLyogICAgICBMRVFVQUwgKi8KKyAgICAvKiAgICAgIEdS
RUFURVIgKi8KKyAgICAvKiAgICAgIE5PVEVRVUFMICovCisgICAgLyogICAgICBHRVFVQUwgKi8K
KyAgICAvKiAgICAgIEFMV0FZUyAqLworCisgICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovCisg
ICAgY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7CisgICAg
Y29uc3QgR0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7CisgICAgY29u
c3QgR0xlbnVtIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMDsKKyAgICBj
b25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOworICAg
IGNvbnN0IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDI7Cisg
ICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA9IDB4MDMwMzsK
KyAgICBjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0
OworICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAgICAgPSAweDAz
MDU7CisKKyAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLworICAgIC8qICAgICAgWkVSTyAqLwor
ICAgIC8qICAgICAgT05FICovCisgICAgY29uc3QgR0xlbnVtIERTVF9DT0xPUiAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDMwNjsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xP
UiAgICAgICAgICAgID0gMHgwMzA3OworICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQSEFfU0FUVVJB
VEUgICAgICAgICAgICAgPSAweDAzMDg7CisgICAgLyogICAgICBTUkNfQUxQSEEgKi8KKyAgICAv
KiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KKyAgICAvKiAgICAgIERTVF9BTFBIQSAqLwor
ICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLworCisgICAgLyogQmxlbmRFcXVhdGlv
blNlcGFyYXRlICovCisgICAgY29uc3QgR0xlbnVtIEZVTkNfQUREICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODAwNjsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT04gICAgICAgICAg
ICAgICAgID0gMHg4MDA5OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAg
ICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworICAgIGNv
bnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgPSAweDg4M0Q7CisKKyAg
ICAvKiBCbGVuZFN1YnRyYWN0ICovCisgICAgY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAg
ICAgICAgICAgICAgICA9IDB4ODAwQTsKKyAgICBjb25zdCBHTGVudW0gRlVOQ19SRVZFUlNFX1NV
QlRSQUNUICAgICAgICAgID0gMHg4MDBCOworCisgICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rp
b25zICovCisgICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9
IDB4ODBDODsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAg
ID0gMHg4MEM5OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAg
ICAgPSAweDgwQ0E7CisgICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAg
ICAgICA9IDB4ODBDQjsKKyAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQ09MT1IgICAgICAgICAg
ICAgICAgID0gMHg4MDAxOworICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQ09M
T1IgICAgICAgPSAweDgwMDI7CisgICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAg
ICAgICAgICAgICA9IDB4ODAwMzsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBICAgICAgID0gMHg4MDA0OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9DT0xPUiAgICAg
ICAgICAgICAgICAgICAgPSAweDgwMDU7CisKKyAgICAvKiBCdWZmZXIgT2JqZWN0cyAqLworICAg
IGNvbnN0IEdMZW51bSBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgPSAweDg4OTI7Cisg
ICAgY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA9IDB4ODg5MzsK
KyAgICBjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0
OworICAgIGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgPSAweDg4
OTU7CisKKyAgICBjb25zdCBHTGVudW0gU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgID0g
MHg4OEUwOworICAgIGNvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAg
PSAweDg4RTQ7CisgICAgY29uc3QgR0xlbnVtIERZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAg
ICA9IDB4ODhFODsKKworICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfU0laRSAgICAgICAgICAgICAg
ICAgICAgPSAweDg3NjQ7CisgICAgY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAgICAgICAg
ICAgICAgICA9IDB4ODc2NTsKKworICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1ZFUlRFWF9BVFRS
SUIgICAgICAgICAgPSAweDg2MjY7CisKKyAgICAvKiBDdWxsRmFjZU1vZGUgKi8KKyAgICBjb25z
dCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OworICAgIGNv
bnN0IEdMZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0MDU7CisgICAg
Y29uc3QgR0xlbnVtIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA9IDB4MDQwODsKKwor
ICAgIC8qIERlcHRoRnVuY3Rpb24gKi8KKyAgICAvKiAgICAgIE5FVkVSICovCisgICAgLyogICAg
ICBMRVNTICovCisgICAgLyogICAgICBFUVVBTCAqLworICAgIC8qICAgICAgTEVRVUFMICovCisg
ICAgLyogICAgICBHUkVBVEVSICovCisgICAgLyogICAgICBOT1RFUVVBTCAqLworICAgIC8qICAg
ICAgR0VRVUFMICovCisgICAgLyogICAgICBBTFdBWVMgKi8KKworICAgIC8qIEVuYWJsZUNhcCAq
LworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgPSAweDBE
RTE7CisgICAgY29uc3QgR0xlbnVtIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA9IDB4
MEI0NDsKKyAgICBjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwQkUyOworICAgIGNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDBCRDA7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAg
ICA9IDB4MEI5MDsKKyAgICBjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAg
ICAgID0gMHgwQjcxOworICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX1RFU1QgICAgICAgICAgICAg
ICAgICAgPSAweDBDMTE7CisgICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAg
ICAgICAgICA9IDB4ODAzNzsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFICAgICAgID0gMHg4MDlFOworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0UgICAg
ICAgICAgICAgICAgPSAweDgwQTA7CisKKyAgICAvKiBFcnJvckNvZGUgKi8KKyAgICBjb25zdCBH
TGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICBjb25zdCBHTGVu
dW0gSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAwOworICAgIGNvbnN0IEdM
ZW51bSBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1MDE7CisgICAgY29uc3Qg
R0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsKKyAgICBjb25z
dCBHTGVudW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgwNTA1OworCisgICAg
LyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisgICAgY29uc3QgR0xlbnVtIENXICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKKyAgICBjb25zdCBHTGVudW0gQ0NXICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwOTAxOworCisgICAgLyogR2V0UE5hbWUgKi8KKyAgICBj
b25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOworICAg
IGNvbnN0IEdMZW51bSBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgPSAweDg0NkQ7Cisg
ICAgY29uc3QgR0xlbnVtIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9IDB4ODQ2RTsK
KyAgICBjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1
OworICAgIGNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAgICAgICAgICAgICAgICAgPSAweDBC
NDY7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA9IDB4
MEI3MDsKKyAgICBjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0g
MHgwQjcyOworICAgIGNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxVRSAgICAgICAgICAgICAg
PSAweDBCNzM7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAg
ICA9IDB4MEI3NDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAg
ICAgID0gMHgwQjkxOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZVTkMgICAgICAgICAgICAg
ICAgICAgPSAweDBCOTI7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRkFJTCAgICAgICAgICAg
ICAgICAgICA9IDB4MEI5NDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZB
SUwgICAgICAgID0gMHgwQjk1OworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BBU1NfREVQVEhf
UEFTUyAgICAgICAgPSAweDBCOTY7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUkVGICAgICAg
ICAgICAgICAgICAgICA9IDB4MEI5NzsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9N
QVNLICAgICAgICAgICAgID0gMHgwQjkzOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1dSSVRF
TUFTSyAgICAgICAgICAgICAgPSAweDBCOTg7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFD
S19GVU5DICAgICAgICAgICAgICA9IDB4ODgwMDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9C
QUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7CisgICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKKyAgICBjb25zdCBHTGVudW0gU1RF
TkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOworICAgIGNvbnN0IEdMZW51bSBT
VEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7CisgICAgY29uc3QgR0xlbnVt
IFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA9IDB4OENBNTsKKyAgICBjb25zdCBHTGVu
dW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOworICAgIGNvbnN0IEdM
ZW51bSBTQ0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBDMTA7CisgICAgLyogICAg
ICBTQ0lTU09SX1RFU1QgKi8KKyAgICBjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAg
ICAgICAgICAgID0gMHgwQzIyOworICAgIGNvbnN0IEdMZW51bSBDT0xPUl9XUklURU1BU0sgICAg
ICAgICAgICAgICAgPSAweDBDMjM7CisgICAgY29uc3QgR0xlbnVtIFVOUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICA9IDB4MENGNTsKKyAgICBjb25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICAgID0gMHgwRDA1OworICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9T
SVpFICAgICAgICAgICAgICAgPSAweDBEMzM7CisgICAgY29uc3QgR0xlbnVtIE1BWF9WSUVXUE9S
VF9ESU1TICAgICAgICAgICAgICA9IDB4MEQzQTsKKyAgICBjb25zdCBHTGVudW0gU1VCUElYRUxf
QklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOworICAgIGNvbnN0IEdMZW51bSBSRURfQklU
UyAgICAgICAgICAgICAgICAgICAgICAgPSAweDBENTI7CisgICAgY29uc3QgR0xlbnVtIEdSRUVO
X0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKKyAgICBjb25zdCBHTGVudW0gQkxV
RV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OworICAgIGNvbnN0IEdMZW51bSBB
TFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7CisgICAgY29uc3QgR0xlbnVt
IERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKKyAgICBjb25zdCBHTGVu
dW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OworICAgIGNvbnN0IEdM
ZW51bSBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJBMDA7CisgICAgLyogICAg
ICBQT0xZR09OX09GRlNFVF9GSUxMICovCisgICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VU
X0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9CSU5E
SU5HXzJEICAgICAgICAgICAgID0gMHg4MDY5OworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQlVG
RkVSUyAgICAgICAgICAgICAgICAgPSAweDgwQTg7CisgICAgY29uc3QgR0xlbnVtIFNBTVBMRVMg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKKyAgICBjb25zdCBHTGVudW0gU0FNUExF
X0NPVkVSQUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFBOworICAgIGNvbnN0IEdMZW51bSBTQU1Q
TEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7CisKKyAgICAvKiBHZXRUZXh0dXJl
UGFyYW1ldGVyICovCisgICAgLyogICAgICBURVhUVVJFX01BR19GSUxURVIgKi8KKyAgICAvKiAg
ICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqLworICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8K
KyAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9UICovCisKKyAgICBjb25zdCBHTGVudW0gQ09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOworCisgICAgLyogSGludE1vZGUgKi8K
KyAgICBjb25zdCBHTGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAw
OworICAgIGNvbnN0IEdMZW51bSBGQVNURVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEx
MDE7CisgICAgY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MTEwMjsKKworICAgIC8qIEhpbnRUYXJnZXQgKi8KKyAgICBjb25zdCBHTGVudW0gR0VORVJBVEVf
TUlQTUFQX0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKKworICAgIC8qIERhdGFUeXBlICovCisg
ICAgY29uc3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMDsK
KyAgICBjb25zdCBHTGVudW0gVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgID0gMHgxNDAx
OworICAgIGNvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0
MDI7CisgICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA9IDB4
MTQwMzsKKyAgICBjb25zdCBHTGVudW0gSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxNDA0OworICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAg
PSAweDE0MDU7CisgICAgY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MTQwNjsKKworICAgIC8qIFBpeGVsRm9ybWF0ICovCisgICAgY29uc3QgR0xlbnVtIERF
UFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKKyAgICBjb25zdCBHTGVudW0g
QUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA2OworICAgIGNvbnN0IEdMZW51
bSBSR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7CisgICAgY29uc3QgR0xl
bnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKKyAgICBjb25zdCBH
TGVudW0gTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA5OworICAgIGNvbnN0
IEdMZW51bSBMVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAweDE5MEE7CisKKyAgICAv
KiBQaXhlbFR5cGUgKi8KKyAgICAvKiAgICAgIFVOU0lHTkVEX0JZVEUgKi8KKyAgICBjb25zdCBH
TGVudW0gVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOworICAgIGNvbnN0
IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7CisgICAgY29u
c3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9IDB4ODM2MzsKKworICAg
IC8qIFNoYWRlcnMgKi8KKyAgICBjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAgICAgICAg
ICAgICAgICAgPSAweDhCMzA7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9TSEFERVIgICAgICAg
ICAgICAgICAgICAgID0gMHg4QjMxOworICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX0FUVFJJ
QlMgICAgICAgICAgICAgICA9IDB4ODg2OTsKKyAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7CisgICAgY29uc3QgR0xlbnVtIE1BWF9WQVJZ
SU5HX1ZFQ1RPUlMgICAgICAgICAgICAgID0gMHg4REZDOworICAgIGNvbnN0IEdMZW51bSBNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKKyAgICBjb25zdCBHTGVudW0g
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7CisgICAgY29uc3QgR0xl
bnVtIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgID0gMHg4ODcyOworICAgIGNvbnN0
IEdMZW51bSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9IDB4OERGRDsKKyAgICBj
b25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7Cisg
ICAgY29uc3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgID0gMHg4Qjgw
OworICAgIGNvbnN0IEdMZW51bSBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI4MjsKKyAgICBjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAg
PSAweDhCODM7CisgICAgY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAg
ICAgID0gMHg4Qjg1OworICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAg
ICAgICAgICA9IDB4OEI4NjsKKyAgICBjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMgICAg
ICAgICAgICAgICAgPSAweDhCODk7CisgICAgY29uc3QgR0xlbnVtIFNIQURJTkdfTEFOR1VBR0Vf
VkVSU0lPTiAgICAgICAgID0gMHg4QjhDOworICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1BST0dS
QU0gICAgICAgICAgICAgICAgICA9IDB4OEI4RDsKKworICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAq
LworICAgIGNvbnN0IEdMZW51bSBORVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAy
MDA7CisgICAgY29uc3QgR0xlbnVtIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDIwMTsKKyAgICBjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMjAyOworICAgIGNvbnN0IEdMZW51bSBMRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDAyMDM7CisgICAgY29uc3QgR0xlbnVtIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwNDsKKyAgICBjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwMjA1OworICAgIGNvbnN0IEdMZW51bSBHRVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAyMDY7CisgICAgY29uc3QgR0xlbnVtIEFMV0FZUyAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDIwNzsKKworICAgIC8qIFN0ZW5jaWxPcCAqLworICAgIC8qICAgICAgWkVS
TyAqLworICAgIGNvbnN0IEdMZW51bSBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDFFMDA7CisgICAgY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MUUwMTsKKyAgICBjb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxRTAyOworICAgIGNvbnN0IEdMZW51bSBERUNSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDFFMDM7CisgICAgY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTUwQTsKKyAgICBjb25zdCBHTGVudW0gSU5DUl9XUkFQICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NTA3OworICAgIGNvbnN0IEdMZW51bSBERUNSX1dSQVAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg1MDg7CisKKyAgICAvKiBTdHJpbmdOYW1lICovCisgICAgY29uc3QgR0xl
bnVtIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMDsKKyAgICBjb25zdCBH
TGVudW0gUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAxOworICAgIGNvbnN0
IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7CisKKyAgICAv
KiBUZXh0dXJlTWFnRmlsdGVyICovCisgICAgY29uc3QgR0xlbnVtIE5FQVJFU1QgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MjYwMDsKKyAgICBjb25zdCBHTGVudW0gTElORUFSICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgyNjAxOworCisgICAgLyogVGV4dHVyZU1pbkZpbHRlciAqLwor
ICAgIC8qICAgICAgTkVBUkVTVCAqLworICAgIC8qICAgICAgTElORUFSICovCisgICAgY29uc3Qg
R0xlbnVtIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsKKyAgICBjb25z
dCBHTGVudW0gTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0gMHgyNzAxOworICAgIGNv
bnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7CisgICAg
Y29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICA9IDB4MjcwMzsKKwor
ICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
TUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVS
RV9NSU5fRklMVEVSICAgICAgICAgICAgID0gMHgyODAxOworICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7CisgICAgY29uc3QgR0xlbnVtIFRF
WFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKKworICAgIC8qIFRleHR1cmVU
YXJnZXQgKi8KKyAgICAvKiAgICAgIFRFWFRVUkVfMkQgKi8KKyAgICBjb25zdCBHTGVudW0gVEVY
VFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOworCisgICAgY29uc3QgR0xlbnVt
IFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKKyAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0OworICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7CisgICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsKKyAgICBjb25z
dCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3OworICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7CisgICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA9IDB4ODUxOTsKKyAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0gMHg4NTFBOwor
ICAgIGNvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7
CisKKyAgICAvKiBUZXh0dXJlVW5pdCAqLworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMCAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0QzA7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMyOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
MyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzM7CisgICAgY29uc3QgR0xlbnVtIFRFWFRV
UkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKKyAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTUgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OworICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzY7CisgICAgY29uc3QgR0xlbnVt
IFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKKyAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4OworICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzk7CisgICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKKyAgICBjb25z
dCBHTGVudW0gVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENCOworICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0M7CisgICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRDsKKyAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENFOwor
ICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Y7
CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
MDsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEQxOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDI7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODREMzsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEQ0OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0RDU7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRENjsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIzICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEQ3OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjQgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0RDg7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODREOTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI2ICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NERBOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjcgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0REI7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyOCAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODREQzsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI5ICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEREOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMzAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0REU7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUz
MSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKKyAgICBjb25zdCBHTGVudW0gQUNUSVZF
X1RFWFRVUkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOworCisgICAgLyogVGV4dHVyZVdyYXBN
b2RlICovCisgICAgY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MjkwMTsKKyAgICBjb25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAg
ID0gMHg4MTJGOworICAgIGNvbnN0IEdMZW51bSBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAg
ICAgPSAweDgzNzA7CisKKyAgICAvKiBVbmlmb3JtIFR5cGVzICovCisgICAgY29uc3QgR0xlbnVt
IEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MDsKKyAgICBjb25zdCBHTGVu
dW0gRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOworICAgIGNvbnN0IEdM
ZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7CisgICAgY29uc3Qg
R0xlbnVtIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MzsKKyAgICBjb25z
dCBHTGVudW0gSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU0OworICAgIGNv
bnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7CisgICAg
Y29uc3QgR0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NjsKKyAg
ICBjb25zdCBHTGVudW0gQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU3Owor
ICAgIGNvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTg7
CisgICAgY29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
OTsKKyAgICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjVBOworICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNUI7CisgICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1QzsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjVFOworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAg
ICAgPSAweDhCNjA7CisKKyAgICAvKiBWZXJ0ZXggQXJyYXlzICovCisgICAgY29uc3QgR0xlbnVt
IFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7CisgICAgY29uc3Qg
R0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2MjM7CisgICAg
Y29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgPSAweDg2MjQ7
CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgPSAw
eDg2MjU7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCAg
ICAgPSAweDg4NkE7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRF
UiAgICAgICAgPSAweDg2NDU7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlf
QlVGRkVSX0JJTkRJTkcgPSAweDg4OUY7CisKKyAgICAvKiBTaGFkZXIgU291cmNlICovCisgICAg
Y29uc3QgR0xlbnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4OEI4MTsKKwor
ICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCisgICAgY29uc3QgR0xl
bnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKKyAgICBjb25zdCBH
TGVudW0gTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4REYxOworICAgIGNvbnN0
IEdMZW51bSBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgPSAweDhERjI7CisgICAgY29u
c3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKKyAgICBj
b25zdCBHTGVudW0gTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REY0OworICAg
IGNvbnN0IEdMZW51bSBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjU7CisK
KyAgICAvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSICAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKKyAgICBjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4RDQxOworCisgICAgY29uc3QgR0xlbnVtIFJH
QkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKKyAgICBjb25zdCBHTGVudW0g
UkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OworICAgIGNvbnN0IEdMZW51
bSBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhENjI7CisgICAgY29uc3QgR0xl
bnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKKyAgICBjb25zdCBH
TGVudW0gU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOworICAgIGNvbnN0
IEdMZW51bSBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgPSAweDhENDg7CisgICAgY29u
c3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKKworICAg
IGNvbnN0IEdMZW51bSBTUkdCX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEM0MDsKKyAgICBjb25zdCBHTGVudW0gU1JHQl9BTFBIQV9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhDNDI7CisgICAgY29uc3QgR0xlbnVtIFNSR0I4X0FMUEhB
OF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQzOworICAgIGNvbnN0IEdM
ZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVCAgICA9IDB4ODIx
MDsKKworICAgIGNvbnN0IEdMZW51bSBNSU5fRVhUICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDgwMDc7CisgICAgY29uc3QgR0xlbnVtIE1BWF9FWFQgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODAwODsKKworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAg
ICAgPSAweDhENDI7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAg
ICAgICA9IDB4OEQ0MzsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZP
Uk1BVCAgID0gMHg4RDQ0OworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfUkVEX1NJWkUg
ICAgICAgICAgPSAweDhENTA7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9HUkVFTl9T
SVpFICAgICAgICA9IDB4OEQ1MTsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVf
U0laRSAgICAgICAgID0gMHg4RDUyOworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQUxQ
SEFfU0laRSAgICAgICAgPSAweDhENTM7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9E
RVBUSF9TSVpFICAgICAgICA9IDB4OEQ1NDsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVS
X1NURU5DSUxfU0laRSAgICAgID0gMHg4RDU1OworCisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgID0gMHg4Q0QwOworICAgIGNvbnN0
IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA9IDB4
OENEMTsKKyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xF
VkVMICAgICAgICAgPSAweDhDRDI7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFID0gMHg4Q0QzOworCisgICAgY29uc3QgR0xlbnVt
IENPTE9SX0FUVEFDSE1FTlQwICAgICAgICAgICAgICA9IDB4OENFMDsKKyAgICBjb25zdCBHTGVu
dW0gREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4RDAwOworICAgIGNvbnN0IEdM
ZW51bSBTVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgPSAweDhEMjA7CisgICAgY29uc3Qg
R0xlbnVtIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA9IDB4ODIxQTsKKworICAgIGNv
bnN0IEdMZW51bSBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworCisgICAgY29u
c3QgR0xlbnVtIEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4
Q0Q1OworICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQg
ICAgICAgICA9IDB4OENENjsKKyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9NSVNTSU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgID0gMHg4Q0Q5OworICAgIGNvbnN0IEdM
ZW51bSBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA9IDB4OENERDsK
KworICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhD
QTY7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4
OENBNzsKKyAgICBjb25zdCBHTGVudW0gTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgID0g
MHg4NEU4OworCisgICAgY29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
ICA9IDB4MDUwNjsKKworICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovCisgICAgY29uc3Qg
R0xlbnVtIFVOUEFDS19GTElQX1lfV0VCR0wgICAgICAgICAgICAgICAgPSAweDkyNDA7CisgICAg
Y29uc3QgR0xlbnVtIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7
CisgICAgY29uc3QgR0xlbnVtIENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICAgICAgPSAw
eDkyNDI7CisgICAgY29uc3QgR0xlbnVtIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VC
R0wgPSAweDkyNDM7CisgICAgY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAg
ICAgICAgICAgPSAweDkyNDQ7CisKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3
aW5nQnVmZmVyV2lkdGg7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1
ZmZlckhlaWdodDsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGF0dGFjaFNoYWRlcihX
ZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRp
b24oV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCwgRE9NU3RyaW5nIG5hbWUpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJp
bmRCdWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kRnJhbWVidWZm
ZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CisgICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFJlbmRl
cmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJp
bmRUZXh0dXJlKEdMZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdM
Y2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7CisgICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJh
dGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBibGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFj
dG9yKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jU2Vw
YXJhdGUoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVu
dW0gZHN0QWxwaGEpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEs
IEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXc/
IGRhdGEsIEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRy
IHNpemUsIEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0
ciBvZmZzZXQsIEFycmF5QnVmZmVyPyBkYXRhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQs
IEdMaW50cHRyIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhKTsKKworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIEdMZW51bSAgICAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51bSB0
YXJnZXQpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJp
dGZpZWxkIG1hc2spOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVh
ckNvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xh
bXBmIGFscGhhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJE
ZXB0aChHTGNsYW1wZiBkZXB0aCk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIGNsZWFyU3RlbmNpbChHTGludCBzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgY29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29s
ZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciBzaGFk
ZXIpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRU
ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEFycmF5
QnVmZmVyVmlldyBkYXRhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7CisgICAgCisgICAgW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgW1N0cmljdFR5
cGVDaGVja2luZ10gV2ViR0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gV2ViR0xGcmFtZWJ1ZmZlciBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIFdlYkdMUHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7CisgICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gV2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRlciBjcmVh
dGVTaGFkZXIoR0xlbnVtIHR5cGUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMVGV4
dHVyZSBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgY3VsbEZhY2UoR0xlbnVtIG1vZGUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1l
YnVmZmVyIGZyYW1lYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZl
ciByZW5kZXJidWZmZXIpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBk
ZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CisKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhGdW5jKEdMZW51bSBmdW5j
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhNYXNrKEdMYm9v
bGVhbiBmbGFnKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhS
YW5nZShHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcik7CisgICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZGV0YWNoU2hhZGVyKFdlYkdMUHJv
Z3JhbSBwcm9ncmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBkaXNhYmxlKEdMZW51bSBjYXApOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShHTHVpbnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBH
THNpemVpIGNvdW50KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdM
ZW51bSB0eXBlLCBHTGludHB0ciBvZmZzZXQpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGVuYWJsZShHTGVudW0gY2FwKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShH
THVpbnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBmaW5p
c2goKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xl
bnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBm
cmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xl
bnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlIHRleHR1cmUsIEdMaW50IGxldmVsKTsKKyAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoR0xl
bnVtIHRhcmdldCk7CisgICAgCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFt
LCBHTHVpbnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gV2ViR0xBY3RpdmVJbmZvIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0s
IEdMdWludCBpbmRleCk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtIHByb2dyYW0p
OworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7CisKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b21dIGFueSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIHBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMgZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIEdMZW51bSBnZXRFcnJvcigpOworCisgICAgLy8gb2JqZWN0IGdldEV4dGVuc2lvbihE
T01TdHJpbmcgbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0
RXh0ZW5zaW9uKERPTVN0cmluZyBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOworICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UGFy
YW1ldGVyKEdMZW51bSBwbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIGFueSBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtLCBHTGVudW0gcG5hbWUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJu
ZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3Jh
bUluZm9Mb2coV2ViR0xQcm9ncmFtIHByb2dyYW0pOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIg
c2hhZGVyLCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRS
ZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBn
ZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0IGdldFNo
YWRlclByZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5
cGUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdB
cz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2Vx
dWVuY2U8RE9NU3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFRleFBhcmFtZXRl
cihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbik7CisKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZv
cm1Mb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOworCisgICAg
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRWZXJ0
ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gR0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0x1aW50IGluZGV4LCBH
TGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhp
bnQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IEdMYm9vbGVhbiAgICBpc0J1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0NvbnRleHRMb3N0KCk7CisgICAgW1N0cmljdFR5
cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVm
ZmVyIGZyYW1lYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAg
aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBHTGJvb2xlYW4gICAgaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVm
ZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNTaGFkZXIoV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAg
aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgbGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGxpbmtQcm9ncmFtKFdlYkdM
UHJvZ3JhbSBwcm9ncmFtKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
cGl4ZWxTdG9yZWkoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxv
YXQgdW5pdHMpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmll
dyBwaXhlbHMpOworICAgIAorICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBy
ZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgcmVuZGVyYnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgc2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9v
bGVhbiBpbnZlcnQpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lz
c29yKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBzaGFk
ZXJTb3VyY2UoV2ViR0xTaGFkZXIgc2hhZGVyLCBET01TdHJpbmcgc3RyaW5nKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmMoR0xlbnVtIGZ1bmMsIEdM
aW50IHJlZiwgR0x1aW50IG1hc2spOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBzdGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQg
cmVmLCBHTHVpbnQgbWFzayk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IHN0ZW5jaWxNYXNrKEdMdWludCBtYXNrKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgc3RlbmNpbE1hc2tTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZh
aWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgc3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWls
LCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgdGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
IEdMZmxvYXQgcGFyYW0pOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0
ZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwor
CisgICAgLy8gU3VwcG9ydGVkIGZvcm1zOgorICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8g
cGl4ZWxzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMpOworI2lmIGRlZmluZWQo
RU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhU
TUxWaWRlb0VsZW1lbnQ/IHZpZGVvKTsKKyNlbmRpZgorCisgICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZp
ZXc/IHBpeGVscyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VE
YXRhPyBwaXhlbHMpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJ
bWFnZUVsZW1lbnQ/IGltYWdlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBIVE1MQ2FudmFzRWxlbWVudD8gY2FudmFzKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykg
JiYgRU5BQkxFX1ZJREVPCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRN
TFZpZGVvRWxlbWVudD8gdmlkZW8pOworI2VuZGlmCisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBHTGZsb2F0IHgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIEZsb2F0MzJBcnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTFpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGlu
dCB4KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCB1bmlmb3JtMWl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5
IHYpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtMmYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCB1bmlmb3JtMmZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkg
dik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm0yaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5p
Zm9ybTJpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmKFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9h
dCB6KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCB1bmlmb3JtM2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkgdik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVu
aWZvcm0zaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xpbnQgeik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgdW5pZm9ybTNpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJB
cnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybTRmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxv
YXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0
aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGl2KFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOworCisgICAgW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJm
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxv
YXQzMkFycmF5IGFycmF5KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1N
YXRyaXg0ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIEZsb2F0MzJBcnJheSBhcnJheSk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFt
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworCisgICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjFmKEdMdWludCBpbmR4LCBHTGZs
b2F0IHgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRy
aWIxZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5keCwgR0xmbG9h
dCB4LCBHTGZsb2F0IHkpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2
ZXJ0ZXhBdHRyaWIyZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CisgICAgW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFy
cmF5IHZhbHVlcyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRl
eEF0dHJpYjRmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBH
TGZsb2F0IHcpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhB
dHRyaWI0ZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYlBv
aW50ZXIoR0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9y
bWFsaXplZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIEdMaW50cHRyIG9mZnNldCk7CisKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCSh3b3Jr
aW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdD
b250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsNjQ3ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMZW51bTsKLXR5cGVkZWYgYm9vbGVhbiAgICAg
ICAgR0xib29sZWFuOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGJpdGZpZWxkOwotdHlwZWRl
ZiBieXRlICAgICAgICAgICBHTGJ5dGU7ICAgICAgICAgLyogJ2J5dGUnIHNob3VsZCBiZSBhIHNp
Z25lZCA4IGJpdCB0eXBlLiAqLwotdHlwZWRlZiBzaG9ydCAgICAgICAgICBHTHNob3J0OwotdHlw
ZWRlZiBsb25nICAgICAgICAgICBHTGludDsKLXR5cGVkZWYgbG9uZyAgICAgICAgICAgR0xzaXpl
aTsKLXR5cGVkZWYgbG9uZyBsb25nICAgICAgR0xpbnRwdHI7Ci10eXBlZGVmIGxvbmcgbG9uZyAg
ICAgIEdMc2l6ZWlwdHI7Ci10eXBlZGVmIG9jdGV0ICAgICAgICAgIEdMdWJ5dGU7ICAgICAgICAv
KiAnb2N0ZXQnIHNob3VsZCBiZSBhbiB1bnNpZ25lZCA4IGJpdCB0eXBlLiAqLwotdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBHTHVzaG9ydDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0x1aW50Owot
dHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xmbG9hdDsKLXR5cGVkZWYgdW5yZXN0cmljdGVk
IGZsb2F0IEdMY2xhbXBmOwotCiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCR0wsCiAgICAgSlNDdXN0
b21NYXJrRnVuY3Rpb24sCiAgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLV0gaW50ZXJmYWNlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewotCi0gICAgLyog
Q2xlYXJCdWZmZXJNYXNrICovCi0gICAgY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAg
ICAgICAgICAgICA9IDB4MDAwMDAxMDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQlVGRkVS
X0JJVCAgICAgICAgICAgICA9IDB4MDAwMDA0MDA7Ci0gICAgY29uc3QgR0xlbnVtIENPTE9SX0JV
RkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7Ci0KLSAgICAvKiBCZWdpbk1vZGUg
Ki8KLSAgICBjb25zdCBHTGVudW0gUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MDAwOwotICAgIGNvbnN0IEdMZW51bSBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDE7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9
IDB4MDAwMjsKLSAgICBjb25zdCBHTGVudW0gTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAg
ID0gMHgwMDAzOwotICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAwMDQ7Ci0gICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAgICAgICAg
ICAgICA9IDB4MDAwNTsKLSAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfRkFOICAgICAgICAgICAg
ICAgICAgID0gMHgwMDA2OwotCi0gICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBp
biBFUzIwKSAqLwotICAgIC8qICAgICAgTkVWRVIgKi8KLSAgICAvKiAgICAgIExFU1MgKi8KLSAg
ICAvKiAgICAgIEVRVUFMICovCi0gICAgLyogICAgICBMRVFVQUwgKi8KLSAgICAvKiAgICAgIEdS
RUFURVIgKi8KLSAgICAvKiAgICAgIE5PVEVRVUFMICovCi0gICAgLyogICAgICBHRVFVQUwgKi8K
LSAgICAvKiAgICAgIEFMV0FZUyAqLwotCi0gICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovCi0g
ICAgY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Ci0gICAg
Y29uc3QgR0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7Ci0gICAgY29u
c3QgR0xlbnVtIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMDsKLSAgICBj
b25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOwotICAg
IGNvbnN0IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDI7Ci0g
ICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA9IDB4MDMwMzsK
LSAgICBjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0
OwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAgICAgPSAweDAz
MDU7Ci0KLSAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLwotICAgIC8qICAgICAgWkVSTyAqLwot
ICAgIC8qICAgICAgT05FICovCi0gICAgY29uc3QgR0xlbnVtIERTVF9DT0xPUiAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDMwNjsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xP
UiAgICAgICAgICAgID0gMHgwMzA3OwotICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQSEFfU0FUVVJB
VEUgICAgICAgICAgICAgPSAweDAzMDg7Ci0gICAgLyogICAgICBTUkNfQUxQSEEgKi8KLSAgICAv
KiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KLSAgICAvKiAgICAgIERTVF9BTFBIQSAqLwot
ICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLwotCi0gICAgLyogQmxlbmRFcXVhdGlv
blNlcGFyYXRlICovCi0gICAgY29uc3QgR0xlbnVtIEZVTkNfQUREICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODAwNjsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT04gICAgICAgICAg
ICAgICAgID0gMHg4MDA5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAg
ICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLwotICAgIGNv
bnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgPSAweDg4M0Q7Ci0KLSAg
ICAvKiBCbGVuZFN1YnRyYWN0ICovCi0gICAgY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAg
ICAgICAgICAgICAgICA9IDB4ODAwQTsKLSAgICBjb25zdCBHTGVudW0gRlVOQ19SRVZFUlNFX1NV
QlRSQUNUICAgICAgICAgID0gMHg4MDBCOwotCi0gICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rp
b25zICovCi0gICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9
IDB4ODBDODsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAg
ID0gMHg4MEM5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAg
ICAgPSAweDgwQ0E7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAg
ICAgICA9IDB4ODBDQjsKLSAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQ09MT1IgICAgICAgICAg
ICAgICAgID0gMHg4MDAxOwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQ09M
T1IgICAgICAgPSAweDgwMDI7Ci0gICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAg
ICAgICAgICAgICA9IDB4ODAwMzsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBICAgICAgID0gMHg4MDA0OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9DT0xPUiAgICAg
ICAgICAgICAgICAgICAgPSAweDgwMDU7Ci0KLSAgICAvKiBCdWZmZXIgT2JqZWN0cyAqLwotICAg
IGNvbnN0IEdMZW51bSBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgPSAweDg4OTI7Ci0g
ICAgY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA9IDB4ODg5MzsK
LSAgICBjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0
OwotICAgIGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgPSAweDg4
OTU7Ci0KLSAgICBjb25zdCBHTGVudW0gU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgID0g
MHg4OEUwOwotICAgIGNvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAg
PSAweDg4RTQ7Ci0gICAgY29uc3QgR0xlbnVtIERZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAg
ICA9IDB4ODhFODsKLQotICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfU0laRSAgICAgICAgICAgICAg
ICAgICAgPSAweDg3NjQ7Ci0gICAgY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAgICAgICAg
ICAgICAgICA9IDB4ODc2NTsKLQotICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1ZFUlRFWF9BVFRS
SUIgICAgICAgICAgPSAweDg2MjY7Ci0KLSAgICAvKiBDdWxsRmFjZU1vZGUgKi8KLSAgICBjb25z
dCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OwotICAgIGNv
bnN0IEdMZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0MDU7Ci0gICAg
Y29uc3QgR0xlbnVtIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA9IDB4MDQwODsKLQot
ICAgIC8qIERlcHRoRnVuY3Rpb24gKi8KLSAgICAvKiAgICAgIE5FVkVSICovCi0gICAgLyogICAg
ICBMRVNTICovCi0gICAgLyogICAgICBFUVVBTCAqLwotICAgIC8qICAgICAgTEVRVUFMICovCi0g
ICAgLyogICAgICBHUkVBVEVSICovCi0gICAgLyogICAgICBOT1RFUVVBTCAqLwotICAgIC8qICAg
ICAgR0VRVUFMICovCi0gICAgLyogICAgICBBTFdBWVMgKi8KLQotICAgIC8qIEVuYWJsZUNhcCAq
LwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgPSAweDBE
RTE7Ci0gICAgY29uc3QgR0xlbnVtIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA9IDB4
MEI0NDsKLSAgICBjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwQkUyOwotICAgIGNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDBCRDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAg
ICA9IDB4MEI5MDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAg
ICAgID0gMHgwQjcxOwotICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX1RFU1QgICAgICAgICAgICAg
ICAgICAgPSAweDBDMTE7Ci0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAg
ICAgICAgICA9IDB4ODAzNzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFICAgICAgID0gMHg4MDlFOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0UgICAg
ICAgICAgICAgICAgPSAweDgwQTA7Ci0KLSAgICAvKiBFcnJvckNvZGUgKi8KLSAgICBjb25zdCBH
TGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLSAgICBjb25zdCBHTGVu
dW0gSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAwOwotICAgIGNvbnN0IEdM
ZW51bSBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1MDE7Ci0gICAgY29uc3Qg
R0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsKLSAgICBjb25z
dCBHTGVudW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgwNTA1OwotCi0gICAg
LyogRnJvbnRGYWNlRGlyZWN0aW9uICovCi0gICAgY29uc3QgR0xlbnVtIENXICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKLSAgICBjb25zdCBHTGVudW0gQ0NXICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwOTAxOwotCi0gICAgLyogR2V0UE5hbWUgKi8KLSAgICBj
b25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOwotICAg
IGNvbnN0IEdMZW51bSBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgPSAweDg0NkQ7Ci0g
ICAgY29uc3QgR0xlbnVtIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9IDB4ODQ2RTsK
LSAgICBjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1
OwotICAgIGNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAgICAgICAgICAgICAgICAgPSAweDBC
NDY7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA9IDB4
MEI3MDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0g
MHgwQjcyOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxVRSAgICAgICAgICAgICAg
PSAweDBCNzM7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAg
ICA9IDB4MEI3NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAg
ICAgID0gMHgwQjkxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZVTkMgICAgICAgICAgICAg
ICAgICAgPSAweDBCOTI7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRkFJTCAgICAgICAgICAg
ICAgICAgICA9IDB4MEI5NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZB
SUwgICAgICAgID0gMHgwQjk1OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BBU1NfREVQVEhf
UEFTUyAgICAgICAgPSAweDBCOTY7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUkVGICAgICAg
ICAgICAgICAgICAgICA9IDB4MEI5NzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9N
QVNLICAgICAgICAgICAgID0gMHgwQjkzOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1dSSVRF
TUFTSyAgICAgICAgICAgICAgPSAweDBCOTg7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFD
S19GVU5DICAgICAgICAgICAgICA9IDB4ODgwMDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9C
QUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKLSAgICBjb25zdCBHTGVudW0gU1RF
TkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOwotICAgIGNvbnN0IEdMZW51bSBT
VEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7Ci0gICAgY29uc3QgR0xlbnVt
IFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA9IDB4OENBNTsKLSAgICBjb25zdCBHTGVu
dW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOwotICAgIGNvbnN0IEdM
ZW51bSBTQ0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBDMTA7Ci0gICAgLyogICAg
ICBTQ0lTU09SX1RFU1QgKi8KLSAgICBjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAg
ICAgICAgICAgID0gMHgwQzIyOwotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9XUklURU1BU0sgICAg
ICAgICAgICAgICAgPSAweDBDMjM7Ci0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICA9IDB4MENGNTsKLSAgICBjb25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICAgID0gMHgwRDA1OwotICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9T
SVpFICAgICAgICAgICAgICAgPSAweDBEMzM7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WSUVXUE9S
VF9ESU1TICAgICAgICAgICAgICA9IDB4MEQzQTsKLSAgICBjb25zdCBHTGVudW0gU1VCUElYRUxf
QklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOwotICAgIGNvbnN0IEdMZW51bSBSRURfQklU
UyAgICAgICAgICAgICAgICAgICAgICAgPSAweDBENTI7Ci0gICAgY29uc3QgR0xlbnVtIEdSRUVO
X0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKLSAgICBjb25zdCBHTGVudW0gQkxV
RV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OwotICAgIGNvbnN0IEdMZW51bSBB
TFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7Ci0gICAgY29uc3QgR0xlbnVt
IERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKLSAgICBjb25zdCBHTGVu
dW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OwotICAgIGNvbnN0IEdM
ZW51bSBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJBMDA7Ci0gICAgLyogICAg
ICBQT0xZR09OX09GRlNFVF9GSUxMICovCi0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VU
X0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9CSU5E
SU5HXzJEICAgICAgICAgICAgID0gMHg4MDY5OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQlVG
RkVSUyAgICAgICAgICAgICAgICAgPSAweDgwQTg7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRVMg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExF
X0NPVkVSQUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFBOwotICAgIGNvbnN0IEdMZW51bSBTQU1Q
TEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7Ci0KLSAgICAvKiBHZXRUZXh0dXJl
UGFyYW1ldGVyICovCi0gICAgLyogICAgICBURVhUVVJFX01BR19GSUxURVIgKi8KLSAgICAvKiAg
ICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqLwotICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8K
LSAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9UICovCi0KLSAgICBjb25zdCBHTGVudW0gQ09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOwotCi0gICAgLyogSGludE1vZGUgKi8K
LSAgICBjb25zdCBHTGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAw
OwotICAgIGNvbnN0IEdMZW51bSBGQVNURVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEx
MDE7Ci0gICAgY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MTEwMjsKLQotICAgIC8qIEhpbnRUYXJnZXQgKi8KLSAgICBjb25zdCBHTGVudW0gR0VORVJBVEVf
TUlQTUFQX0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKLQotICAgIC8qIERhdGFUeXBlICovCi0g
ICAgY29uc3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMDsK
LSAgICBjb25zdCBHTGVudW0gVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgID0gMHgxNDAx
OwotICAgIGNvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0
MDI7Ci0gICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA9IDB4
MTQwMzsKLSAgICBjb25zdCBHTGVudW0gSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxNDA0OwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAg
PSAweDE0MDU7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MTQwNjsKLQotICAgIC8qIFBpeGVsRm9ybWF0ICovCi0gICAgY29uc3QgR0xlbnVtIERF
UFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKLSAgICBjb25zdCBHTGVudW0g
QUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA2OwotICAgIGNvbnN0IEdMZW51
bSBSR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7Ci0gICAgY29uc3QgR0xl
bnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKLSAgICBjb25zdCBH
TGVudW0gTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA5OwotICAgIGNvbnN0
IEdMZW51bSBMVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAweDE5MEE7Ci0KLSAgICAv
KiBQaXhlbFR5cGUgKi8KLSAgICAvKiAgICAgIFVOU0lHTkVEX0JZVEUgKi8KLSAgICBjb25zdCBH
TGVudW0gVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOwotICAgIGNvbnN0
IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7Ci0gICAgY29u
c3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9IDB4ODM2MzsKLQotICAg
IC8qIFNoYWRlcnMgKi8KLSAgICBjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAgICAgICAg
ICAgICAgICAgPSAweDhCMzA7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9TSEFERVIgICAgICAg
ICAgICAgICAgICAgID0gMHg4QjMxOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX0FUVFJJ
QlMgICAgICAgICAgICAgICA9IDB4ODg2OTsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WQVJZ
SU5HX1ZFQ1RPUlMgICAgICAgICAgICAgID0gMHg4REZDOwotICAgIGNvbnN0IEdMZW51bSBNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKLSAgICBjb25zdCBHTGVudW0g
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7Ci0gICAgY29uc3QgR0xl
bnVtIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgID0gMHg4ODcyOwotICAgIGNvbnN0
IEdMZW51bSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9IDB4OERGRDsKLSAgICBj
b25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7Ci0g
ICAgY29uc3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgID0gMHg4Qjgw
OwotICAgIGNvbnN0IEdMZW51bSBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI4MjsKLSAgICBjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAg
PSAweDhCODM7Ci0gICAgY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAg
ICAgID0gMHg4Qjg1OwotICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAg
ICAgICAgICA9IDB4OEI4NjsKLSAgICBjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMgICAg
ICAgICAgICAgICAgPSAweDhCODk7Ci0gICAgY29uc3QgR0xlbnVtIFNIQURJTkdfTEFOR1VBR0Vf
VkVSU0lPTiAgICAgICAgID0gMHg4QjhDOwotICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1BST0dS
QU0gICAgICAgICAgICAgICAgICA9IDB4OEI4RDsKLQotICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAq
LwotICAgIGNvbnN0IEdMZW51bSBORVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAy
MDA7Ci0gICAgY29uc3QgR0xlbnVtIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDIwMTsKLSAgICBjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMjAyOwotICAgIGNvbnN0IEdMZW51bSBMRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDAyMDM7Ci0gICAgY29uc3QgR0xlbnVtIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwNDsKLSAgICBjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwMjA1OwotICAgIGNvbnN0IEdMZW51bSBHRVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAyMDY7Ci0gICAgY29uc3QgR0xlbnVtIEFMV0FZUyAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDIwNzsKLQotICAgIC8qIFN0ZW5jaWxPcCAqLwotICAgIC8qICAgICAgWkVS
TyAqLwotICAgIGNvbnN0IEdMZW51bSBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDFFMDA7Ci0gICAgY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MUUwMTsKLSAgICBjb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxRTAyOwotICAgIGNvbnN0IEdMZW51bSBERUNSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDFFMDM7Ci0gICAgY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTUwQTsKLSAgICBjb25zdCBHTGVudW0gSU5DUl9XUkFQICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NTA3OwotICAgIGNvbnN0IEdMZW51bSBERUNSX1dSQVAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg1MDg7Ci0KLSAgICAvKiBTdHJpbmdOYW1lICovCi0gICAgY29uc3QgR0xl
bnVtIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMDsKLSAgICBjb25zdCBH
TGVudW0gUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAxOwotICAgIGNvbnN0
IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7Ci0KLSAgICAv
KiBUZXh0dXJlTWFnRmlsdGVyICovCi0gICAgY29uc3QgR0xlbnVtIE5FQVJFU1QgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MjYwMDsKLSAgICBjb25zdCBHTGVudW0gTElORUFSICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgyNjAxOwotCi0gICAgLyogVGV4dHVyZU1pbkZpbHRlciAqLwot
ICAgIC8qICAgICAgTkVBUkVTVCAqLwotICAgIC8qICAgICAgTElORUFSICovCi0gICAgY29uc3Qg
R0xlbnVtIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsKLSAgICBjb25z
dCBHTGVudW0gTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0gMHgyNzAxOwotICAgIGNv
bnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7Ci0gICAg
Y29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICA9IDB4MjcwMzsKLQot
ICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCi0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
TUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RV9NSU5fRklMVEVSICAgICAgICAgICAgID0gMHgyODAxOwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKLQotICAgIC8qIFRleHR1cmVU
YXJnZXQgKi8KLSAgICAvKiAgICAgIFRFWFRVUkVfMkQgKi8KLSAgICBjb25zdCBHTGVudW0gVEVY
VFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOwotCi0gICAgY29uc3QgR0xlbnVt
IFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0OwotICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7Ci0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsKLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3OwotICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7Ci0gICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA9IDB4ODUxOTsKLSAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0gMHg4NTFBOwot
ICAgIGNvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7
Ci0KLSAgICAvKiBUZXh0dXJlVW5pdCAqLwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMCAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0QzA7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMyOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
MyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRV
UkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKLSAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTUgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OwotICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzY7Ci0gICAgY29uc3QgR0xlbnVt
IFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4OwotICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzk7Ci0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENCOwotICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0M7Ci0gICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRDsKLSAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENFOwot
ICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Y7
Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
MDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEQxOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODREMzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEQ0OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0RDU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRENjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIzICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEQ3OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjQgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0RDg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODREOTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI2ICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NERBOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjcgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0REI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyOCAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODREQzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI5ICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEREOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMzAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0REU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUz
MSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKLSAgICBjb25zdCBHTGVudW0gQUNUSVZF
X1RFWFRVUkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOwotCi0gICAgLyogVGV4dHVyZVdyYXBN
b2RlICovCi0gICAgY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MjkwMTsKLSAgICBjb25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAg
ID0gMHg4MTJGOwotICAgIGNvbnN0IEdMZW51bSBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAg
ICAgPSAweDgzNzA7Ci0KLSAgICAvKiBVbmlmb3JtIFR5cGVzICovCi0gICAgY29uc3QgR0xlbnVt
IEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MDsKLSAgICBjb25zdCBHTGVu
dW0gRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOwotICAgIGNvbnN0IEdM
ZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7Ci0gICAgY29uc3Qg
R0xlbnVtIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MzsKLSAgICBjb25z
dCBHTGVudW0gSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU0OwotICAgIGNv
bnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7Ci0gICAg
Y29uc3QgR0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NjsKLSAg
ICBjb25zdCBHTGVudW0gQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU3Owot
ICAgIGNvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTg7
Ci0gICAgY29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
OTsKLSAgICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjVBOwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNUI7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1QzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjVFOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAg
ICAgPSAweDhCNjA7Ci0KLSAgICAvKiBWZXJ0ZXggQXJyYXlzICovCi0gICAgY29uc3QgR0xlbnVt
IFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7Ci0gICAgY29uc3Qg
R0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2MjM7Ci0gICAg
Y29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgPSAweDg2MjQ7
Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgPSAw
eDg2MjU7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCAg
ICAgPSAweDg4NkE7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRF
UiAgICAgICAgPSAweDg2NDU7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlf
QlVGRkVSX0JJTkRJTkcgPSAweDg4OUY7Ci0KLSAgICAvKiBTaGFkZXIgU291cmNlICovCi0gICAg
Y29uc3QgR0xlbnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4OEI4MTsKLQot
ICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCi0gICAgY29uc3QgR0xl
bnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKLSAgICBjb25zdCBH
TGVudW0gTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4REYxOwotICAgIGNvbnN0
IEdMZW51bSBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgPSAweDhERjI7Ci0gICAgY29u
c3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKLSAgICBj
b25zdCBHTGVudW0gTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REY0OwotICAg
IGNvbnN0IEdMZW51bSBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjU7Ci0K
LSAgICAvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSICAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKLSAgICBjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4RDQxOwotCi0gICAgY29uc3QgR0xlbnVtIFJH
QkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKLSAgICBjb25zdCBHTGVudW0g
UkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OwotICAgIGNvbnN0IEdMZW51
bSBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhENjI7Ci0gICAgY29uc3QgR0xl
bnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKLSAgICBjb25zdCBH
TGVudW0gU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOwotICAgIGNvbnN0
IEdMZW51bSBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgPSAweDhENDg7Ci0gICAgY29u
c3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKLQotICAg
IGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgPSAweDhENDI7Ci0g
ICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAgICAgICA9IDB4OEQ0MzsK
LSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgID0gMHg4RDQ0
OwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAgICAgPSAweDhE
NTA7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFICAgICAgICA9IDB4
OEQ1MTsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgID0g
MHg4RDUyOwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAg
PSAweDhENTM7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFICAgICAg
ICA9IDB4OEQ1NDsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAg
ICAgID0gMHg4RDU1OwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
T0JKRUNUX1RZUEUgICAgICAgICAgID0gMHg4Q0QwOwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA9IDB4OENEMTsKLSAgICBjb25z
dCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAw
eDhDRDI7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9D
VUJFX01BUF9GQUNFID0gMHg4Q0QzOwotCi0gICAgY29uc3QgR0xlbnVtIENPTE9SX0FUVEFDSE1F
TlQwICAgICAgICAgICAgICA9IDB4OENFMDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfQVRUQUNI
TUVOVCAgICAgICAgICAgICAgID0gMHg4RDAwOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0FU
VEFDSE1FTlQgICAgICAgICAgICAgPSAweDhEMjA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVCAgICAgICA9IDB4ODIxQTsKLQotICAgIGNvbnN0IEdMZW51bSBOT05F
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1F
QlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4Q0Q1OwotICAgIGNvbnN0
IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICA9IDB4OENE
NjsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFD
SE1FTlQgPSAweDhDRDc7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
RElNRU5TSU9OUyAgICAgICAgID0gMHg4Q0Q5OwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA9IDB4OENERDsKLQotICAgIGNvbnN0IEdM
ZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Ci0gICAgY29uc3Qg
R0xlbnVtIFJFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4OENBNzsKLSAgICBjb25z
dCBHTGVudW0gTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgID0gMHg4NEU4OwotCi0gICAg
Y29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUwNjsKLQot
ICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovCi0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19G
TElQX1lfV0VCR0wgICAgICAgICAgICAgICAgPSAweDkyNDA7Ci0gICAgY29uc3QgR0xlbnVtIFVO
UEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7Ci0gICAgY29uc3QgR0xl
bnVtIENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICAgICAgPSAweDkyNDI7Ci0gICAgY29u
c3QgR0xlbnVtIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wgPSAweDkyNDM7Ci0g
ICAgY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICAgICAgPSAweDky
NDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3aW5nQnVmZmVyV2lkdGg7
Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1ZmZlckhlaWdodDsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGFj
dGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0gcHJv
Z3JhbSwgV2ViR0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
IHByb2dyYW0sIEdMdWludCBpbmRleCwgRE9NU3RyaW5nIG5hbWUpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRCdWZmZXIoR0xlbnVt
IHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdl
dCwgV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcihHTGVudW0g
dGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdMZW51
bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgYmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBH
TGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVS
R0IsIEdMZW51bSBtb2RlQWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBibGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jU2VwYXJhdGUoR0xlbnVtIHNy
Y1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1
ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdMZW51bSB1c2FnZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
YnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEsIEdMZW51bSB1
c2FnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1
c2FnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFycmF5
QnVmZmVyPyBkYXRhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNl
dCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdM
ZW51bSAgICAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51bSB0YXJnZXQpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZpZWxkIG1hc2spOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhckNvbG9yKEdMY2xhbXBm
IHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJEZXB0aChHTGNsYW1wZiBk
ZXB0aCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNp
bChHTGludCBzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29sb3JN
YXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9v
bGVhbiBhbHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyBkYXRh
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29tcHJlc3NlZFRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7Ci0gICAgCi0gICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBjb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2Vi
R0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xG
cmFtZWJ1ZmZlciBjcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IFdlYkdMUHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
V2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRlciBjcmVhdGVTaGFkZXIoR0xlbnVt
IHR5cGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMVGV4dHVyZSBjcmVhdGVUZXh0
dXJlKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2Uo
R0xlbnVtIG1vZGUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRl
bGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVm
ZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUHJvZ3Jh
bShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVTaGFkZXIoV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
ZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhGdW5jKEdMZW51bSBmdW5jKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhSYW5nZShHTGNsYW1wZiB6
TmVhciwgR0xjbGFtcGYgekZhcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBX
ZWJHTFNoYWRlciBzaGFkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICBkaXNhYmxlKEdMZW51bSBjYXApOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5k
ZXgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBk
cmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBHTGlu
dHB0ciBvZmZzZXQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGVu
YWJsZShHTGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBmaW5pc2goKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclRleHR1
cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwg
V2ViR0xUZXh0dXJlIHRleHR1cmUsIEdMaW50IGxldmVsKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCk7Ci0g
ICAgCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2
ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJ
bmZvIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotCi0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBD
dXN0b21dIGFueSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgZ2V0
Q29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSBn
ZXRFcnJvcigpOwotCi0gICAgLy8gb2JqZWN0IGdldEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0RXh0ZW5zaW9uKERPTVN0
cmluZyBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhj
ZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UGFyYW1ldGVyKEdMZW51bSBw
bmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IGFueSBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTGVudW0gcG5h
bWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9
TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQ
cm9ncmFtIHByb2dyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBwbmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIgc2hhZGVyLCBHTGVudW0g
cG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJp
bmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9n
KFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0IGdldFNoYWRlclByZWNpc2lvbkZv
cm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNF
eGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIgc2hhZGVy
KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5n
PiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBD
dXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFRleFBhcmFtZXRlcihHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlz
ZXNFeGNlcHRpb25dIGFueSBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJH
TFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRWZXJ0ZXhBdHRyaWIoR0x1aW50
IGluZGV4LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xzaXpl
aXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBp
c0J1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdM
Ym9vbGVhbiAgICBpc0NvbnRleHRMb3N0KCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xi
b29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBHTGJvb2xlYW4gICAgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVy
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNQcm9ncmFtKFdlYkdM
UHJvZ3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAg
aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVy
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNUZXh0dXJlKFdlYkdM
VGV4dHVyZSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
bGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFt
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcGl4ZWxTdG9yZWkoR0xl
bnVtIHBuYW1lLCBHTGludCBwYXJhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOwotCi0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgcmVh
ZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyBwaXhlbHMpOwotICAg
IAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcmVuZGVyYnVm
ZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgc2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lzc29yKEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBzaGFkZXJTb3VyY2UoV2ViR0xT
aGFkZXIgc2hhZGVyLCBET01TdHJpbmcgc3RyaW5nKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmMoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50
IG1hc2spOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsRnVu
Y1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFz
ayk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrKEdM
dWludCBtYXNrKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNp
bE1hc2tTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFp
bCwgR0xlbnVtIHpwYXNzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
c3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWws
IEdMZW51bSB6cGFzcyk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
dGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0p
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJhbWV0ZXJpKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwotCi0gICAgLy8gU3VwcG9y
dGVkIGZvcm1zOgotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMpOwotI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAm
JiBFTkFCTEVfVklERU8KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/
IHZpZGVvKTsKLSNlbmRpZgotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscyk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4
U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRl
eFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGlt
YWdlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxl
bWVudD8gY2FudmFzKTsKLSNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVP
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
dGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudD8g
dmlkZW8pOwotI2VuZGlmCi0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgdW5pZm9ybTFmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0
IHgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJh
eSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5p
Zm9ybTFpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWl2
KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmYoV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmZ2KFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaShXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmKFdlYkdMVW5pZm9ybUxvY2F0
aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2Z2
KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zaShXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9y
bTNpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRmKFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6
LCBHTGZsb2F0IHcpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZs
b2F0MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgdW5pZm9ybTRpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4LCBH
TGludCB5LCBHTGludCB6LCBHTGludCB3KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0
b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGl2KFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXZWJHTFVuaWZvcm1M
b2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCB1bmlmb3JtTWF0cml4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xl
YW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJh
eSBhcnJheSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2YWxpZGF0ZVByb2dy
YW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIHZlcnRleEF0dHJpYjFmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGlu
ZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICB2ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
R0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2
b2lkIHZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFycmF5IHZhbHVlcyk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjRmKEdMdWlu
dCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50
IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGlu
ZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSBzdHJpZGUsIEdMaW50cHRyIG9mZnNldCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOworXSBpbnRlcmZhY2UgV2ViR0wxUmVuZGVyaW5nQ29udGV4dCA6IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgewogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJHTCkKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShw
YXNzZWRDYW52YXMsIGF0dHJpYnV0ZXMpCit7CisgICAgbV90eXBlID0gIndlYmdsMiI7Cit9CisK
K1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZh
c0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCwKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKSA6IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBjb250ZXh0LCBhdHRyaWJ1dGVz
KQoreworICAgIG1fdHlwZSA9ICJ3ZWJnbDIiOworfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0X2gKKyNkZWZpbmUg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dCBmaW5hbCA6IHB1YmxpYyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIHsKK3B1Ymxp
YzoKKyAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOworICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRN
TENhbnZhc0VsZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K1sKKyAgICBDb25kaXRpb25hbD1XRUJHTCwKKyAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKKyAg
ICBEb05vdENoZWNrQ29uc3RhbnRzLAorXSBpbnRlcmZhY2UgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dCA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgeworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKIAogI2luY2x1ZGUgIldl
YkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMQnVmZmVyOjpjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTEJ1ZmZl
cjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYkdMQnVmZmVyKGN0eCkpOwogfQogCi1XZWJHTEJ1ZmZlcjo6V2ViR0xC
dWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTEJ1ZmZlcjo6V2ViR0xCdWZm
ZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmpl
Y3QoY3R4KQogICAgICwgbV90YXJnZXQoMCkKICAgICAsIG1fYnl0ZUxlbmd0aCgwKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCShyZXZpc2lvbiAxNzgzNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFdlYkdMQnVmZmVyIGZpbmFsIDogcHVibGljIFdl
YkdMU2gKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTEJ1ZmZlcigpOwogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqKTsKIAogICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyRGF0YShHQzNEc2l6ZWlw
dHIgc2l6ZSk7CiAgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhKEpTQzo6QXJyYXlCdWZmZXIq
KTsKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXZlckJlZW5Cb3VuZCgp
IGNvbnN0IHsgcmV0dXJuIG9iamVjdCgpICYmIG1fdGFyZ2V0OyB9CiAKIHByb3RlY3RlZDoKLSAg
ICBXZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBXZWJHTEJ1ZmZlcihX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDLmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OldlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiAgICAgY29udGV4dC0+YWRkQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EKTsKQEAgLTUw
LDcgKzUwLDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xDb21wcgogICAg
IHJldHVybiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDTmFtZTsKIH0KIAotYm9vbCBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQorYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lv
bnMgPSBjb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CiAgICAg
cmV0dXJuIGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVy
ZSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVBVEMuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMCArMzQsMTAgQEAgY2xhc3MgV2ViR0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOworICAgIGV4cGxpY2l0IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1
cmVBVEMoKTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlk
ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6V2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBX
ZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogICAgIGNvbnRleHQtPmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyk7
CkBAIC01Miw3ICs1Miw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMQ29t
cHIKICAgICByZXR1cm4gV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDTmFtZTsKIH0KIAotYm9v
bCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCitib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9y
dGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9u
czNEKiBleHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5z
aW9ucygpOwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfSU1HX3RleHR1cmVf
Y29tcHJlc3Npb25fcHZydGMiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oCShyZXZpc2lvbiAxNzgz
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDIGZpbmFsIDogcHVibGlj
IFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2
aXJ0dWFsIH5XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMoKTsKIAotICAgIHN0YXRpYyBib29s
IHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBw
b3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgRXh0ZW5zaW9u
TmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMu
Y3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwx
MSBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCiAKICNpbmNsdWRl
ICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKICAgICBjb250
ZXh0LT5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQpOwpAQCAtNTIsNyArNTIsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0
ZW5zaW9uTmFtZSBXZWJHTENvbXByCiAgICAgcmV0dXJuIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDTmFtZTsKIH0KIAotYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVk
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQog
ewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4
dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKICAgICByZXR1cm4gZXh0ZW5zaW9ucy0+c3VwcG9ydHMo
IkdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGMiKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oCShy
ZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgY2xh
c3MgV2ViR0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGlj
aXQgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSop
OwogICAgIHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKCk7CiAKLSAgICBzdGF0
aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJv
b2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwg
RXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAkocmV2aXNp
b24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3Jv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViR0xD
b250ZXh0R3JvdXAuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTUzLDE2ICs1MywxNiBAQCBXZWJHTENvbnRleHRHcm91cDo6fldlYkdMQ29u
dGV4dEdyb3VwKCkKIEdyYXBoaWNzQ29udGV4dDNEKiBXZWJHTENvbnRleHRHcm91cDo6Z2V0QUdy
YXBoaWNzQ29udGV4dDNEKCkKIHsKICAgICBBU1NFUlQoIW1fY29udGV4dHMuaXNFbXB0eSgpKTsK
LSAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+OjppdGVyYXRvciBpdCA9IG1fY29u
dGV4dHMuYmVnaW4oKTsKKyAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqPjo6
aXRlcmF0b3IgaXQgPSBtX2NvbnRleHRzLmJlZ2luKCk7CiAgICAgcmV0dXJuICgqaXQpLT5ncmFw
aGljc0NvbnRleHQzRCgpOwogfQogCi12b2lkIFdlYkdMQ29udGV4dEdyb3VwOjphZGRDb250ZXh0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6
OmFkZENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBt
X2NvbnRleHRzLmFkZChjb250ZXh0KTsKIH0KIAotdm9pZCBXZWJHTENvbnRleHRHcm91cDo6cmVt
b3ZlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIFdlYkdMQ29u
dGV4dEdyb3VwOjpyZW1vdmVDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRl
eHQpCiB7CiAgICAgLy8gV2UgbXVzdCBjYWxsIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMgYmVm
b3JlIHJlbW92aW5nIHRoZSBsYXN0IGNvbnRleHQuCiAgICAgaWYgKG1fY29udGV4dHMuc2l6ZSgp
ID09IDEgJiYgbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKQEAgLTg5LDkgKzg5LDkgQEAg
dm9pZCBXZWJHTENvbnRleHRHcm91cDo6ZGV0YWNoQW5kUmVtb3ZlQQogICAgIH0KIH0KIAotdm9p
ZCBXZWJHTENvbnRleHRHcm91cDo6bG9zZUNvbnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQordm9pZCBXZWJHTENvbnRleHRHcm91cDo6bG9zZUNv
bnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9k
ZSkKIHsKLSAgICBmb3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9y
IGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQor
ICAgIGZvciAoSGFzaFNldDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj46Oml0ZXJhdG9yIGl0
ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQogICAg
ICAgICAoKml0KS0+bG9zZUNvbnRleHRJbXBsKG1vZGUpOwogCiAgICAgZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250
ZXh0R3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbnRleHRHcm91cC5oCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaWZuZGVmIFdlYkdMQ29udGV4dEdyb3VwX2gKICNkZWZpbmUgV2ViR0xDb250ZXh0R3Jv
dXBfaAogCi0jaW5jbHVkZSA8V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAt
MzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKIGNsYXNzIFdlYkdMRXh0ZW5zaW9uOwogY2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7Ci1jbGFz
cyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC00NSwxNSArNDUsMTUgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjcmVhdGUoKTsK
ICAgICB+V2ViR0xDb250ZXh0R3JvdXAoKTsKIAotICAgIHZvaWQgYWRkQ29udGV4dChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgdm9pZCBhZGRDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwog
CiAgICAgdm9pZCBhZGRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKICAgICB2b2lkIHJlbW92
ZU9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdl
dEFHcmFwaGljc0NvbnRleHQzRCgpOwogCi0gICAgdm9pZCBsb3NlQ29udGV4dEdyb3VwKFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlKTsKKyAgICB2b2lkIGxvc2VDb250ZXh0
R3JvdXAoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlKTsKIAogICBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKQEAgLTYyLDcgKzYyLDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CiAKLSAgICBI
YXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+IG1fY29udGV4dHM7CisgICAgSGFzaFNldDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4gbV9jb250ZXh0czsKICAgICBIYXNoU2V0PFdlYkdM
U2hhcmVkT2JqZWN0Kj4gbV9ncm91cE9iamVjdHM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAJKHJldmlzaW9uIDE3
ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiV2ViR0xD
b250ZXh0T2JqZWN0LmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQorV2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmpl
Y3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMT2JqZWN0
KGNvbnRleHQpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCShyZXZpc2lvbiAxNzgz
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIC8vIFdlYkdMQ29udGV4dE9iamVjdCB0
aGUgYmFzZSBjbGFzcyBmb3Igb2JqZWN0cyB0aGF0IGFyZSBvd25lZCBieSBhIHNwZWNpZmljCiAv
LyBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCkBAIC0zOSw5ICszOSw5IEBAIGNsYXNzIFdlYkdMQ29u
dGV4dE9iamVjdCA6IHB1YmxpYyBXZWJHTE8KIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTENv
bnRleHRPYmplY3QoKTsKIAotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAotICAgIHZpcnR1YWwgYm9v
bCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRh
dGUoY29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbnRl
eHQgPT0gbV9jb250ZXh0OwogICAgIH0KQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZGV0YWNoQ29udGV4dCgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xDb250ZXh0T2JqZWN0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdMQ29udGV4dE9iamVjdChXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzR3JvdXBPckNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZQogICAgIHsKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9j
b250ZXh0OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwCShyZXZpc2lvbiAxNzgzNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAKICNpbmNsdWRlICJXZWJHTERl
YnVnUmVuZGVyZXJJbmZvLmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQp
CiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaAkocmV2aXNp
b24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgVU5NQVNLRURfUkVOREVSRVJfV0VCR0wgPSAweDkyNDYKICAgICB9OwogCi0gICAgZXhwbGlj
aXQgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBl
eHBsaWNpdCBXZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKICAgICB2aXJ0dWFsIH5XZWJHTERlYnVnUmVuZGVyZXJJbmZvKCk7CiAKICAgICB2aXJ0dWFs
IEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcAkocmV2aXNpb24g
MTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlICJXZWJHTERl
YnVnU2hhZGVycy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V2ViR0xEZWJ1Z1NoYWRlcnM6OldlYkdMRGVidWdTaGFkZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK1dlYkdMRGVidWdTaGFkZXJzOjpXZWJHTERlYnVnU2hhZGVycyhXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4
dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFk
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1
Z1NoYWRlcnMuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBXZWJHTERlYnVnU2hhZGVycyBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xE
ZWJ1Z1NoYWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xE
ZWJ1Z1NoYWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldl
YkdMRGVidWdTaGFkZXJzKCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgp
IGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xE
ZXB0aFRleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRGVwdGhUZXh0dXJlLmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xEZXB0aFRleHR1cmU6
OldlYkdMRGVwdGhUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdM
RGVwdGhUZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaAkocmV2aXNp
b24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9u
IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xEZXB0aFRleHR1cmUoKTsKIAogICAg
IHN0YXRpYyBib29sIHN1cHBvcnRlZChHcmFwaGljc0NvbnRleHQzRCopOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAJKHJldmlzaW9u
IDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xEcmF3QnVmZmVyczo6V2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCitXZWJHTERyYXdCdWZmZXJzOjpXZWJHTERyYXdCdWZmZXJzKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250
ZXh0KQogewogfQpAQCAtNDgsMTQgKzQ4LDE0IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25O
YW1lIFdlYkdMRHJhd0IKIAogI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPCAxMDEwMDApCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9y
dGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopCitib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKICNlbHNlCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBl
eHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygp
OwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX2RyYXdfYnVmZmVycyIp
CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgV2ViR0xEcmF3QnVmZmVyczo6ZHJhd0J1ZmZlcnNXRUJH
TCgKIH0KIAogLy8gc3RhdGljCi1ib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnNhdGlzZmllc1dlYkdM
UmVxdWlyZW1lbnRzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogd2ViZ2xDb250ZXh0KQorYm9vbCBX
ZWJHTERyYXdCdWZmZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiB3ZWJnbENvbnRleHQpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSB3ZWJnbENvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmgJKHJldmlzaW9uIDE3
ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgV2ViR0xEcmF3QnVmZmVycyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTERyYXdCdWZmZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5XZWJHTERyYXdCdWZmZXJzKCk7CiAKLSAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wg
c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgRXh0
ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdCdWZm
ZXJzV0VCR0woY29uc3QgVmVjdG9yPEdDM0RlbnVtPiYgYnVmZmVycyk7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIGJvb2wgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmNwcAko
cmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRl
bnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotV2ViR0xFeHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK1dlYkdMRXh0ZW5zaW9uOjpXZWJHTEV4dGVuc2lvbihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmgJ
KHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0
ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViR0xF
eHRlbnNpb25faAogI2RlZmluZSBXZWJHTEV4dGVuc2lvbl9oCiAKLSNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsMTQgKzYwLDE0IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgcmVmKCkgeyBtX2NvbnRleHQtPnJlZigpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsg
bV9jb250ZXh0LT5kZXJlZigpOyB9Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSog
Y29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogCiAgICAgdmlydHVhbCB+V2ViR0xFeHRl
bnNpb24oKTsKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0ID0gMDsK
IAogcHJvdGVjdGVkOgotICAgIFdlYkdMRXh0ZW5zaW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OworICAgIFdlYkdMRXh0ZW5z
aW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2
aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldl
YkdMRHJhd0J1ZmZlcnMuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMjY5LDEyICsyNjksMTIgQEAgV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xBdHRhY2ht
ZW50Ojp+V2ViRwogewogfQogCi1QYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMRnJh
bWVidWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKK1Bhc3NSZWZQdHI8
V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMRnJhbWVi
dWZmZXIoY3R4KSk7CiB9CiAKLVdlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVm
ZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKICAgICA6IFdlYkdMQ29udGV4dE9i
amVjdChjdHgpCiAgICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAx
NzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+
V2ViR0xGcmFtZWJ1ZmZlcigpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAKICAgICB2b2lkIHNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0
dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZl
bCk7CiAgICAgdm9pZCBzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBh
dHRhY2htZW50LCBXZWJHTFJlbmRlcmJ1ZmZlciopOwpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1Ymxp
YzoKICAgICBHQzNEZW51bSBnZXREcmF3QnVmZmVyKEdDM0RlbnVtKTsKIAogcHJvdGVjdGVkOgot
ICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgV2ViR0xG
cmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTExvc2VD
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TExvc2VDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xMb3NlQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsy
OSwxMSBAQAogCiAjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMTG9zZUNvbnRleHQ6OldlYkdMTG9z
ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorV2ViR0xMb3NlQ29udGV4
dDo6V2ViR0xMb3NlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQog
ICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KQEAgLTQ5LDcgKzQ5LDcgQEAgV2Vi
R0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xMb3NlQwogCiB2b2lkIFdlYkdMTG9zZUNv
bnRleHQ6Omxvc2VDb250ZXh0KCkKIHsKLSAgICBtX2NvbnRleHQtPmZvcmNlTG9zdENvbnRleHQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpTeW50aGV0aWNMb3N0Q29udGV4dCk7CisgICAgbV9jb250
ZXh0LT5mb3JjZUxvc3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlN5bnRoZXRp
Y0xvc3RDb250ZXh0KTsKIH0KIAogdm9pZCBXZWJHTExvc2VDb250ZXh0OjpyZXN0b3JlQ29udGV4
dCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29udGV4
dC5oCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TExvc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIFdlYkdMTG9zZUNvbnRleHQgZmluYWwg
OiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMTG9z
ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xMb3Nl
Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xM
b3NlQ29udGV4dCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25z
dCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVj
dC5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDExIEBACiAjaW5jbHVk
ZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgogI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJz
LmgiCiAjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTE9iamVjdDo6V2ViR0xPYmplY3QoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KikKK1dlYkdMT2JqZWN0OjpXZWJHTE9iamVjdChXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKikKICAgICA6IG1fb2JqZWN0KDApCiAgICAgLCBtX2F0dGFjaG1lbnRDb3VudCgw
KQogICAgICwgbV9kZWxldGVkKGZhbHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTE9iamVjdC5oCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBXZWJH
TENvbnRleHRHcm91cDsKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIFdlYkdMT2JqZWN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViR0xPYmplY3Q+IHsKIHB1YmxpYzoKQEAgLTU2LDEwICs1NiwxMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0RlbGV0ZWQoKSB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KIAogICAgIC8vIFRy
dWUgaWYgdGhpcyBvYmplY3QgYmVsb25ncyB0byB0aGUgZ3JvdXAgb3IgY29udGV4dC4KLSAgICB2
aXJ0dWFsIGJvb2wgdmFsaWRhdGUoY29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHZhbGlkYXRl
KGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwgY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopIGNvbnN0ID0gMDsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMT2JqZWN0KFdlYkdMUmVuZGVy
aW5nQ29udGV4dCopOworICAgIFdlYkdMT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKIAogICAgIC8vIHNldE9iamVjdCBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSByaWdodCBh
ZnRlciBjcmVhdGluZyBhIFdlYkdMT2JqZWN0LgogICAgIHZvaWQgc2V0T2JqZWN0KFBsYXRmb3Jt
M0RPYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dy
YW0uY3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNiArMzAsMTYgQEAKICNpbmNs
dWRlICJXZWJHTFByb2dyYW0uaCIKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0j
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2Vi
R0xQcm9ncmFtPiBXZWJHTFByb2dyYW06OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKK1Bhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFByb2dyYW06OmNyZWF0ZShXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJH
TFByb2dyYW0oY3R4KSk7CiB9CiAKLVdlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4KQorV2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAg
ICwgbV9saW5rU3RhdHVzKGZhbHNlKQogICAgICwgbV9saW5rQ291bnQoMCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiAxNzgzNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBXZWJHTFByb2dyYW0gZmluYWwgOiBwdWJsaWMgV2Vi
R0xTCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xQcm9ncmFtKCk7CiAKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAKICAgICB1bnNpZ25lZCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KTsKICAgICBHQzNEaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKEdDM0R1aW50IGluZGV4KTsK
QEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIGJvb2wgZGV0YWNoU2hhZGVyKFdlYkdMU2hh
ZGVyKik7CiAKIHByb3RlY3RlZDoKLSAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250
ZXh0Kik7CisgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxh
dGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIK
IAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdM
UmVuZGVyYnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVm
UHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdM
UmVuZGVyYnVmZmVyKGN0eCkpOwogfQpAQCAtNDQsNyArNDQsNyBAQCBXZWJHTFJlbmRlcmJ1ZmZl
cjo6fldlYkdMUmVuZGVyYnVmZmVyKCkKICAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAKLVdlYkdM
UmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKK1dlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX2lu
dGVybmFsRm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNCkKICAgICAsIG1faW5pdGlhbGl6
ZWQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyYnVmZmVyLmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
Y2xhc3MgV2ViR0xSZW5kZXJidWZmZXIgZmluYWwgOiBwdWJsaWMgVwogcHVibGljOgogICAgIHZp
cnR1YWwgfldlYkdMUmVuZGVyYnVmZmVyKCk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJH
TFJlbmRlcmJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogCiAgICAgdm9pZCBzZXRJbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCkKICAgICB7CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhh
c0V2ZXJCZWVuQm91bmQoKSB7IG1faGFzRXZlckJlZW5Cb3VuZCA9IHRydWU7IH0KIAogcHJvdGVj
dGVkOgotICAgIFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAg
IFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0z
RE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2MzM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdFQkdMKQotCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0K
LSNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdl
LmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJFWFRCbGVuZE1pbk1heC5oIgotI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgotI2luY2x1
ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKLSNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuaCIKLSNpbmNsdWRlICJFWFRzUkdCLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3Rh
bmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1
ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxv
YXQuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAi
T0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJXZWJHTEFjdGl2ZUlu
Zm8uaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIK
LSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgotI2luY2x1ZGUgIldlYkdM
Q29udGV4dEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5oIgotI2lu
Y2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVy
SW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xE
ZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAi
V2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNs
dWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIldlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQuaCIKLSNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTFVuaWZvcm1M
b2NhdGlvbi5oIgotCi0jaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJy
YXkuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1w
dHMgPSAxLjA7Ci1jb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2Owot
Ci1uYW1lc3BhY2UgewotCi0gICAgY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciB7Ci0g
ICAgcHVibGljOgotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKERyYXdpbmdCdWZm
ZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyQmluZGluZykK
LSAgICAgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCi0gICAgICAgICAg
ICAsIG1fZnJhbWVidWZmZXJCaW5kaW5nKGZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3Ig
bXVsdGlzYW1wbGluZykKLSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQK
LSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgICAgICB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7Ci0g
ICAgICAgIFdlYkdMRnJhbWVidWZmZXIqIG1fZnJhbWVidWZmZXJCaW5kaW5nOwotICAgIH07Ci0K
LSAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwotICAg
IH0KLQotICAgIHZvaWQgY2xpcDFEKEdDM0RpbnQgc3RhcnQsIEdDM0RzaXplaSByYW5nZSwgR0Mz
RHNpemVpIHNvdXJjZVJhbmdlLCBHQzNEaW50KiBjbGlwcGVkU3RhcnQsIEdDM0RzaXplaSogY2xp
cHBlZFJhbmdlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlwcGVk
UmFuZ2UpOwotICAgICAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgICAgICByYW5nZSArPSBz
dGFydDsKLSAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICAgICAgfQotICAgICAgICBHQzNEaW50
IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7Ci0gICAgICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkKLSAg
ICAgICAgICAgIHJhbmdlIC09IGVuZCAtIHNvdXJjZVJhbmdlOwotICAgICAgICAqY2xpcHBlZFN0
YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXR1cm5zIGZhbHNlIGlmIG5vIGNsaXBwaW5nIGlzIG5lY2Vzc2FyeSwgaS5lLiwgeCwg
eSwgd2lkdGgsIGhlaWdodCBzdGF5IHRoZSBzYW1lLgotICAgIGJvb2wgY2xpcDJEKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0LAot
ICAgICAgICAgICAgICAgIEdDM0RpbnQqIGNsaXBwZWRYLCBHQzNEaW50KiBjbGlwcGVkWSwgR0Mz
RHNpemVpKiBjbGlwcGVkV2lkdGgsIEdDM0RzaXplaSpjbGlwcGVkSGVpZ2h0KQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBwZWRZICYmIGNsaXBwZWRXaWR0aCAmJiBjbGlw
cGVkSGVpZ2h0KTsKLSAgICAgICAgY2xpcDFEKHgsIHdpZHRoLCBzb3VyY2VXaWR0aCwgY2xpcHBl
ZFgsIGNsaXBwZWRXaWR0aCk7Ci0gICAgICAgIGNsaXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhlaWdo
dCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICByZXR1cm4gKCpjbGlwcGVkWCAh
PSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlwcGVkV2lkdGggIT0gd2lkdGggfHwgKmNsaXBw
ZWRIZWlnaHQgIT0gaGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBHQzNEaW50IGNsYW1wKEdDM0RpbnQg
dmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZSA8IG1pbikKLSAgICAgICAgICAgIHZhbHVlID0gbWluOwotICAgICAgICBpZiAodmFsdWUgPiBt
YXgpCi0gICAgICAgICAgICB2YWx1ZSA9IG1heDsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLQotICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhlIEFT
Q0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCi0gICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9u
IDMuMS4KLSAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKLSAgICB7
Ci0gICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQgYCBA
IFwgJyBERUwuCi0gICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2Ci0gICAgICAgICAgICAm
JiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9ICdc
XCcgJiYgYyAhPSAnXCcnKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIC8vIEhv
cml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJyaWFn
ZSByZXR1cm4KLSAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCi0gICAgICAgIGlmIChjID49IDkg
JiYgYyA8PSAxMykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ByZWZpeFJlc2VydmVkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImdsXyIpIHx8IG5hbWUuc3Rh
cnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJfd2ViZ2xfIikpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFN0cmlwcyBjb21tZW50cyBmcm9tIHNoYWRlciB0ZXh0LiBUaGlzIGFsbG93cyBub24tQVNDSUkg
Y2hhcmFjdGVycwotICAgIC8vIHRvIGJlIHVzZWQgaW4gY29tbWVudHMgd2l0aG91dCBwb3RlbnRp
YWxseSBicmVha2luZyBPcGVuR0wKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVjdGlu
ZyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgotICAgIGNsYXNzIFN0cmlwQ29t
bWVudHMgewotICAgIHB1YmxpYzoKLSAgICAgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJpbmcm
IHN0cikKLSAgICAgICAgICAgIDogbV9wYXJzZVN0YXRlKEJlZ2lubmluZ09mTGluZSkKLSAgICAg
ICAgICAgICwgbV9zb3VyY2VTdHJpbmcoc3RyKQotICAgICAgICAgICAgLCBtX2xlbmd0aChzdHIu
bGVuZ3RoKCkpCi0gICAgICAgICAgICAsIG1fcG9zaXRpb24oMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcGFyc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyByZXN1bHQoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAg
IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHBhcnNlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgd2hpbGUgKGhhc01vcmVDaGFyYWN0ZXJzKCkpIHsKLSAgICAgICAgICAgICAgICBwcm9jZXNz
KGN1cnJlbnQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcHJvY2VzcygpIG1pZ2h0IGFkdmFuY2Ug
dGhlIHBvc2l0aW9uLgotICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlQ2hhcmFjdGVycygpKQot
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHByb2Nlc3MoVUNoYXIpOwotCi0gICAgICAgIGJvb2wgcGVlayhVQ2hh
ciYgY2hhcmFjdGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9wb3NpdGlv
biArIDEgPj0gbV9sZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBVQ2hhciBjdXJyZW50KCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04obV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NvdXJj
ZVN0cmluZ1ttX3Bvc2l0aW9uXTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYWR2YW5jZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxpemUgbmV3bGluZSByZWxhdGVk
IGNoYXJhY3RlcnMuCi0gICAgICAgICAgICByZXR1cm4gKGNoYXJhY3RlciA9PSAnXG4nIHx8IGNo
YXJhY3RlciA9PSAnXHInKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZW1pdChVQ2hhciBj
aGFyYWN0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoY2hhcmFj
dGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudW0gUGFyc2VTdGF0ZSB7Ci0gICAgICAgICAg
ICAvLyBIYXZlIG5vdCBzZWVuIGFuIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB5ZXQg
b24KLSAgICAgICAgICAgIC8vIHRoaXMgbGluZS4gUG9zc2libGUgdGhhdCB3ZSBtaWdodCBzZWUg
YSBwcmVwcm9jZXNzb3IKLSAgICAgICAgICAgIC8vIGRpcmVjdGl2ZS4KLSAgICAgICAgICAgIEJl
Z2lubmluZ09mTGluZSwKLQotICAgICAgICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9uZSBB
U0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIKLSAgICAgICAgICAgIC8vIG9uIHRoaXMgbGlu
ZS4KLSAgICAgICAgICAgIE1pZGRsZU9mTGluZSwKLQotICAgICAgICAgICAgLy8gSGFuZGxpbmcg
YSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBQYXNzZXMgdGhyb3VnaCBhbGwKLSAgICAgICAgICAg
IC8vIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRGlzYWJsZXMgY29tbWVu
dAotICAgICAgICAgICAgLy8gcHJvY2Vzc2luZy4KLSAgICAgICAgICAgIEluUHJlcHJvY2Vzc29y
RGlyZWN0aXZlLAotCi0gICAgICAgICAgICAvLyBIYW5kbGluZyBhIHNpbmdsZS1saW5lIGNvbW1l
bnQuIFRoZSBjb21tZW50IHRleHQgaXMKLSAgICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGggYSBz
aW5nbGUgc3BhY2UuCi0gICAgICAgICAgICBJblNpbmdsZUxpbmVDb21tZW50LAotCi0gICAgICAg
ICAgICAvLyBIYW5kbGluZyBhIG11bHRpLWxpbmUgY29tbWVudC4gTmV3bGluZXMgYXJlIHBhc3Nl
ZAotICAgICAgICAgICAgLy8gdGhyb3VnaCB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCi0gICAg
ICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKLSAgICAgICAgfTsKLQotICAgICAgICBQYXJzZVN0
YXRlIG1fcGFyc2VTdGF0ZTsKLSAgICAgICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOwotICAgICAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKLSAgICAg
ICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7Ci0gICAgfTsKLQotICAgIHZvaWQgU3RyaXBDb21t
ZW50czo6cHJvY2VzcyhVQ2hhciBjKQotICAgIHsKLSAgICAgICAgaWYgKGlzTmV3bGluZShjKSkg
ewotICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgc3RhdGUgd2UgYXJlIGluLCBwYXNzIHRo
cm91Z2ggbmV3bGluZXMKLSAgICAgICAgICAgIC8vIHNvIHdlIHByZXNlcnZlIGxpbmUgbnVtYmVy
cy4KLSAgICAgICAgICAgIGVtaXQoYyk7Ci0KLSAgICAgICAgICAgIGlmIChtX3BhcnNlU3RhdGUg
IT0gSW5NdWx0aUxpbmVDb21tZW50KQotICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEJl
Z2lubmluZ09mTGluZTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgVUNoYXIgdGVtcCA9IDA7Ci0gICAgICAgIHN3aXRjaCAobV9wYXJzZVN0YXRlKSB7Ci0gICAg
ICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgotICAgICAgICAgICAgaWYgKFdURjo6aXNBU0NJSVNw
YWNlKGMpKSB7Ci0gICAgICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGMgPT0gJyMnKSB7Ci0gICAgICAg
ICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7Ci0gICAgICAg
ICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhhbmRs
ZSBjaGFyYWN0ZXIuCi0gICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7Ci0g
ICAgICAgICAgICBwcm9jZXNzKGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBNaWRkbGVPZkxpbmU6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1wKSkg
ewotICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgewotICAgICAgICAgICAgICAgICAg
ICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OwotICAgICAgICAgICAgICAgICAg
ICBlbWl0KCcgJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHRlbXAgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluTXVs
dGlMaW5lQ29tbWVudDsKLSAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgY29tbWVudCBz
dGFydCBpbiBjYXNlIHRoZSB1c2VyIGhhcwotICAgICAgICAgICAgICAgICAgICAvLyBhbiB1bmNs
b3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCi0gICAgICAgICAgICAgICAgICAgIC8v
IHNpZ25hbCBhbiBlcnJvci4KLSAgICAgICAgICAgICAgICAgICAgZW1pdCgnLycpOwotICAgICAg
ICAgICAgICAgICAgICBlbWl0KCcqJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBlbWl0KGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKLSAgICAgICAgICAgIC8vIE5vIG1hdHRl
ciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBpdAotICAgICAgICAgICAgLy8gdGhy
b3VnaC4gRG8gbm90IHBhcnNlIGNvbW1lbnRzIGluIHRoaXMgc3RhdGUuIFRoaXMKLSAgICAgICAg
ICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gbG9uZyB0ZXJtLCBidXQg
aXQKLSAgICAgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNlcnJvciBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlLgotICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKLSAgICAgICAgICAgIC8vIFRoZSBuZXds
aW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUKLSAgICAgICAg
ICAgIC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBnZXQgb3V0IG9mIHRoZQotICAg
ICAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxvdyBhbGwgb3RoZXIgY2hhcmFj
dGVycy4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5NdWx0aUxpbmVDb21t
ZW50OgotICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9PSAn
LycpIHsKLSAgICAgICAgICAgICAgICBlbWl0KCcqJyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgn
LycpOwotICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKLSAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuIFVuY2xl
YXIgd2hldGhlciB3ZSBtYXkKLSAgICAgICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0IGVt
aXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQotICAgICAgICAgICAgLy8gdG8gcHJlc2Vy
dmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCi0KLWNsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0NvbnRl
eHQzRDo6Q29udGV4dExvc3RDYWxsYmFjayB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNr
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNiKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlIHsgbV9jb250ZXh0LT5mb3JjZUxvc3RD
b250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6UmVhbExvc3RDb250ZXh0KTsgfQotICAgIHZp
cnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaygpIHt9Ci1wcml2YXRlOgot
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwotfTsKLQotY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3Nh
Z2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
R0MzRGludCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPm1fc3ludGhl
c2l6ZWRFcnJvcnNUb0NvbnNvbGUpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnByaW50R0xFcnJv
clRvQ29uc29sZShtZXNzYWdlKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdD
b250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0KLXByaXZhdGU6Ci0gICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7Ci19OwotCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKiBhdHRycykKLXsKLSAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlvbiBv
ZiBhIG5ldyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCi0gICAg
Ly8gcGFydGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3JlIHRp
bWVzIHZpYSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgotICAgIGlmICghZnJhbWUt
PmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xFbmFi
bGVkKCkpKSB7Ci0gICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZh
bHNlLCB0cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdMIGNv
bnRleHQuIikpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBib29sIGlz
UGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxzZTsKLSAgICBEb2N1bWVudCYgdG9wRG9jdW1l
bnQgPSBkb2N1bWVudC50b3BEb2N1bWVudCgpOwotICAgIFBhZ2UqIHBhZ2UgPSB0b3BEb2N1bWVu
dC5wYWdlKCk7Ci0gICAgaWYgKHBhZ2UgJiYgIXRvcERvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxl
KCkpIHsKLSAgICAgICAgV2ViR0xMb2FkUG9saWN5IHBvbGljeSA9IHBhZ2UtPm1haW5GcmFtZSgp
LmxvYWRlcigpLmNsaWVudCgpLndlYkdMUG9saWN5Rm9yVVJMKHRvcERvY3VtZW50LnVybCgpKTsK
LQotICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikgewotICAgICAgICAg
ICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBpcyB0byBibG9jayBX
ZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwb2xpY3kgPT0g
V2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIldlYkdMIHBv
bGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRlci4iKTsKLSAgICAg
ICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGF0dHJz
ID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCk7
Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+
c2V0dGluZ3MoKS5vcGVuR0xNdWx0aXNhbXBsaW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgYXR0
cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBhdHRyaWJ1dGVzLm5vRXh0
ZW5zaW9ucyA9IHRydWU7Ci0gICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOwot
ICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB0cnVlOwotCi0gICAgaWYgKGZyYW1l
LT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVXZWJHTFJlbmRlcmluZygpKQotICAgICAgICBhdHRy
aWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5kZXJlciA9IHRydWU7Ci0KLSAgICBpZiAocGFnZSkKLSAg
ICAgICAgYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvID0gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKTsKLQotICAgIGlmIChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIExP
RyhXZWJHTCwgIkNyZWF0ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQgd2ls
bCByZXF1aXJlIGEgcG9saWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKLSAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOwotICAgICAgICByZW5kZXJp
bmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmluZ0Nv
bnRleHQ7Ci0gICAgfQotCi0gICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50LnZp
ZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCk7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRv
dykpOwotCi0gICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkgewotICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxzZSwg
dHJ1ZSwgIkNvdWxkIG5vdCBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xf
RVhUX2RlYnVnX21hcmtlciIpKQotICAgICAgICBleHRlbnNpb25zLT5wdXNoR3JvdXBNYXJrZXJF
WFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
UmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOwotICAgIHJlbmRlcmluZ0NvbnRleHQt
PnN1c3BlbmRJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Ci19Ci0K
LVdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNF
bGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKLSAgICAs
IEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFzLT5kb2N1bWVudCgpKQotICAgICwgbV9jb250
ZXh0KDApCi0gICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKLSAgICAsIG1fZGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNoQ29u
dGV4dExvc3RFdmVudCkKLSAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCi0gICAgLCBtX3Jl
c3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29u
dGV4dCkKLSAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQotICAgICwgbV9jb250ZXh0TG9z
dChmYWxzZSkKLSAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQot
ICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgLCBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlKHRydWUpCi0gICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZChtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCi0gICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24odHJ1ZSkKLSAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKLXsK
LX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENh
bnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQot
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCi0gICAgLCBBY3RpdmVE
T01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fY29udGV4dChjb250
ZXh0KQotICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCi0gICAgLCBtX2Rpc3BhdGNoQ29udGV4dExv
c3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRl
eHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQotICAgICwgbV9yZXN0
b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRl
eHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoNCkKLSAgICAsIG1fY29udGV4dExvc3Qo
ZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAg
ICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9zeW50aGVzaXplZEVycm9yc1Rv
Q29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4R0xF
cnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KGZhbHNlKQotICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQotewot
ICAgIEFTU0VSVChtX2NvbnRleHQpOwotICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250ZXh0
R3JvdXA6OmNyZWF0ZSgpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMpOwot
Ci0gICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0RGltc1sxXSA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JU
X0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotCi0gICAgc2V0dXBGbGFncygpOwotICAg
IGluaXRpYWxpemVOZXdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0KTsK
LSAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFs
c2U7Ci0gICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7Ci0gICAgbV9wYWNrQWxpZ25tZW50ID0g
NDsKLSAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbV91bnBhY2tGbGlwWSA9IGZhbHNl
OwotICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOwotICAgIG1fdW5wYWNrQ29s
b3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dF
QkdMOwotICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7Ci0gICAgbV9jdXJyZW50UHJvZ3JhbSA9
IDA7Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgIG1fcmVuZGVyYnVmZmVyQmlu
ZGluZyA9IDA7Ci0gICAgbV9kZXB0aE1hc2sgPSB0cnVlOwotICAgIG1fc3RlbmNpbEVuYWJsZWQg
PSBmYWxzZTsKLSAgICBtX3N0ZW5jaWxNYXNrID0gMHhGRkZGRkZGRjsKLSAgICBtX3N0ZW5jaWxN
YXNrQmFjayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsRnVuY1JlZiA9IDA7Ci0gICAgbV9z
dGVuY2lsRnVuY1JlZkJhY2sgPSAwOwotICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZGRkZG
RjsKLSAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAweEZGRkZGRkZGOwotICAgIG1fbGF5ZXJD
bGVhcmVkID0gZmFsc2U7Ci0gICAgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7Ci0gICAgCi0gICAgbV9jbGVhckNvbG9yWzBdID0gbV9j
bGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsKLSAg
ICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgbV9jbGVhckRlcHRoID0gMTsKLSAgICBt
X2NsZWFyU3RlbmNpbCA9IDA7Ci0gICAgbV9jb2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9
IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOwotCi0gICAgR0MzRGludCBu
dW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywg
Jm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIG1fdGV4dHVyZVVuaXRzLmNsZWFy
KCk7Ci0gICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpOwotCi0gICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZudW1W
ZXJ0ZXhBdHRyaWJzKTsKLSAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJz
OwotICAgIAotICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVT
aXplKTsKLSAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVs
Q291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZSk7Ci0gICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21w
dXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4dHVy
ZVNpemUpOwotICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAmbV9t
YXhSZW5kZXJidWZmZXJTaXplKTsKLQotICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRf
ZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4KLSAgICBtX21heERyYXdCdWZmZXJzID0g
MDsKLSAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOwotCi0gICAgbV9iYWNrRHJhd0J1ZmZl
ciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOwotICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVp
cmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKLSAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gZmFs
c2U7Ci0KLSAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9UeXBl
RGVmYXVsdCk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVj
dC5nZXQoKSk7Ci0gICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4
QXJyYXlPYmplY3Q7Ci0gICAgCi0gICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9tYXhW
ZXJ0ZXhBdHRyaWJzKTsKLQotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxp
YW50KCkpCi0gICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7Ci0KLSAgICBJbnRTaXplIGNhbnZh
c1NpemUgPSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoY2FudmFzU2l6ZSk7Ci0KLSAgICBtX2NvbnRl
eHQtPnJlc2hhcGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKLSAg
ICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6
ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250ZXh0LT5zY2lzc29yKDAsIDAsIGNhbnZhc1NpemUud2lk
dGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBtX2NvbnRleHQtPnNldENvbnRleHRM
b3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2Fs
bGJhY2s+KHRoaXMpKTsKLSAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKHN0
ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s+
KHRoaXMpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3MoKQot
ewotICAgIEFTU0VSVChtX2NvbnRleHQpOwotCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMo
KS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNv
bGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwotCi0g
ICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7Ci0g
ICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fc3RyaWN0X2F0dHJpYnMiKTsK
LSAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5h
YmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOwotICAgIGlmIChtX2lzR0xFUzJDb21w
bGlhbnQpIHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7Ci0gICAgICAgIG1f
aXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNF
bmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5p
c0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28iKTsKLSAgICAgICAgbV9p
c0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0Vu
YWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIH0KLSAgICBtX2lzUm9i
dXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJs
ZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3QKLXsKLSAgICBpZiAoUGFnZSogcGFn
ZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIHBhZ2UtPnNl
dHRpbmdzKCkucHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb21wcmVzc2VkVGV4
dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgaWYgKCFtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQotICAgICAgICBtX2NvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+V2Vi
R0xSZW5kZXJpbmdDb250ZXh0KCkKLXsKLSAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8g
V2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRoZSBsYXN0IHJlZmVyZW5jZQotICAgIC8vIHRo
ZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxhc3QgY29udGV4dCBpcyByZW1vdmVkIGZyb20g
dGhlIGNvbnRleHQgZ3JvdXAuCi0gICAgbV9ib3VuZEFycmF5QnVmZmVyID0gbnVsbHB0cjsKLSAg
ICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBudWxs
cHRyOwotICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxscHRyOwotICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nID0gbnVsbHB0cjsKLSAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkg
ewotICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsK
LSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKLSAgICBtX2JsYWNr
VGV4dHVyZUN1YmVNYXAgPSBudWxscHRyOwotCi0gICAgaWYgKCFtX2lzUGVuZGluZ1BvbGljeVJl
c29sdXRpb24pIHsKLSAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwotICAgICAg
ICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLSAgICAgICAgbV9jb250ZXh0R3JvdXAtPnJl
bW92ZUNvbnRleHQodGhpcyk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xp
Y3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgZHJhd2luZyBidWZm
ZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAot
ICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KLSAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKLQotICAg
IGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENhbGxi
YWNrKG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQotewotICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5t
YXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+bWFya0NvbnRlbnRzQ2hhbmdlZCgpOwotCi0gICAgbV9sYXllckNs
ZWFyZWQgPSBmYWxzZTsKLSAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5k
ZXJCb3goKTsKLSAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiByZW5kZXJC
b3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewotICAgICAgICBtX21hcmtlZENhbnZh
c0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAg
ICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAgICAgICAgIG1f
bWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwotICAgICAgICAgICAgY2FudmFzKCktPmRpZERyYXco
RmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZDb21w
b3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9jb250ZXh0LT5sYXll
ckNvbXBvc2l0ZWQoKSB8fCBtX2xheWVyQ2xlYXJlZAotICAgICAgICB8fCBtX2F0dHJpYnV0ZXMu
cHJlc2VydmVEcmF3aW5nQnVmZmVyIHx8IChtYXNrICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXM+IGNvbnRleHRBdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIC8v
IERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2Vy
IGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KLSAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBtYXNr
ICYmICFtX3NjaXNzb3JFbmFibGVkOwotCi0gICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNr
ICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQotICAgICAgICBtX2NvbnRl
eHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29sb3Jb
MV0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0gPyBt
X2NsZWFyQ29sb3JbMl0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
ck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKLSAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzLT5kZXB0aCgpKSB7Ci0gICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0aE1h
c2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQotICAg
ICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOwotICAgICAgICBjbGVhck1hc2sg
fD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgICAgIG1fY29udGV4
dC0+ZGVwdGhNYXNrKHRydWUpOwotICAgIH0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPnN0
ZW5jaWwoKSkgewotICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgICAgICAgICAgbV9jb250ZXh0LT5j
bGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAgIGNsZWFy
TWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotICAgICAgICBt
X2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCAw
eEZGRkZGRkZGKTsKLSAgICB9Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVmZmVycyhjbGVhck1hc2spOwotICAgIGVsc2Ugewot
ICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwotICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7Ci0gICAgfQotCi0gICAgcmVzdG9yZVN0
YXRlQWZ0ZXJDbGVhcigpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBtX2xheWVy
Q2xlYXJlZCA9IHRydWU7Ci0KLSAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQotewotICAgIC8v
IFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgotICAgIGlmIChtX3NjaXNz
b3JFbmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNvbG9yWzBd
LCBtX2NsZWFyQ29sb3JbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJDb2xv
clsyXSwgbV9jbGVhckNvbG9yWzNdKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhtX2NvbG9y
TWFza1swXSwgbV9jb2xvck1hc2tbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
ck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgobV9j
bGVhckRlcHRoKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCk7
Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVCwgbV9zdGVuY2lsTWFzayk7Ci0gICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0aE1h
c2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0xheWVyQ29tcG9zaXRl
ZCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQotICAgICAgICBjYW52YXMoKS0+Y2xl
YXJQcmVzZW50YXRpb25Db3B5KCk7Ci0KLSAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlzIHdyaXR0
ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAotICAgIC8vIGhhcHBlbmVk
IGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21wb3Np
dG9yLgotICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFtX2F0dHJpYnV0
ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+cGFpbnRDb21w
b3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7Ci0KLSAgICAgICAgY2Fu
dmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbnZh
cygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwot
Ci0gICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAgICBtX21h
cmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBtX2RyYXdpbmdCdWZmZXIu
Z2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2RyYXdp
bmdCdWZmZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IGxldmVsIHdlIGRvbid0Ci0gICAgLy8ga25vdyBpZiB0aGUgdW5kZXJseWlu
ZyBGQk8gdXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgotICAgIEdDM0RpbnQgbWF4U2l6
ZSA9IHN0ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7Ci0g
ICAgLy8gTGltaXQgZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkgZXho
YXVzdGlvbi4KLSAgICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OwotICAgIG1heFNp
emUgPSBzdGQ6Om1pbihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7Ci0gICAgR0MzRGludCBtYXhX
aWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKLSAgICBHQzNE
aW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFdKTsK
LSAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7Ci0gICAgaGVpZ2h0ID0gY2xh
bXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOwotCi0gICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsKLSAg
ICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7Ci0gICAg
ICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkpCi0gICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0NoYW5nZWQp
OwotICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV2UgZG9u
J3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXdseSBjcmVh
dGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCi0gICAgLy8gY2xlYXIgKGFuZCB0
aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgotICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpIHsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKLSAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwotICAgIH0gZWxzZQotICAg
ICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8o
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQo
KSkpOwotICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKSk7
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9m
cmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKLXsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKLQotICAg
IHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsK
LX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIG1fZHJhd2lu
Z0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotdW5zaWduZWQgaW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNob3J0
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1aW50KTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihHQzNEZmxvYXQpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJl
VW5pdHMuc2l6ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2FjdGl2ZVRleHR1cmVVbml0
ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMDsKLSAgICBtX2NvbnRleHQt
PmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEFjdGl2ZVRleHR1cmVVbml0KHRleHR1cmUpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNoU2hh
ZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25BdHRhY2hlZCgp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0cmli
TG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVM
b2NhdGlvbkxlbmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
YmluZEF0dHJpYkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9i
amVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQotewotICAgIGRlbGV0ZWQgPSBmYWxzZTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKG9iamVjdCkgewotICAgICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdy
b3VwKCksIHRoaXMpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBub3QgZnJv
bSB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+b2JqZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmpl
Y3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0aCBt
dWx0aXBsZSB0YXJnZXRzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQotICAgICAgICBtX2JvdW5kQXJy
YXlCdWZmZXIgPSBidWZmZXI7Ci0gICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRC
dWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKLSAg
ICBpZiAoYnVmZmVyKQotICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNoZWNrT2JqZWN0
VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgaWYgKHRh
cmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRGcmFtZWJ1
ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
ZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKG9iamVjdE9yWmVy
byhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIEluc3RlYWQgb2YgYmluZGlu
ZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5iaW5kKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwotICAgIGlmIChidWZmZXIpCi0gICAgICAg
IGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwotICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBp
ZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVmZmVy
LCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBy
ZW5kZXJCdWZmZXIgPSAwOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJlbmRl
ckJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmplY3RP
clplcm8ocmVuZGVyQnVmZmVyKSk7Ci0gICAgaWYgKHJlbmRlckJ1ZmZlcikKLSAgICAgICAgcmVu
ZGVyQnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4
dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBi
b29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFRleHR1cmUi
LCB0ZXh0dXJlLCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQot
ICAgICAgICB0ZXh0dXJlID0gMDsKLSAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJn
ZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZFRl
eHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAwOwotICAg
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKLSAgICAgICAg
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZyA9IHRl
eHR1cmU7Ci0gICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7Ci0KLSAgICAgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKLSAgICAgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4dHVy
ZSkpOwotCi0gICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVApIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKLSAgICAgICAgbWF4TGV2ZWwgPSBt
X21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJlIiwg
ImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7Ci0gICAgaWYgKHRl
eHR1cmUpCi0gICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVsKTsKLQot
ICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCB0aGUg
VEVYVFVSRV9XUkFQX1IKLSAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFNUF9UT19FREdFIGZvciBj
dWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKLSAgICAvLyBFUyAyLjAgZG9lc24ndCBl
eHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbikgYW5kCi0gICAgLy8g
b3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBvdmVyIHRoZSBzZWFtcyBp
biB0aGlzCi0gICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgc3VwcG9y
dGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAotICAgIC8vIHBsYXRmb3JtcyBpcyBmYWlybHkgaW52
b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJlIElECi0gICAgLy8gaW4g
YWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxhaW50cywgc28gdGhlIGxv
Z2ljIGhhcwotICAgIC8vIGJlZW4gcmVtb3ZlZC4KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxv
YXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymxl
bmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGUpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0Rl
bnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBt
b2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZUFs
cGhhKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNlcGFy
YXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9y
cygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVu
dW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCi17Ci0gICAg
Ly8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgUkdC
LgotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5j
RmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEs
IGRzdEFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEo
R0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIg
PSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2Fn
ZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc2l6ZSA8IDAp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShz
dGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwg
ImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAg
IG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4o
c2l6ZSksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWlsZWQu
IFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRv
ZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwotICAgIH0KLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1
ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7Ci0gICAgaWYg
KCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJE
YXRhIiwgIm5vIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZl
ci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImlu
dmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgIG1f
Y29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0
YSgpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBU
ZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2Vz
LgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
QXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRl
QnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghZGF0YSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZl
ckRhdGEiLCAibm8gZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVm
ZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAi
aW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5i
YXNlQWRkcmVzcygpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24g
ZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5r
cyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIg
PSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0LCBH
cmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIGlmICghYnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9m
ZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWRhdGEpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNz
ZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJE
YXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8
R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCkpOwot
ICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0g
ICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVm
ZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAgICAgICAg
YnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9u
ZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEFUSUNfRFJBVyk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAg
IGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRw
dHI+KG9mZnNldCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91
dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2Nv
bnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmICht
X2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8v
IFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRv
ZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5k
aXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi1HQzNEZW51bSBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0
dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlm
ICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVU
RTsKLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0g
ICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3RhdHVzKCZy
ZWFzb24pOwotICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7Ci0gICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVja0ZyYW1l
YnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
KEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIiLCAiaW52
YWxpZCBtYXNrIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVh
c29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNE
KCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJj
bGVhciIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFjbGVhcklm
Q29tcG9zaXRlZChtYXNrKSkKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKLSAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MzRGZsb2F0
IGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChzdGQ6OmlzbmFuKHIpKQotICAgICAgICByID0gMDsKLSAgICBpZiAoc3RkOjpp
c25hbihnKSkKLSAgICAgICAgZyA9IDA7Ci0gICAgaWYgKHN0ZDo6aXNuYW4oYikpCi0gICAgICAg
IGIgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFuKGEpKQotICAgICAgICBhID0gMTsKLSAgICBtX2Ns
ZWFyQ29sb3JbMF0gPSByOwotICAgIG1fY2xlYXJDb2xvclsxXSA9IGc7Ci0gICAgbV9jbGVhckNv
bG9yWzJdID0gYjsKLSAgICBtX2NsZWFyQ29sb3JbM10gPSBhOwotICAgIG1fY29udGV4dC0+Y2xl
YXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsKLSAgICBt
X2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGVhclN0ZW5jaWwgPSBzOwotICAg
IG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Ri
b29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbG9yTWFza1swXSA9IHJlZDsK
LSAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOwotICAgIG1fY29sb3JNYXNrWzJdID0gYmx1ZTsK
LSAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwotICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclplcm8oc2hh
ZGVyKSk7Ci0gICAgR0MzRGludCB2YWx1ZTsKLSAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9i
amVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMsICZ2
YWx1ZSk7Ci0gICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSkKLXsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxp
ZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJpbnZhbGlkIGlu
dGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGJvcmRlcikg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucygi
Y29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRl
cm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3Nl
ZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGludGVy
bmFsZm9ybWF0LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR0xUZXh0dXJlKiB0
ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdl
dCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpIHsKLSAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNO
UE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImxl
dmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7
Ci0gICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgYm9yZGVyLCBkYXRhLT5ieXRlTGVu
Z3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBjb21wcmVzc2VkVGV4
SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vzbid0
IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCi0gICAgICAgIHRleC0+bWFya0ludmFsaWQo
dGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0ZXgtPnNldExl
dmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIHRleC0+c2V0Q29tcHJlc3NlZCgp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoZm9ybWF0KSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29t
cHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGlu
ZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZm9ybWF0ICE9IHRleC0+Z2V0SW50ZXJuYWxG
b3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQi
LCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMo
ImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBn
cmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBk
YXRhLT5iYXNlQWRkcmVzcygpKTsKLSAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKLX0KLQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgaWYgKEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpICYgKEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVS
X0JJVCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBiZSBzZXQsIG9u
bHkgcmVuZGVyZWQgdG8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoImNvcHlU
ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVT
ZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmlu
YXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0
KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0
aWJsZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdo
dCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVi
dWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3Vy
Y2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJE
IiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjbGVhcklmQ29tcG9zaXRl
ZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdC
dWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcuZ2V0KCkpOwotICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJh
d2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICBH
QzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKLSAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0
aCwgY2xpcHBlZEhlaWdodDsKLSAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgp
LCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAg
ICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7Ci0gICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlw
cGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVp
Z2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NvbnRl
eHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIH0KLSAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1l
YnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1
dGVkLgotICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwg
bGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0
ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAg
aWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29weVRl
eFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5VGV4
U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gQmVm
b3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFw
cGVucyBmaXJzdC4KLSAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsgaGVp
Z2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+Z2V0
V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVpZ2h0
KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xlIG91
dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKLSAgICBp
ZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhTdWJJbWFnZTJEIiwgaW50ZXJu
YWxmb3JtYXQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0
Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1l
YnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAiZnJh
bWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFj
Y2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVz
b3VyY2VTYWZlKCkpIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIo
bV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAg
ICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR0Mz
RGludCBjbGlwcGVkWCwgY2xpcHBlZFk7Ci0gICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgs
IGNsaXBwZWRIZWlnaHQ7Ci0gICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwg
JmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewot
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKTsKLSAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUgPSB0ZXgtPmdldFR5cGUodGFy
Z2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hhcltd
PiB6ZXJvOwotICAgICAgICAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzaXplOwotICAgICAgICAgICAgICAgIEdDM0RlbnVtIGVycm9yID0g
bV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBo
ZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICAgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBk
aW1lbnNpb25zIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQgY2hh
cltdPihzaXplKTsKLSAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtc2V0KHpl
cm8uZ2V0KCksIDAsIHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jb250ZXh0
LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoY2xpcHBl
ZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgewotICAgICAgICAgICAgICAgIFNjb3Bl
ZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBwZWRYIC0geCwgeW9mZnNl
dCArIGNsaXBwZWRZIC0geSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNjb3BlZERyYXdp
bmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTEJ1ZmZl
cj4gbyA9IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8u
Z2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJl
ZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRoaXMp
OwotICAgIGFkZENvbnRleHRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBh
c3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRleHR1
cmUoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6OmNy
ZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87
Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZVByb2dyYW0oKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJHTFBy
b2dyYW06OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAg
cmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFk
ZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxX
ZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0MzRGVudW0g
dHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRlciIs
ICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhpcywg
dHlwZSk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKLXsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
ZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG9iamVjdC0+b2JqZWN0KCkpCi0gICAg
ICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiBjb250ZXh0IGhlcmUgYmVjYXVzZSB3ZSB3YW50Ci0g
ICAgICAgIC8vIHRoaW5ncyBpbiB0aGlzIGNvbnRleHQgdW5ib3VuZC4KLSAgICAgICAgb2JqZWN0
LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIq
IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChidWZmZXIpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCi0gICAgICAgIG1fYm91
bmRBcnJheUJ1ZmZlciA9IDA7Ci0KLSAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnVuYmlu
ZEJ1ZmZlcihidWZmZXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRl
RnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFk
ZWxldGVPYmplY3QoZnJhbWVidWZmZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGZyYW1l
YnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7Ci0gICAgICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nID0gMDsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7Ci0gICAgICAgICAgICAv
LyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGludGVy
bmFsIGZiby4KLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCi17Ci0gICAgZGVs
ZXRlT2JqZWN0KHByb2dyYW0pOwotICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFByb2dy
YW0gdG8gMCBoZXJlIGJlY2F1c2UgdGhlIGRlbGV0aW9uIG9mIHRoZQotICAgIC8vIGN1cnJlbnQg
cHJvZ3JhbSBpcyBkZWxheWVkLgotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCi17Ci0gICAg
aWYgKCFkZWxldGVPYmplY3QocmVuZGVyYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChyZW5kZXJidWZmZXIgPT0gbV9yZW5kZXJidWZmZXJCaW5kaW5nKQotICAgICAgICBtX3JlbmRl
cmJ1ZmZlckJpbmRpbmcgPSAwOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAg
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1
ZmZlcihyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCi17Ci0gICAgZGVsZXRlT2JqZWN0KHNoYWRl
cik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKFdlYkdM
VGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNbaV0u
dGV4dHVyZTJEQmluZGluZykKLSAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUy
REJpbmRpbmcgPSBudWxscHRyOwotICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVVbml0
c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpCi0gICAgICAgICAgICBtX3RleHR1cmVVbml0c1tp
XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOwotICAgIH0KLSAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRh
Y2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5kZXB0
aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aE1hc2so
R0MzRGJvb2xlYW4gZmxhZykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9kZXB0aE1hc2sgPSBmbGFnOwotICAgIG1fY29udGV4dC0+
ZGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhS
YW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoek5lYXIgPiB6RmFy
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2Vi
R0xPYmplY3QoImRldGFjaFNoYWRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIXByb2dyYW0tPmRldGFjaFNoYWRlcihzaGFkZXIpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRldGFjaFNoYWRl
ciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RPclpl
cm8oc2hhZGVyKSk7Ci0gICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNEZW51bSBjYXAp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmls
aXR5KCJkaXNhYmxlIiwgY2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewotICAgICAgICBtX3N0ZW5jaWxFbmFibGVk
ID0gZmFsc2U7Ci0gICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsK
LSAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZCht
X3NjaXNzb3JFbmFibGVkKTsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
R0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYg
c3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGlu
ZGV4KTsKLSAgICBzdGF0ZS5lbmFibGVkID0gZmFsc2U7Ci0KLSAgICBpZiAoaW5kZXggPiAwIHx8
IGlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dHB0ciBvZmZzZXQpCi17Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZm
ZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwot
ICAgIAotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAob2Zmc2V0IDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgewotICAgICAgICAvLyBG
b3IgYW4gdW5zaWduZWQgaW50IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgNCBm
b3IgYWxpZ25tZW50IHJlYXNvbnMuCi0gICAgICAgIGlmIChvZmZzZXQgJSA0KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9m
ZnNldC4KLSAgICAgICAgb2Zmc2V0IC89IDQ7Ci0KLSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBl
bGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7Ci0gICAgICAgIGlmIChvZmZzZXQg
PiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUKSB7
Ci0gICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0IG11c3QgYmUg
ZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVudCByZWFzb25zLgotICAgICAgICBpZiAob2Zmc2V0
ICUgMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBNYWtlIHVvZmZz
ZXQgYW4gZWxlbWVudCBvZmZzZXQuCi0gICAgICAgIG9mZnNldCAvPSAyOwotCi0gICAgICAgIEdD
M0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAyOwotICAg
ICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVm
ZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAt
IG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlD
b25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQp
Ci17Ci0gICAgLy8gUGVyZm9ybXMgY29uc2VydmF0aXZlIHZhbGlkYXRpb24gYnkgY2FjaGluZyBh
IG1heGltdW0gaW5kZXggb2YKLSAgICAvLyB0aGUgZ2l2ZW4gdHlwZSBwZXIgZWxlbWVudCBhcnJh
eSBidWZmZXIuIElmIGFsbCBvZiB0aGUgYm91bmQKLSAgICAvLyBhcnJheSBidWZmZXJzIGhhdmUg
ZW5vdWdoIGVsZW1lbnRzIHRvIHNhdGlzZnkgdGhhdCBtYXhpbXVtCi0gICAgLy8gaW5kZXgsIHNr
aXBzIHRoZSBleHBlbnNpdmUgcGVyLWRyYXctY2FsbCBpdGVyYXRpb24gaW4KLSAgICAvLyB2YWxp
ZGF0ZUluZGV4QXJyYXlQcmVjaXNlLgotICAgIAotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxl
bWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJy
YXlCdWZmZXIoKTsKLQotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVtZW50QXJyYXlC
dWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAgICAvLyBUaGUgY2FzZSBjb3VudD09MCBpcyBhbHJlYWR5
IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxpZGF0ZUluZGV4QXJyYXlDb25z
ZXJ2YXRpdmUuCi0gICAgaWYgKCFudW1FbGVtZW50cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1l
bnRBcnJheUJ1ZmZlcigpOwotICAgIEFTU0VSVChidWZmZXIpOwotCi0gICAgaW50IG1heEluZGV4
ID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRDYWNoZWRNYXhJbmRleCh0eXBlKTsKLSAgICBpZiAo
bWF4SW5kZXggPCAwKSB7Ci0gICAgICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gaW5kZXggaW4g
dGhlIGVudGlyZSBidWZmZXIgZm9yIHRoZSBnaXZlbiB0eXBlIG9mIGluZGV4LgotICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURTogewotICAgICAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0MzRHVieXRlKj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChHQzNEc2l6
ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1heElu
ZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQ6IHsKLSAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNE
dXNob3J0KTsKLSAgICAgICAgICAgIGNvbnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxj
b25zdCBHQzNEdXNob3J0Kj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChHQzNE
c2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1h
eEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfSU5UOiB7Ci0gICAgICAgICAgICBpZiAoIW1fb2VzRWxlbWVudEluZGV4VWlu
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBudW1FbGVtZW50
cyAvPSBzaXplb2YoR0MzRHVpbnQpOwotICAgICAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAgPSBz
dGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGJ1ZmZlci0+ZGF0YSgpKTsKLSAgICAgICAgICAg
IGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAg
ICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBb
aV0pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudEFycmF5
QnVmZmVyLT5zZXRDYWNoZWRNYXhJbmRleCh0eXBlLCBtYXhJbmRleCk7Ci0gICAgfQotCi0gICAg
aWYgKG1heEluZGV4ID49IDApIHsKLSAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXF1aXJlZCBl
bGVtZW50cyBpcyBvbmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtCi0gICAgICAgIC8vIGluZGV4IHRo
YXQgd2lsbCBiZSBhY2Nlc3NlZC4KLSAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IG1heElu
ZGV4ICsgMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5UHJl
Y2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCB1
bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKLXsKLSAgICBBU1NFUlQoY291bnQgPj0gMCAm
JiBvZmZzZXQgPj0gMCk7Ci0gICAgdW5zaWduZWQgbGFzdEluZGV4ID0gMDsKLSAgICAKLSAgICBS
ZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0KLSAgICBpZiAoIWVsZW1lbnRBcnJh
eUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjb3VudCkgewotICAg
ICAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBsb25nIHVvZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7Ci0KLSAgICBpZiAodHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7Ci0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBh
biBlbGVtZW50IG9mZnNldC4KLSAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVpbnQpOwot
ICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4o
ZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZz
ZXQ7Ci0gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPiBsYXN0
SW5kZXgpCi0gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7Ci0gICAgICAgICAgICArK3A7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUKSB7Ci0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNl
dC4KLSAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7Ci0gICAgICAgIGNvbnN0
IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oZWxlbWVudEFy
cmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7Ci0gICAg
ICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgpCi0g
ICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7Ci0gICAgICAgICAgICArK3A7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpIHsKLSAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0Mz
RHVieXRlKj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgp
KSArIHVvZmZzZXQ7Ci0gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAo
KnAgPiBsYXN0SW5kZXgpCi0gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7Ci0gICAgICAg
ICAgICArK3A7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGVuIHNldCB0aGUgbGFzdCBp
bmRleCBpbiB0aGUgaW5kZXggYXJyYXkgYW5kIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KLSAgICBu
dW1FbGVtZW50c1JlcXVpcmVkID0gbGFzdEluZGV4ICsgMTsKLSAgICByZXR1cm4gbnVtRWxlbWVu
dHNSZXF1aXJlZCA+IDA7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmltaXRp
dmVDb3VudCkKLXsKLSAgICBpZiAoIW1fY3VycmVudFByb2dyYW0pCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRyaWIgYW5kIGNo
ZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKLSAgICAgICAgaWYgKCFtX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZhbGlkYXRlQmlu
ZGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChlbGVt
ZW50Q291bnQgPD0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLQotICAgIC8vIExvb2sgaW4g
ZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUgY3VycmVudCBwcm9ncmFtKS4KLSAg
ICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNlOwotICAgIGJvb2wgc2F3RW5hYmxl
ZEF0dHJpYiA9IGZhbHNlOwotICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMgPSBtX2N1
cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsgKytpKSB7Ci0gICAgICAgIGludCBs
b2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpKTsKLSAgICAg
ICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0PGludD4obV9tYXhWZXJ0ZXhBdHRy
aWJzKSkgewotICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVy
dGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0
ZXhBdHRyaWJTdGF0ZShsb2MpOwotICAgICAgICAgICAgaWYgKHN0YXRlLmVuYWJsZWQpIHsKLSAg
ICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAv
LyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVtZW50cyBjb21wdXRhdGlvbi4KLSAg
ICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVudCwgd2Ugd2lsbCBvbmx5IHRvdWNo
IHRoZSBkYXRhIGZvciB0aGUKLSAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGFuZCBub3RoaW5n
IGJleW9uZCBpdC4KLSAgICAgICAgICAgICAgICBpbnQgYnl0ZXNSZW1haW5pbmcgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgoKSAtIHN0YXRlLm9mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKLSAgICAgICAgICAgICAgICBpZiAoYnl0
ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KQotICAgICAgICAgICAgICAgICAg
ICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcgLSBzdGF0ZS5ieXRlc1BlckVsZW1l
bnQpIC8gc3RhdGUuc3RyaWRlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc3RhbmNlc1Jl
cXVpcmVkID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGl2aXNvcikgewotICAgICAg
ICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKCFzYXdOb25JbnN0YW5jZWRBdHRyaWIgJiYgc2F3RW5hYmxl
ZEF0dHJpYikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCkKLXsKLSAgICBpZiAoIW9iamVj
dCB8fCAhb2JqZWN0LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0IG9y
IG9iamVjdCBkZWxldGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYg
KCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RzaXplaSBwcmltaXRpdmVDb3VudCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25O
YW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGZpcnN0IDwgMCB8fCBjb3Vu
dCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAgICBtYXJr
Q29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlm
IChwcmltaXRpdmVDb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZl
IGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCi0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7Ci0gICAgICAgIENoZWNrZWQ8R0Mz
RGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2Vk
Q291bnQ7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQ
cmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgIGlmIChjaGVja2VkU3VtLmhh
c092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8
ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hlY2tl
ZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0
cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIg
aW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZl
KCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24p
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdD
M0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLQotICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3QXJy
YXlzIiwgbW9kZSwgZmlyc3QsIGNvdW50LCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xl
YXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZh
bHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICB2ZXJ0ZXhBdHRyaWIw
U2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKLSAg
ICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRl
bmVzcygiZHJhd0FycmF5cyIsIHRydWUpOwotCi0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1v
ZGUsIGZpcnN0LCBjb3VudCk7Ci0KLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0
ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRy
aWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOwotICAgIG1hcmtD
b250ZXh0Q2hhbmdlZCgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVk
JiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBt
b2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxT
ZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Ci0gICAgICAgIGlm
IChtX29lc0VsZW1lbnRJbmRleFVpbnQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiY291bnQgb3Igb2Zmc2V0IDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChwcmltaXRpdmVDb3VudCA8
IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRF
bGVtZW50QXJyYXlCdWZmZXIoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1FTlRf
QVJSQVlfQlVGRkVSIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAg
ICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAgICAgICBpZiAo
IXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAicmVxdWVzdCBvdXQg
b2YgYm91bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFjb3VudCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJm
bG93PiBjaGVja2VkQ291bnQoY291bnQpOwotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQpOwotICAgICAg
ICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291
bnQuaGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQg
dG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZh
dGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1F
bGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICAg
ICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNoZWNrZWRDb3VudC51bnNhZmVHZXQo
KSwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8
ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRpdmVD
b3VudC51bnNhZmVHZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVt
cHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAi
ZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYm
ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlz
UmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCByZWFzb24pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAg
dW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOwotICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMo
ImRyYXdFbGVtZW50cyIsIG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzLCAw
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJv
b2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpKSB7Ci0gICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxpZGF0
ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBudW1FbGVtZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBz
aW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0Vs
ZW1lbnRzIiwgdHJ1ZSk7Ci0KLSAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3Vu
dCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7Ci0KLSAgICBpZiAoIWlz
R0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0
b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVT
Mk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxl
bWVudHMiLCBmYWxzZSk7Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwgY2Fw
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfVEVTVCkgewotICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAg
YXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JF
bmFibGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7Ci0g
ICAgfQotICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4
VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91
dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0gICAgc3RhdGUuZW5hYmxl
ZCA9IHRydWU7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+ZmluaXNoKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fY29udGV4dC0+Zmx1c2goKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVu
dCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVy
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1l
dGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJpbnZh
bGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChidWZmZXIgJiYg
IWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhpcyBj
b250ZXh0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhl
IGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBp
bXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZh
dWx0Ci0gICAgLy8gRkJPLgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZlcik7
Ci0gICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQs
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2Jq
ZWN0KTsKLSAgICB9Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRGb3JC
b3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7Ci0gICAgYXBwbHlTdGVuY2lsVGVz
dCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJn
ZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVy
VGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChsZXZlbCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlk
YXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUy
RCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVi
dWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMg
dXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJP
LgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1
ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKLSAgICBzd2l0Y2ggKGF0
dGFjaG1lbnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FU
VEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJl
T2JqZWN0LCBsZXZlbCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQo
dGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQs
IHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVj
dCwgbGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVj
dCwgbGV2ZWwpOwotICAgIH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVu
dEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZl
bCk7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1v
ZGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAoR0Mz
RGVudW0gdGFyZ2V0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoImdlbmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxsIHRo
ZSBzYW1lIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3NlZCB0
ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAyOgotICAgIGlmICh0ZXgtPmlzQ29t
cHJlc3NlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5lcmF0
ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1hcCIs
IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIGdlbmVyYXRlTWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVyIGlz
IG5vdCBORUFSRVNUX01JUE1BUF9MSU5FQVIKLSAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhlIGhh
Y2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCi0jaWYgT1MoREFSV0lOKQotICAgIGJv
b2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5nZXRNaW5GaWx0
ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Ci0gICAg
ICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5F
QVIpOwotICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7Ci0gICAgfQotI2VuZGlm
Ci0gICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotI2lmIE9TKERBUldJTikK
LSAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHRl
eC0+Z2V0TWluRmlsdGVyKCkpOwotI2VuZGlmCi0gICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExldmVs
SW5mbygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRB
Y3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQWN0
aXZlSW5mbyBpbmZvOwotICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwgaW5k
ZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKLQotICAgIHJldHVybiBXZWJHTEFjdGl2ZUlu
Zm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0KLQotUGFzc1Jl
ZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5p
Zm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9n
cmFtKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICgh
bV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgs
IGluZm8pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlh
bnQoKSkKLSAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0aCgi
WzBdIikpCi0gICAgICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKLQotICAgIExPRyhX
ZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1l
LnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGlu
Zm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVjdG9y
PFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZVtdID0gewotICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX1NIQURFUiwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5U
X1NIQURFUgotICAgIH07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihzaGFk
ZXJUeXBlKSAvIHNpemVvZihHQzNEZW51bSk7ICsraSkgewotICAgICAgICBXZWJHTFNoYWRlciog
c2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7Ci0gICAg
ICAgIGlmIChzaGFkZXIpCi0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIp
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0MzRGludCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJl
dHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxvY2F0
aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5n
KCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYg
KGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXBy
b2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIsICJw
cm9ncmFtIG5vdCBsaW5rZWQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1
cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5h
bWUpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIs
ICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
fQotCi0gICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAmJiBw
bmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZmZXJQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250
ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIGlm
IChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCi0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRleHRB
dHRyaWJ1dGVzIG9iamVjdCB0bwotICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRhdGlu
ZyBhbnkgY2FjaGVkIHZlcnNpb24uCi0KLSAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2Ug
cmVxdWVzdGVkIHZhbHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAotICAgIC8vIGFuZCBzdGVuY2ls
LCByZWdhcmRsZXNzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8g
R3JhcGhpY3NDb250ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KLSAgICBSZWZQdHI8V2ViR0xDb250
ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0
ZShtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOwotICAgIGlmICghbV9hdHRyaWJ1
dGVzLmRlcHRoKQotICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7Ci0gICAgaWYg
KCFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNpbChm
YWxzZSk7Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBUaGUgRHJhd2lu
Z0J1ZmZlciBvYnRhaW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dENvbnRleHRBdHRyaWJ1dGVzKCksCi0gICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3duIGRl
dGVybWluYXRpb24gb2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KLSAgICAg
ICAgYXR0cmlidXRlcy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1wbGUo
KSk7Ci0gICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKLX0KLQotR0MzRGVu
dW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpO
T19FUlJPUjsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwotfQotCi1XZWJHTEV4
dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfYmxl
bmRfbWlubWF4IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBv
cnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpIHsKLSAgICAgICAgaWYgKCFtX2V4dEJsZW5kTWlu
TWF4KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIpOwotICAgICAgICAgICAgbV9leHRCbGVuZE1pbk1h
eCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7Ci0gICAgICAgIGlmICgh
bV9leHRzUkdCKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsKLSAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0ZDo6
bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1f
ZXh0c1JHQi5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJF
WFRfZnJhZ19kZXB0aCIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgewotICAgICAgICBpZiAoIW1fZXh0RnJhZ0Rl
cHRoKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKLSAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRoID0g
c3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKLSAgICAgICAgJiYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRl
cl90ZXh0dXJlX2xvZCIpKSkgewotICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxPRCkg
ewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICAgICAgICAgIG1fZXh0U2hhZGVyVGV4
dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsKLSAg
ICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgewotICAg
ICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0gICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPih0
aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgewotICAgICAg
ICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgewotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyIpOwotICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjptYWtl
X3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOwotICAgIH0KLSAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKLSAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9h
dCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1RleHR1cmVGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2Vz
VGV4dHVyZUZsb2F0LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpIHsK
LSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zs
b2F0X2xpbmVhciIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOwotICAgIH0KLSAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQotICAg
ICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdCkg
ewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhh
bGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsKLSAg
ICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBw
b3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgewotICAgICAgICBpZiAo
IW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRf
bGluZWFyIik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7Ci0gICAg
fQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKLSAgICAgICAgaWYgKCFtX29lc1ZlcnRleEFy
cmF5T2JqZWN0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKLSAgICAgICAgICAgIG1f
b2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5T2Jq
ZWN0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJheU9i
amVjdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNf
ZWxlbWVudF9pbmRleF91aW50IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKLSAgICAgICAgaWYg
KCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7Ci0g
ICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU0Vs
ZW1lbnRJbmRleFVpbnQ+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc0Vs
ZW1lbnRJbmRleFVpbnQuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsTG9zZUNv
bnRleHQpCi0gICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VDb250
ZXh0LmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJL
SVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQotICAgICAgICAmJiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX3dlYmds
Q29tcHJlc3NlZFRleHR1cmVBVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1
cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRoaXMp
OwotICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOwotICAg
IH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJl
c3NlZF90ZXh0dXJlX3B2cnRjIikpCi0gICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9
IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsKLSAg
ICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOwotICAgIH0K
LSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVy
ZV9zM3RjIikKLSAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRl
ZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMpCi0g
ICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3VuaXF1
ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7Ci0gICAgICAgIHJldHVybiBtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQotICAgICAgICAmJiBXZWJHTERl
cHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7Ci0gICAgICAgIGlm
ICghbV93ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsKLSAg
ICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVw
dGhUZXh0dXJlPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV93ZWJnbERlcHRo
VGV4dHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKLSAgICAgICAg
aWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7Ci0gICAgICAg
ICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1ZmZl
cnM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZlcnMu
Z2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykp
IHsKLSAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFu
Y2VkX2FycmF5cyIpOwotICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0ZDo6
bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOwotICAgIH0KLSAgICBpZiAo
YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7Ci0gICAgICAgICAgICBp
ZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAgICAgICAgICAgICBtX3dlYmdsRGVi
dWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlckluZm8+
KHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5nZXQo
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdM
X2RlYnVnX3NoYWRlcnMiKQotICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgewotICAg
ICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQotICAgICAgICAgICAgICAgIG1fd2Vi
Z2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0aGlz
KTsKLSAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotCi0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgV2ViR0xTaGFyZWRP
YmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2JqZWN0
KGF0dGFjaG1lbnQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkKLSAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOwot
ICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0gaW4gdGhpcyBj
YXNlLCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgICAgIC8vIHNwZWNpZmllcyBJTlZBTElEX09QRVJB
VElPTi4KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBvYmplY3QtPmlzUmVuZGVyYnVmZmVy
KCkpOwotICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7Ci0gICAgICAgIHN3aXRjaCAocG5h
bWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4ocmVpbnRlcnByZXRfY2FzdDxXZWJH
TFRleHR1cmUqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6
Ci0gICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9S
X0VOQ09ESU5HX0VYVDogewotICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdl
dCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZv
ciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUik7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogewotICAgICAgICAgICAg
V2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xS
ZW5kZXJidWZmZXIqPihvYmplY3QpOwotICAgICAgICAgICAgR0MzRGVudW0gcmVuZGVyQnVmZmVy
Rm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotICAgICAgICAgICAg
QVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUICYmIHJl
bmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKTsKLSAgICAg
ICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBI
QThfRVhUKQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRXh0ZW5zaW9uczNE
OjpTUkdCX0VYVCk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29u
dGV4dDNEOjpMSU5FQVIpOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUg
Zm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY29uc3QgaW50IGlu
dFplcm8gPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBQ1RJVkVfVEVYVFVSRToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0U6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5H
RToKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoKLSAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkQ6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICAgICAgcmV0dXJu
IGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9S
R0I6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0gICAgICAgIHJl
dHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NS
Q19BTFBIQToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgotICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkJMVUVfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAg
IHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xl
YW5BcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09N
UFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oVWlu
dDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1fY29t
cHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNVTExfRkFDRToKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50UHJvZ3JhbSkpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oaW50WmVybyk7Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAgICBy
ZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0ZVTkM6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAgICAg
IHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1B
U0s6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZ
X0JVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8
V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCkpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5H
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZl
cj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVF9GQUNFOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgotICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Ci0gICAg
ICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9DVUJFX01BUF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JN
X1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6Ci0g
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRU
UklCUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JU
X0RJTVM6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgot
ICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8KLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UEFDS19BTElHTk1FTlQ6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RP
UjoKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgotICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9M
WUdPTl9PRkZTRVRfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6Ci0gICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQ
dHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KFN0cmluZygiV2ViS2l0IFdlYkdMIikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRV9CVUZGRVJTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAgICAg
ICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6Ci0g
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfQk9YOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
OgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3Ry
aW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIikiKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19Q
QVNTX0RFUFRIX1BBU1M6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9CQUNLX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6Ci0g
ICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVuY2ls
KQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9DTEVBUl9WQUxVRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1Nf
REVQVEhfRkFJTDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNU
OgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgotICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfV1JJVEVNQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6Ci0g
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJl
VW5pdF0udGV4dHVyZTJEQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQklORElOR19DVUJFX01BUDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNz
UmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0u
dGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVDoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhTdHJpbmcoIldlYktpdCIpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9O
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRleHQt
PmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRB
cnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NI
QURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAg
ICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKLSAgICAgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJ
VkFUSVZFX0hJTlRfT0VTKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5N
QVNLRURfUkVOREVSRVJfV0VCR0w6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlcklu
Zm8pCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5n
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQi
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgotICAgICAgICBpZiAobV93ZWJnbERl
YnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRl
eHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKSk7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBu
b3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9hcnJh
eV9vYmplY3QKLSAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKLSAgICAgICAg
ICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxlZCIp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljCi0gICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykKLSAg
ICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1B
WF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFi
bGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBCRUdJ
TgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpOwotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZl
cnMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIHBu
YW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAgICAgJiYgcG5h
bWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhU
ICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZykKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRE
cmF3QnVmZmVyKHBuYW1lKTsKLSAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZl
cgotICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQ
cm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbVBh
cmFtZXRlciIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAg
ICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhwcm9ncmFtLT5pc0RlbGV0ZWQoKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkFM
SURBVEVfU1RBVFVTOgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclpl
cm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TElOS19TVEFUVVM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0TGlu
a1N0YXR1cygpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJT
OgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSks
IHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0
Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUs
ICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotU3RyaW5nIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBp
ZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCi0g
ICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdl
dFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSkpOwotfQotCi1XZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52
YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAg
ICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVy
YnVmZmVyIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0K
LSAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCi0gICAgICAgICYmICFtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmctPmlzVmFsaWQoKSkgewotICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKCkpOwotICAgICAgICBpbnQgdmFsdWUgPSAwOwotICAgICAgICBzd2l0Y2ggKHBuYW1l
KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoK
LSAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9IRUlHSFQ6Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9
IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDI0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9TVEVOQ0lMX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDg7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFM
X0ZPUk1BVDoKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIH0KLQotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwot
ICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVJfV0lEVEg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hF
SUdIVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgotICAgICAgICBtX2Nv
bnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsK
LSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0K
LQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVy
KFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRlcikp
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsK
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRF
X1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRlZCgp
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKLSAgICAgICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUp
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKLSAgICAgICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2
YWx1ZSkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQot
fQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdM
U2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xvZyIs
IHNoYWRlcikpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbCht
X2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKLX0KLQot
UGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVu
dW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpWRVJURVhfU0hBREVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUjoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNRURJVU1fSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5U
OgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9y
bWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKLSAgICBHQzNEaW50IHBy
ZWNpc2lvbiA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hh
ZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIHJldHVybiBX
ZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwgcHJl
Y2lzaW9uKTsKLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291
cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVy
U291cmNlIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1cmVO
b3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQotewotICAgIFZlY3RvcjxT
dHJpbmc+IHJlc3VsdDsKLQotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIkVYVF9ibGVuZF9taW5tYXgiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRf
c1JHQiIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X0VYVF9mcmFnX2RlcHRoIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9mcmFnX2RlcHRo
Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VT
X3RleHR1cmVfZmxvYXQiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfZmxv
YXQiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9P
RVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3Rl
eHR1cmVfZmxvYXRfbGluZWFyIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIi
KSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIi
KTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKQotICAgICAg
ICByZXN1bHQuYXBwZW5kKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7Ci0gICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9FWFRfdGV4dHVyZV9m
aWx0ZXJfYW5pc290cm9waWMiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOwotICAgIHJlc3Vs
dC5hcHBlbmQoIldFQkdMX2xvc2VfY29udGV4dCIpOwotICAgIGlmIChXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJ
VF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIik7Ci0gICAgaWYgKFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJX
RUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7Ci0gICAgaWYgKFdlYkdMQ29t
cHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7Ci0gICAgaWYgKFdlYkdMRGVwdGhU
ZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTsKLSAgICBpZiAoc3VwcG9ydHNEcmF3QnVmZmVy
cygpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTsKLSAgICBp
ZiAoQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwotCi0gICAgaWYgKGFsbG93UHJpdmls
ZWdlZEV4dGVuc2lvbnMoKSkgewotICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKLSAgICAgICAgcmVz
dWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOwotICAgIH0KLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBXZWJHTFRl
eHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdldFRleFBhcmFtZXRlciIsIHRh
cmdldCwgZmFsc2UpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1Q6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFY
X0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKLSAgICAg
ICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUp
KTsKLSAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOwotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2Vi
R0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwotICAgIGlmICghdW5pZm9ybUxvY2F0aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJv
Z3JhbSgpICE9IHByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybSIsICJubyB1bmlmb3JtbG9j
YXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwotICAgIH0KLSAgICBHQzNEaW50IGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0
aW9uLT5sb2NhdGlvbigpOwotCi0gICAgR0MzRGVudW0gYmFzZVR5cGU7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoOwotICAgIHN3aXRjaCAodW5pZm9ybUxvY2F0aW9uLT50eXBlKCkpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMzoKLSAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUM0OgotICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSA0
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6Ci0gICAg
ICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKLSAgICAgICAgbGVuZ3RoID0g
MTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UX1ZFQzI6
Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKLSAgICAgICAgbGVu
Z3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
X1ZFQzM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKLSAgICAg
ICAgbGVuZ3RoID0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SU5UX1ZFQzQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsK
LSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVF9WRUMyOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDM7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzQ6Ci0gICAgICAgIGJh
c2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSA0Owot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQyOgot
ICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVu
Z3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVRfTUFUMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0g
ICAgICAgIGxlbmd0aCA9IDk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUX01BVDQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAxNjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTQU1QTEVSX0NVQkU6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklO
VDsKLSAgICAgICAgbGVuZ3RoID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgLy8gQ2FuJ3QgaGFuZGxlIHRoaXMgdHlwZQotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5oYW5k
bGVkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICBz
d2l0Y2ggKGJhc2VUeXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IHsK
LSAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzE2XSA9IHswfTsKLSAgICAgICAgaWYgKG1faXNSb2J1
c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmdldG5Vbmlmb3JtZnZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgMTYg
KiBzaXplb2YoR0MzRGZsb2F0KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldFVuaWZvcm1mdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2
YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8odmFsdWVbMF0pOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJB
cnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6SU5UOiB7Ci0gICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07Ci0gICAgICAg
IGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFtKSwg
bG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBs
b2NhdGlvbiwgdmFsdWUpOwotICAgICAgICBpZiAobGVuZ3RoID09IDEpCi0gICAgICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotICAgIH0KLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCT09MOiB7Ci0gICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07
Ci0gICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwotICAgICAgICBpZiAobGVuZ3RoID4gMSkgewotICAg
ICAgICAgICAgYm9vbCBib29sVmFsdWVbMTZdID0gezB9OwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKQotICAgICAgICAgICAgICAgIGJvb2xWYWx1ZVtq
XSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2pdKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oYm9vbFZhbHVlLCBsZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbMF0pKTsKLSAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBn
ZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRlbHkgY29tcGxl
eCBsb2dpYyBhYm92ZQotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7Ci0gICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRVbmlm
b3JtTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCF2
YWxpZGF0ZVN0cmluZygiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29u
dGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7Ci0g
ICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBHQzNEaW50IGFjdGl2ZVVuaWZvcm1zID0gMDsKLSAgICBtX2NvbnRleHQtPmdldE5vbkJ1
aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7Ci0gICAgZm9yIChHQzNE
aW50IGkgPSAwOyBpIDwgYWN0aXZlVW5pZm9ybXM7IGkrKykgewotICAgICAgICBBY3RpdmVJbmZv
IGluZm87Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgaSwgaW5mbykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgLy8gU3RyaXAgIlswXSIgZnJvbSB0aGUgbmFtZSBpZiBpdCdzIGFuIGFycmF5LgotICAg
ICAgICBpZiAoaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKLSAgICAgICAgICAgIGluZm8ubmFt
ZSA9IGluZm8ubmFtZS5sZWZ0KGluZm8ubmFtZS5sZW5ndGgoKSAtIDMpOwotICAgICAgICAvLyBJ
ZiBpdCdzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGVsZW1lbnQs
IGFwcGVuZGluZyAiW2luZGV4XSIgdG8gdGhlIG5hbWUuCi0gICAgICAgIGZvciAoR0MzRGludCBp
bmRleCA9IDA7IGluZGV4IDwgaW5mby5zaXplOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBTdHJp
bmcgdW5pZm9ybU5hbWUgPSBpbmZvLm5hbWUgKyAiWyIgKyBTdHJpbmc6Om51bWJlcihpbmRleCkg
KyAiXSI7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lID09IHVuaWZvcm1OYW1lIHx8IG5hbWUgPT0g
aW5mby5uYW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6
Y3JlYXRlKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbiwgaW5mby50eXBlKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLQotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLQotICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRWZXJ0
ZXhBdHRyaWIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKLSAgICB9Ci0KLSAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpW
ZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZl
cnRleEF0dHJpYlN0YXRlKGluZGV4KTsKLQotICAgIGlmIChtX2FuZ2xlSW5zdGFuY2VkQXJyYXlz
ICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0RJVklT
T1JfQU5HTEUpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuZGl2aXNvcik7Ci0K
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgaWYgKCghaXNHTEVTMkNvbXBs
aWFudCgpICYmICFpbmRleCAmJiBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0
dHJpYlN0YXRlKDApLmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKQotICAg
ICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmcKLSAgICAgICAgICAgIHx8ICFzdGF0ZS5i
dWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihz
dGF0ZS5idWZmZXJCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRl
LmVuYWJsZWQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5ub3JtYWxp
emVkKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NJ
WkU6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuc2l6ZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGUub3JpZ2luYWxTdHJpZGUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0ZS50eXBlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVVJS
RU5UX1ZFUlRFWF9BVFRSSUI6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQzMkFy
cmF5OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF0udmFsdWUsIDQpKTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmliIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotbG9uZyBsb25nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9jb250ZXh0LT5n
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihyZXN1bHQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJvb2wgaXNWYWxpZCA9IGZh
bHNlOwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
R0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0gICAgICAgIGlzVmFsaWQgPSB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVf
SElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcwotICAgICAgICBpZiAobV9vZXNT
dGFuZGFyZERlcml2YXRpdmVzKQotICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxpZCB0
YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmhpbnQodGFy
Z2V0LCBtb2RlKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0J1
ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghYnVmZmVyIHx8IGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWJ1ZmZlci0+
aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2Nv
bnRleHQtPmlzQnVmZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOwotfQotCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGV4
dExvc3Q7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uICYmICFtX2hh
c1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiQ29udGV4
dCBpcyBiZWluZyB1c2VkLiBBdHRlbXB0IHRvIHJlc29sdmUgdGhlIHBvbGljeS4iKTsKLSAgICAg
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCkudG9wRG9jdW1lbnQo
KTsKLSAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKTsKLSAgICAgICAgaWYgKHBh
Z2UgJiYgIWRvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAgICBwYWdlLT5t
YWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5yZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwoZG9j
dW1lbnQudXJsKCkpOwotICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5IGRvIGFu
eXRoaW5nIHdpdGggdGhlIHJlc3VsdCBmcm9tIHJlc29sdXRpb24uIEEgbW9yZQotICAgICAgICAv
LyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCB0cnkgdG8gY29uc3RydWN0IGEgcmVhbCBj
b250ZXh0LCBldGMgYW5kIHByb2NlZWQKLSAgICAgICAgLy8gd2l0aCBub3JtYWwgb3BlcmF0aW9u
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5
MTIyCi0gICAgICAgIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZChH
QzNEZW51bSBjYXApCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVDYXBhYmlsaXR5KCJpc0VuYWJsZWQiLCBjYXApKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpCi0gICAgICAgIHJl
dHVybiBtX3N0ZW5jaWxFbmFibGVkOwotICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxlZChj
YXApOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZm
ZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFmcmFtZWJ1ZmZl
ciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
aWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzRnJhbWVidWZmZXIoZnJhbWVidWZmZXItPm9iamVj
dCgpKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4
dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVy
YnVmZmVyKQotewotICAgIGlmICghcmVuZGVyYnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIXJlbmRlcmJ1ZmZlci0+aGFzRXZl
ckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRleHQt
PmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVh
biBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCi17
Ci0gICAgaWYgKCFzaGFkZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlci0+b2JqZWN0
KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVyZShX
ZWJHTFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIXRleHR1cmUtPmhh
c0V2ZXJCZWVuQm91bmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250
ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5saW5l
V2lkdGgod2lkdGgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImxpbmtQcm9ncmFtIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBXZWJHTFNoYWRlciogdmVy
dGV4U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVIpOwotICAgICAgICBXZWJHTFNoYWRlciogZnJhZ21lbnRTaGFkZXIgPSBw
cm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hB
REVSKTsKLSAgICAgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNWYWxp
ZCgpIHx8ICFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzVmFsaWQoKSB8fCAh
bV9jb250ZXh0LT5wcmVjaXNpb25zTWF0Y2gob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciksIG9i
amVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpIHx8ICFtX2NvbnRleHQtPmNoZWNrVmFyeWluZ3NQ
YWNraW5nKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclplcm8oZnJhZ21lbnRT
aGFkZXIpKSkgewotICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPmxp
bmtQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7Ci0gICAgcHJvZ3JhbS0+aW5jcmVhc2VM
aW5rQ291bnQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVsU3RvcmVp
KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAgICAgbV91
bnBhY2tGbGlwWSA9IHBhcmFtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAg
ICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJHTCB8
fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKLSAgICAgICAgICAgIG1fdW5wYWNr
Q29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFyYW0pOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9y
IFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpQQUNLX0FMSUdOTUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5UOgotICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAyIHx8IHBhcmFtID09
IDQgfHwgcGFyYW0gPT0gOCkgewotICAgICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKLSAgICAgICAgICAgICAgICBtX3BhY2tBbGlnbm1lbnQg
PSBwYXJhbTsKLSAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQ6Ci0gICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQgPSBwYXJhbTsKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIGFs
aWdubWVudCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKLXsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jb250ZXh0LT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gRHVlIHRv
IFdlYkdMJ3Mgc2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9zc2libGUgdG8K
LSAgICAvLyB0YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCi0gICAgQVNTRVJU
KGNhbnZhcygpLT5vcmlnaW5DbGVhbigpKTsKLSAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJhbWV0
ZXJzLgotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVscyIsICJubyBkZXN0aW5hdGlv
biBBcnJheUJ1ZmZlclZpZXciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzd2l0Y2gg
KGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlk
IGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIs
ICJmb3JtYXQgbm90IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhlbCB0
eXBlLgotICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZl
ciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNh
ZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsIHJlYXNv
bik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNpemUs
IHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCi0gICAgdW5zaWdu
ZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHBhZGRpbmcg
PSAwOwotICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsKLSAgICAgICAgR0Mz
RGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwg
dHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVk
LCAmcGFkZGluZyk7Ci0gICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1IpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAicmVhZFBpeGVs
cyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBsYXJnZSBl
bm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgdm9pZCogZGF0YSA9IHBpeGVs
cy0+YmFzZUFkZHJlc3MoKTsKLQotICAgIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJp
bmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5n
ZXQoKSk7Ci0gICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZWFkblBpeGVsc0VYVCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBkYXRhKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci0gICAgfQotCi0jaWYgT1MoREFSV0lOKQot
ICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgLy8gd2UgaGF2ZW4ndCBjb21wdXRl
ZCBwYWRkaW5nCi0gICAgICAgIG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9y
bWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVx
dWlyZWQsICZwYWRkaW5nKTsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVu
IEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xFUyBkcml2ZXIgYnVnCi0gICAgLy8gb24g
UUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNob3VsZAot
ICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgotICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkg
ewotICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGNoYXIqPihkYXRhKTsKLSAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXkgPSAwOyBpeSA8IGhl
aWdodDsgKytpeSkgewotICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXggPSAwOyBpeCA8IHdp
ZHRoOyArK2l4KSB7Ci0gICAgICAgICAgICAgICAgcGl4ZWxzWzNdID0gMjU1OwotICAgICAgICAg
ICAgICAgIHBpeGVscyArPSA0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGl4ZWxzICs9
IHBhZGRpbmc7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+cmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5k
ZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwg
ImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVyYnVm
ZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNo
IChpbnRlcm5hbGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NP
TVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4OgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUOgotICAgICAgICBpZiAoaW50ZXJu
YWxmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUICYmICFtX2V4dHNSR0Ip
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQi
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2NvbnRleHQtPnJl
bmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQodHJ1
ZSk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RF
TkNJTDoKLSAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMzRDo6
REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9y
ZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7
Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVy
U3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKCJzY2lz
c29yIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnNj
aXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJp
bmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgic2hhZGVy
U291cmNlIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFN0cmluZyBzdHJpbmdXaXRo
b3V0Q29tbWVudHMgPSBTdHJpcENvbW1lbnRzKHN0cmluZykucmVzdWx0KCk7Ci0gICAgaWYgKCF2
YWxpZGF0ZVN0cmluZygic2hhZGVyU291cmNlIiwgc3RyaW5nV2l0aG91dENvbW1lbnRzKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHNoYWRlci0+c2V0U291cmNlKHN0cmluZyk7Ci0gICAgbV9jb250
ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZ1dpdGhvdXRDb21t
ZW50cyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuYyhHQzNE
ZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVN0
ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9z
dGVuY2lsRnVuY1JlZiA9IHJlZjsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAg
ICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0g
bWFzazsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVt
IGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIHN3aXRjaCAoZmFjZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZST05UX0FORF9CQUNLOgotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAg
ICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01h
c2sgPSBtYXNrOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKLSAgICAgICAgbV9z
dGVuY2lsRnVuY1JlZiA9IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgotICAgICAg
ICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tC
YWNrID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxGdW5j
U2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNr
KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKLSAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7
Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQg
bWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJP
TlRfQU5EX0JBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgICAgICBtX3N0
ZW5jaWxNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZST05UOgotICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKLSAgICAgICAgbV9zdGVu
Y2lsTWFza0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAic3Rl
bmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0Mz
RGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWls
LCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNp
bE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWws
IEdDM0RlbnVtIHpwYXNzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZh
aWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFu
eSBlcnJvcnMgcmV0dXJuZWQuCi0gICAgZWMgPSAwOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0g
dmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAg
QVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJ
bWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUpKTsKLSAgICBBU1NFUlQodGV4KTsKLSAgICBBU1NFUlQoIWxldmVs
IHx8ICFXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgaWYgKCFwaXhl
bHMpIHsKLSAgICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVtZW50YXRpb24g
Y2xlYXJzIHRleHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9yZSB0cnVlLgot
ICAgICAgICAvLyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFyZSB1c2luZyBB
TkdMRV9kZXB0aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcwotICAgICAgICAvLyBjYW4g
bm90IGJlIGNsZWFyZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJlIGNsZWFyZWQgYnkgYmlu
ZGluZyB0byBhbiBmYm8gYW5kIGNhbGxpbmcKLSAgICAgICAgLy8gY2xlYXIuCi0gICAgICAgIGlm
IChpc1Jlc291cmNlU2FmZSgpKQotICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYm9vbCBzdWNj
ZWVkID0gbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBt
X3VucGFja0FsaWdubWVudCk7Ci0gICAgICAgICAgICBpZiAoIXN1Y2NlZWQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHZh
bGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpOwot
ICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAg
ICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGZ1
bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0aGUg
ZGF0YSBmb3IgdGhpcyBsZXZlbC4KLSAgICAgICAgICAgIHRleC0+bWFya0ludmFsaWQodGFyZ2V0
LCBsZXZlbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdGV4
LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIHR5cGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRElt
cGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAg
ICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRy
YWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwg
bV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7
Ci0gICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJ
bWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0
cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwotICAgIGNvbnN0IHZv
aWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKLQot
ICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYg
IWZsaXBZKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAg
ICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEs
IGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlRXh0
cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVk
Q29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKLSAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25U
eXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCkKLXsKLSAgICBp
ZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBmdW5jdGlvblR5cGUs
IHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkdMVGV4dHVyZSog
dGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIHRy
dWUpOwotICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGZ1bmN0aW9uVHlwZSA9PSBOb3RUZXhTdWJJbWFnZTJEKSB7Ci0gICAgICAgIGlmIChsZXZlbCAm
JiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIGZ1
bmN0aW9uIHZhbGlkYXRlVGV4RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhlciB0byB2YWxp
ZGF0ZSB0aGUgU2V0dGFibGVUZXhGb3JtYXQKLSAgICAgICAgLy8gYnkgY2hlY2tpbmcgaWYgdGhl
IEFycmF5QnVmZmVyVmlldyBpcyBudWxsIG9yIG5vdC4KLSAgICAgICAgaWYgKHNvdXJjZVR5cGUg
IT0gU291cmNlQXJyYXlCdWZmZXJWaWV3KSB7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlU2V0
dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghdmFsaWRh
dGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9uTmFtZSwgeG9m
ZnNldCwgeW9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIEJl
Zm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93IGhh
cHBlbnMgZmlyc3QuCi0gICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZzZXQg
KyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVuc2lvbnMiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeG9mZnNl
dCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCAr
IGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRleHR1cmUtPmdldEludGVybmFsRm9y
bWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwg
bGV2ZWwpICE9IHR5cGUpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQgZm9y
bWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1
bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzLCBOdWxsQWxsb3dlZCkKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1h
Z2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBwaXhl
bHMtPmJhc2VBZGRyZXNzKCkgOiAwOwotICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKLSAg
ICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOwotICAgIGlmIChkYXRhICYmICht
X3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKLSAgICAgICAgaWYg
KCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tB
bGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91
bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVtcERhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOwotICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQg
PSB0cnVlOwotICAgIH0KLSAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwg
ZGF0YSwgZWMpOwotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1f
dW5wYWNrQWxpZ25tZW50KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFw
aXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQs
IFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+
d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGJvb2wgbmVlZENvbnZl
cnNpb24gPSB0cnVlOwotICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBv
ZiBmb3JtYXQgUkdCQTguCi0gICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGlu
YXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlw
IG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAoIW1fdW5wYWNr
RmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAgICAg
aWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1f
dW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
cGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7Ci0g
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25t
ZW50KTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3
SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQg
ZGV2aWNlU2NhbGVGYWN0b3IpCi17Ci0gICAgSW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQpOwot
ICAgIHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgIEltYWdlQnVmZmVyKiBidWYg
PSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7Ci0gICAgaWYgKCFidWYp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9N
RU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFn
ZS0+c2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKTsK
LSAgICBidWYtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVm
ZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdlMkQiLCBpbWFn
ZSwgZWMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVu
ZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRl
cmVyKCkpOwotICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQotICAgICAgICBp
bWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCks
IGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOwotCi0gICAgaWYgKCFpbWFnZUZv
clJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2Uy
RCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZv
cm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRleEltYWdlMkRJbXBs
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVu
ZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleEltYWdl
MkQiLCBjYW52YXMsIGVjKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4
U3ViSW1hZ2UyRCwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwg
dHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVyZSogdGV4dHVy
ZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwot
ICAgIC8vIElmIHBvc3NpYmxlLCBjb3B5IGZyb20gdGhlIGNhbnZhcyBlbGVtZW50IGRpcmVjdGx5
IHRvIHRoZSB0ZXh0dXJlCi0gICAgLy8gdmlhIHRoZSBHUFUsIHdpdGhvdXQgYSByZWFkLWJhY2sg
dG8gc3lzdGVtIG1lbW9yeS4KLSAgICAvLwotICAgIC8vIEZJWE1FOiByZXN0cmljdGlvbiBvZiAo
UkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZVEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCi0gICAgLy8g
SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZ1
bGx5IGZ1bmN0aW9uYWwuCi0gICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEID09
IHRhcmdldCAmJiB0ZXh0dXJlICYmIHR5cGUgPT0gdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxl
dmVsKQotICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9y
bWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52
YXMtPmJ1ZmZlcigpOwotICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZv
cm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZv
cm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewotICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5cGUpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gY2FudmFzLT5nZXRJbWFnZURhdGEoKTsKLSAgICBpZiAoaW1hZ2VEYXRhKQotICAgICAg
ICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGltYWdlRGF0YS5nZXQoKSwgZWMpOwotICAgIGVsc2UKLSAgICAgICAgdGV4SW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3Bp
ZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8p
Ci1QYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVUb0lt
YWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdTdG9y
ZUNvcHksIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIEludFNpemUgc2l6ZSh2aWRlby0+dmlkZW9X
aWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1f
Z2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKLSAgICBpZiAoIWJ1Zikgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9S
WSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOwotICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUgdGV4dHVy
ZSBjb3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgotICAgIHZpZGVvLT5wYWludEN1cnJlbnRG
cmFtZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOwotICAgIHJldHVybiBidWYt
PmNvcHlJbWFnZShiYWNraW5nU3RvcmVDb3B5KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8s
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleEltYWdlMkQiLCB2
aWRlbywgZWMpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RU
ZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdvIHRocm91
Z2ggdGhlIGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3aXRob3V0IGEg
cmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KLSAgICAvLyBPdGhlcndpc2Us
IGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgU1cgcGF0aC4KLSAgICAvLyBGSVhNRTog
VGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3JtYXQgc2hvdWQgYmUgUkdC
IG9yIFJHQkEsCi0gICAgLy8gdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBhbmQgbGV2ZWwg
c2hvdWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KLSAgICBXZWJHTFRl
eHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFy
Z2V0LCB0cnVlKTsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFy
Z2V0ICYmIHRleHR1cmUKLSAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKLSAgICAgICAgJiYgdHlw
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAmJiAodGV4dHVy
ZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgJiYgIWxl
dmVsKSB7Ci0gICAgICAgIGlmICh2aWRlby0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKG1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGxldmVsLCB0eXBlLCBpbnRl
cm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewot
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgdHlwZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3JtYWwg
cHVyZSBTVyBwYXRoLgotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFt
ZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2
YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKLSAg
ICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKLSAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBhcmFt
ZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJFUEVBVCkKLSAgICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQp
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMKLSAgICAgICAgaWYgKCFtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKGlzRmxvYXQpIHsKLSAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJmKHBuYW1lLCBwYXJhbWYp
OwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW1m
KTsKLSAgICB9IGVsc2UgewotICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFt
aSk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJh
bWkpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRl
cmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKQotewot
ICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBwYXJhbSwgMCwgdHJ1ZSk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgdGV4UGFyYW1ldGVyKHRhcmdl
dCwgcG5hbWUsIDAsIHBhcmFtLCBmYWxzZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25v
cmUgYW55IGVycm9ycyByZXR1cm5lZAotICAgIGVjID0gMDsKLSAgICBBU1NFUlQoIWlzQ29udGV4
dExvc3QoKSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleFN1Yklt
YWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIDAsIGZvcm1hdCwgdHlwZSkpOwotICAgIEFTU0VSVCh2YWxpZGF0ZVNpemUoInRleFN1Yklt
YWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFibGVU
ZXhGb3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQpKTsKLSAgICBXZWJHTFRleHR1cmUqIHRl
eCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUp
OwotICAgIGlmICghdGV4KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVCgoeG9mZnNldCArIHdpZHRoKSA+PSAwKTsKLSAg
ICBBU1NFUlQoKHlvZmZzZXQgKyBoZWlnaHQpID49IDApOwotICAgIEFTU0VSVCh0ZXgtPmdldFdp
ZHRoKHRhcmdldCwgbGV2ZWwpID49ICh4b2Zmc2V0ICsgd2lkdGgpKTsKLSAgICBBU1NFUlQodGV4
LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkgPj0gKHlvZmZzZXQgKyBoZWlnaHQpKTsKLSAgICBB
U1NFUlQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSA9PSBmb3JtYXQpOwot
ICAgIEFTU0VSVCh0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gdHlwZSk7Ci0gICAgbV9j
b250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1s
RG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9y
KGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNv
bnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOyAgCi0gICAgaWYgKCFpbWFnZUV4
dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBp
bWFnZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZv
cm1hdCgpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4
dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKLSAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9
IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7Ci0KLSAgICBib29sIG5lZWRDb252ZXJz
aW9uID0gdHJ1ZTsKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKLSAgICAgICAgbmVl
ZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQt
PnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZ
LCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCks
IGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNl
VW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGlt
YWdlIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJ
bWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lkdGgo
KSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsICBuZWVkQ29udmVyc2lvbiA/IGRhdGEu
ZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQg
IT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVU
ZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHBpeGVscywgTnVsbE5vdEFsbG93ZWQpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1
bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcs
IHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCB4
b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZvaWQqIGRhdGEgPSBwaXhl
bHMtPmJhc2VBZGRyZXNzKCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOwotICAgIGJv
b2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0gICAgaWYgKGRhdGEgJiYgKG1fdW5w
YWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgewotICAgICAgICBpZiAoIW1f
Y29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdu
bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRh
dGEgPSB0ZW1wRGF0YS5kYXRhKCk7Ci0gICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9IHRy
dWU7Ci0gICAgfQotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEp
OwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOwotICAgIGlmIChjaGFuZ2VV
bnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVj
ID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwgIXZh
bGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUltYWdl
RGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhl
aWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBib29sIG5lZWRDb252ZXJzaW9u
ID0gdHJ1ZTsKLSAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2YgZm9y
bWF0IFJHQkE4LgotICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9u
IGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQ
cmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgaWYgKGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpCi0g
ICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICgh
bV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1
YkltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9j
b250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwg
MSk7Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7Ci0g
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25t
ZW50KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFnZSwg
ZWMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVy
ID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVy
KCkpOwotICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQotICAgICAgICBpbWFn
ZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIGlt
YWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOwotCi0gICAgaWYgKCFpbWFnZUZvclJl
bmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwg
U291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBpbWFnZUZvclJl
bmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUs
IHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0ZXhTdWJJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdl
Rm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMg
PSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENh
bnZhc0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCBjYW52YXMsIGVjKQotICAgICAgICB8fCAhdmFs
aWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTENh
bnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52
YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdl
dEltYWdlRGF0YSgpOwotICAgIGlmIChpbWFnZURhdGEpCi0gICAgICAgIHRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEu
Z2V0KCksIGVjKTsKLSAgICBlbHNlCi0gICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFn
ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
SFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAgICAgICAgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhU
TUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgo
KSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0Zy
YW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsK
LSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgdGV4U3ViSW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9n
cmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgInVuaWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJv
Z3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3Jt
MWYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZs
b2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxl
bmd0aCgpLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCBzaXplLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlm
b3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICgobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNE
OjpTQU1QTEVSX0NVQkUpICYmIHggPj0gKGludCltX3RleHR1cmVVbml0cy5zaXplKCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJ1bmlmb3JtMWkiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2Nh
dGlvbiwgdiwgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+dHlwZSgp
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHYtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh2LT5kYXRhKClb
aV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7Ci0gICAgICAg
ICAgICAgICAgTE9HKFdlYkdMLCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4gTG9j
YXRpb24gdHlwZSA9ICUwNFguIiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRhKClb
aV0sIGxvY2F0aW9uLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlk
IHRleHR1cmUgdW5pdCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpTQU1QTEVSX0NVQkUpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7ICsraSkgewotICAgICAgICAgICAgaWYgKCgoR0Mz
RGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7
Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0yZiIs
ICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgs
IHkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2Iiwg
bG9jYXRpb24sIHYsIDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZv
cm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZv
cm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
Y29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJp
IiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24oKSwg
eCwgeSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMml2Iiwg
bG9jYXRpb24sIHYsIDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZv
cm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3Jt
Mml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0
IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgMykpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3Ro
KCkgLyAzLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCBzaXplIC8gMywgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJl
bnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJl
bnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51
bmlmb3JtM2kobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCBzaXpl
LCAzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlm
b3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygi
dW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQs
IHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNp
emUgLyA0LCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aShj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZvciBj
dXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4
dC0+dW5pZm9ybTRpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwgNCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwg
diwgc2l6ZSwgNCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRp
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVu
aWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgdi0+bGVuZ3RoKCkgLyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2
LCBzaXplLCA0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHRyYW5zcG9zZSwgdik7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMy
QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDkp
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gOSwgdHJhbnNw
b3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24sIHRy
YW5zcG9zZSwgdiwgMTYpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDE2LCB0cmFuc3Bv
c2UsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
TWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRy
aXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyAxNiwgdHJhbnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNo
ZWNrT2JqZWN0VG9CZUJvdW5kKCJ1c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRlZCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkKLSAgICAgICAgcHJvZ3JhbSA9IDA7Ci0gICAg
aWYgKHByb2dyYW0gJiYgIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1c2VQ
cm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKG1fY3VycmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgewotICAgICAgICBpZiAobV9jdXJy
ZW50UHJvZ3JhbSkKLSAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoZ3Jh
cGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwot
ICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAg
ICAgICAgaWYgKHByb2dyYW0pCi0gICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFjaGVkKCk7Ci0g
ICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFtKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJ2YWxpZGF0ZVByb2dyYW0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHYwKQotewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRy
aWIxZiIsIGluZGV4LCAxLCB2MCwgMC4wZiwgMC4wZiwgMS4wZik7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJB
cnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGlu
ZGV4LCB2LCAxKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAg
ICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCBzaXplLCAx
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKLXsKLSAgICB2ZXJ0ZXhBdHRy
aWJmSW1wbCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAsIHYxLCAwLjBmLCAxLjBmKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVy
dGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2Iiwg
aW5kZXgsIHYsIHNpemUsIDIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBH
QzNEZmxvYXQgdjIpCi17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjNmIiwg
aW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCi17
Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgMyk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgdmVydGV4QXR0
cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgc2l6ZSwgMyk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQot
ewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZiIsIGluZGV4LCA0LCB2MCwg
djEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRy
aWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCA0KTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRl
eEF0dHJpYjRmdiIsIGluZGV4LCB2LCBzaXplLCA0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6
ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlk
ZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllU
RToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlk
IHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhW
ZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6
ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUgfHwgb2Zmc2V0IDwgMCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIHNpemUsIHN0cmlkZSBvciBvZmZzZXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1l
bnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUsIHR5
cGUgYW5kIHN0cmlkZQotICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IHNpemVJbkJ5dGVzKHR5
cGUpOwotICAgIGlmICghdHlwZVNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW52
YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKChzdHJpZGUgJSB0
eXBlU2l6ZSkgfHwgKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkgJSB0eXBlU2l6ZSkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zmc2V0IG5vdCB2
YWxpZCBmb3IgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RzaXplaSBi
eXRlc1BlckVsZW1lbnQgPSBzaXplICogdHlwZVNpemU7Ci0KLSAgICBtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVsZW1lbnQsIHNp
emUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zm
c2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBv
aW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8
R0MzRGludHB0cj4ob2Zmc2V0KSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0KSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgsIGhl
aWdodCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250ZXh0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJjb250
ZXh0IGFscmVhZHkgbG9zdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250
ZXh0R3JvdXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29u
dGV4dE1vZGUgbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKLSAgICBtX2NvbnRleHRMb3N0TW9kZSA9
IG1vZGU7Ci0KLSAgICBpZiAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpIHsKLSAgICAgICAgLy8g
SW5mb3JtIHRoZSBlbWJlZGRlciB0aGF0IGEgbG9zdCBjb250ZXh0IHdhcyByZWNlaXZlZC4gSW4g
cmVzcG9uc2UsIHRoZSBlbWJlZGRlciBtaWdodAotICAgICAgICAvLyBkZWNpZGUgdG8gdGFrZSBh
Y3Rpb24gc3VjaCBhcyBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gdG8gdXNlIFdlYkdM
IGFnYWluLgotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50KCku
ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaWRMb3NlV2Vi
R0xDb250ZXh0KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3Rh
dHVzQVJCKCkpOwotICAgIH0KLQotICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKLQot
ICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgLy8gTWFrZSBhYnNvbHV0ZWx5IHN1
cmUgd2UgZG8gbm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRlZCB0ZXh0dXJlIG9yIGZyYW1l
YnVmZmVyLgotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmcoMCk7
Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOwotICAg
IH0KLQotICAgIC8vIFRoZXJlIGlzIG5vIGRpcmVjdCB3YXkgdG8gY2xlYXIgZXJyb3JzIGZyb20g
YSBHTCBpbXBsZW1lbnRhdGlvbiBhbmQKLSAgICAvLyBsb29waW5nIHVudGlsIGdldEVycm9yKCkg
YmVjb21lcyBOT19FUlJPUiBtaWdodCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGlmCi0gICAgLy8g
dGhlIGRyaXZlciBvciBjb250ZXh0IGltcGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4gU28sIGxvb3Ag
YSByZWFzb25hYmx5Ci0gICAgLy8gbGFyZ2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFueSBl
eGlzdGluZyBlcnJvcnMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewotICAg
ICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUikKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBDb25zb2xlRGlzcGxheVByZWZl
cmVuY2UgZGlzcGxheSA9IChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgPyBEaXNwbGF5SW5Db25z
b2xlOiBEb250RGlzcGxheUluQ29uc29sZTsKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBs
b3N0IiwgZGlzcGxheSk7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyByZXN0b3JhdGlvbiB1bmxlc3Mg
dGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVuCi0gICAgLy8gZGlzcGF0Y2hlZCBh
bmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgotICAgIG1fcmVzdG9yZUFsbG93ZWQg
PSBmYWxzZTsKLQotICAgIC8vIEFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGNvbnRl
eHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50Ci0gICAgLy8gdGhlIHNwZWMgYmVoYXZpb3Igb2Yg
cXVldWVpbmcgYSB0YXNrLgotICAgIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIuc3Rh
cnRPbmVTaG90KDApOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VSZXN0
b3JlQ29udGV4dCgpCi17Ci0gICAgaWYgKCFpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCBub3QgbG9zdCIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKSB7Ci0gICAgICAgIGlmICht
X2NvbnRleHRMb3N0TW9kZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJl
c3RvcmVDb250ZXh0IiwgImNvbnRleHQgcmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXN0b3JlVGltZXIuaXNBY3RpdmUoKSkK
LSAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi1QbGF0Zm9ybUxh
eWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAg
IHJldHVybiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KSA/IG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpIDogMDsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0
KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVj
dCogb2JqZWN0KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBtX2NvbnRl
eHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0KQotewot
ICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fY29udGV4dE9iamVjdHMucmVtb3ZlKG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0
KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBtX2NvbnRleHRPYmplY3Rz
LmFkZChvYmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5k
UmVtb3ZlQWxsT2JqZWN0cygpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKG1fY29udGV4dE9iamVjdHMuc2l6ZSgp
ID4gMCkgewotICAgICAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+OjppdGVyYXRvciBp
dCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKLSAgICAgICAgKCppdCktPmRldGFjaENvbnRl
eHQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYXNQZW5kaW5n
QWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnN0b3AoKQotewotICAgIGlmICghaXNDb250ZXh0TG9zdCgpICYmICFt
X2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgZm9yY2VMb3N0Q29udGV4dChT
eW50aGV0aWNMb3N0Q29udGV4dCk7Ci0gICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgp
OwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9v
bGVhblBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEYm9vbGVhbiB2YWx1ZSA9
IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci19Ci0KLVdlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNE
ZW51bSBwbmFtZSkKLXsKLSAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X1dSSVRFTUFTSykgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKDAsIDApOwotICAgIH0KLSAgICBHQzNEYm9vbGVhbiB2YWx1ZVs0XSA9IHsw
fTsKLSAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Ci0gICAgYm9vbCBi
b29sVmFsdWVbNF07Ci0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDQ7ICsraWkpCi0gICAgICAg
IGJvb2xWYWx1ZVtpaV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtpaV0pOwotICAgIHJldHVy
biBXZWJHTEdldEluZm8oYm9vbFZhbHVlLCA0KTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAg
R0MzRGZsb2F0IHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgJnZh
bHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLX0KLQotV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW50UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQot
ewotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5h
bWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci19Ci0KLVdlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQotewotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFt
ZSkKLXsKLSAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07Ci0gICAgbV9jb250ZXh0LT5nZXRG
bG9hdHYocG5hbWUsIHZhbHVlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIHN3aXRj
aCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJ
WkVfUkFOR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRI
X1JBTkdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgotICAgICAg
ICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORF9DT0xPUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9W
QUxVRToKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0MzRGVu
dW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAg
ICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVM6Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlZJRVdQT1JUOgotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCi17Ci0gICAgYm9vbCByZXNldEFj
dGl2ZVVuaXQgPSBmYWxzZTsKLSAgICBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25GbGFn
IGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25G
bGFnPigobV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRl
bnNpb25GbG9hdExpbmVhckVuYWJsZWQgOiAwKSB8IChtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25IYWxmRmxvYXRMaW5lYXJFbmFibGVk
IDogMCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5pdHMu
c2l6ZSgpOyArK2lpKSB7Ci0gICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUy
REJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1Vz
ZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKLSAgICAgICAgICAgIHx8IChtX3RleHR1cmVVbml0
c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJl
Q3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkpIHsKLSAg
ICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7Ci0gICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKLSAgICAgICAgICAgICAgICByZXNldEFj
dGl2ZVVuaXQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNldEFjdGl2ZVVuaXQp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOwotICAgICAg
ICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgV2ViR0xUZXh0dXJlKiB0ZXgyRDsKLSAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4
Q3ViZU1hcDsKLSAgICAgICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIG1zZyhTdHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVyZSB1bml0ICIpICsg
U3RyaW5nOjpudW1iZXIoaWkpCi0gICAgICAgICAgICAgICAgICAgICsgIiBpcyBub3QgcmVuZGVy
YWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21wYXRpYmxlIHRleHR1
cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgotICAgICAgICAgICAg
ICAgICAgICArICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUgd2l0aCBsaW5lYXIg
ZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxmLWZsb2F0IGxpbmVh
ciBleHRlbnNpb24gZW5hYmxlZC4iKTsKLSAgICAgICAgICAgICAgICBwcmludEdMV2FybmluZ1Rv
Q29uc29sZShmdW5jdGlvbk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAg
ICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgdGV4Q3Vi
ZU1hcCA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmlu
ZGluZy5nZXQoKTsKLSAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90ZXh0dXJlVW5pdHNb
aWldLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lv
bnMpKQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOwotICAgICAgICAgICAgaWYg
KG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJlVW5p
dHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVu
c2lvbnMpKQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhDdWJlTWFwKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKLSAgICAgICAgbV9jb250
ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCkKLXsKLSAg
ICB1bnNpZ25lZCBjaGFyIGJsYWNrW10gPSB7MCwgMCwgMCwgMjU1fTsKLSAgICBtX2JsYWNrVGV4
dHVyZTJEID0gY3JlYXRlVGV4dHVyZSgpOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmxhY2tUZXh0dXJlMkQtPm9iamVjdCgpKTsK
LSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwKTsKLSAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSBjcmVh
dGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUCwgbV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmplY3QoKSk7Ci0g
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
MSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250
ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2sp
OwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7Ci19Ci0KLWJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJD
b21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpCi17Ci0gICAgdW5zaWduZWQgbmVlZCA9
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KHRleEludGVybmFsRm9y
bWF0KTsKLSAgICB1bnNpZ25lZCBoYXZlID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxC
aXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3JtYXQpOwotICAgIHJldHVybiAobmVlZCAmIGhhdmUp
ID09IG5lZWQ7Ci19Ci0KLUdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkKLXsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICByZXR1cm4gbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7Ci0gICAgaWYgKG1fYXR0cmli
dXRlcy5hbHBoYSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwotICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwotfQotCi1pbnQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQotewotICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCi0gICAgICAgIHJl
dHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgpOwotICAgIHJl
dHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpIDog
bV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Ci19Ci0KLWlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKQotewot
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2Jq
ZWN0KCkpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZm
ZXJIZWlnaHQoKTsKLSAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVy
LT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkuaGVpZ2h0KCk7Ci19Ci0KLVdlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
dGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKLXsKLSAgICBXZWJHTFRleHR1cmUq
IHRleHR1cmUgPSBudWxscHRyOwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVu
aXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcuZ2V0KCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aOgotICAgICAgICBpZiAoIXVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVu
aXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UDoKLSAgICAgICAgaWYgKHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIH0KLSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZl
VGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1cmUiKTsKLSAgICByZXR1cm4gdGV4dHVyZTsKLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBjb25z
dCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2OwotICAgIGlmIChzdHJpbmcu
bGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJs
b2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
U2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KQotewot
ICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic2l6ZSA8IDAiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoIXZhbGlkYXRlQ2hhcmFj
dGVyKHN0cmluZ1tpXSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzdHJpbmcgbm90IEFTQ0lJ
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1
bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5D
RV9BTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9DT01QT05FTlQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3QgZW5h
YmxlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNS
R0JfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKLSAgICBkZWZh
dWx0OgotICAgICAgICBpZiAoKGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUIHx8IGZv
cm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKQotICAgICAgICAgICAgJiYgbV9l
eHRzUkdCKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4
dHVyZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgaWYgKG1fb2VzVGV4
dHVyZUZsb2F0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUhhbGZG
bG9hdCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1
cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF8yNF84OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgot
ICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFZlcmlmeSB0aGF0IHRo
ZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgotICAgIHN3aXRj
aCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxG
X0ZMT0FUX09FUykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9y
IGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6U1JHQl9FWFQ6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlw
ZSBmb3IgUkdCIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgotICAgICAgICBpZiAodHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAgICAgJiYgdHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNAotICAgICAgICAgICAgJiYg
dHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMQotICAgICAg
ICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYm
IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgIGlmICghbV93ZWJnbERl
cHRoVGV4dHVyZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERFUFRI
X0NPTVBPTkVOVCBub3QgZW5hYmxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhf
Q09NUE9ORU5UIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxldmVs
IG11c3QgYmUgMCBmb3IgREVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOwotICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lMIG5v
dCBlbmFibGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJTCBm
b3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAobGV2ZWwgPiAwKSB7Ci0gICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAg
Zm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgaWYgKGxldmVsIDwg
MCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEOgotICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2ZWwp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAg
ICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBUaGlzIGZ1bmN0aW9u
IG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQgZG9u
J3QKLSAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwuCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleEZ1bmNWYWxpZGF0
aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKLXsKLSAgICAv
LyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBjb21i
aW5hdGlvbi4KLSAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhUTUxJ
bWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKLSAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0
aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgotICAgIGlmICghdmFsaWRhdGVU
ZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpIHx8
ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVGb3JMZXZlbCA9IHBv
dygyLjAsIG1fbWF4VGV4dHVyZUxldmVsIC0gMSAtIGxldmVsKTsKLSAgICBzd2l0Y2ggKHRhcmdl
dCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGlm
ICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVyZVNp
emVGb3JMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQg
b2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWjoKLSAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFnZTJE
ICYmIHdpZHRoICE9IGhlaWdodCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9IGhl
aWdodCBmb3IgY3ViZSBtYXAiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBGb3IgdGV4SW1hZ2Ug
d2lkdGggPT0gaGVpZ2h0LgotICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2UgdGhhdCB3aWxsIGJl
IGNoZWNrZWQgd2hlbiBjaGVja2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGluIHJhbmdlLgotICAg
ICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGJvcmRlcikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAiYm9yZGVyICE9IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVU
ZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIHBp
eGVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51
bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKLXsKLSAgICBpZiAoIXBpeGVscykgewotICAgICAg
ICBpZiAoZGlzcG9zaXRpb24gPT0gTnVsbEFsbG93ZWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0aW9u
TmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBl
KCkgIT0gSlNDOjpUeXBlVWludDgpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBV
TlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGlmIChwaXhlbHMtPmdl
dFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
dHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJheSIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAot
ICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90
IEZsb2F0MzJBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VT
OiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Ci0gICAgICAgIC8vIEFzIHBlciB0aGUgc3BlY2lm
aWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdoZW4KLSAgICAgICAgLy8g
T0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgotICAgICAgICBpZiAocGl4ZWxzKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9BVF9PRVMgYnV0IEFycmF5
QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVzUmVxdWlyZWQ7
Ci0gICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVz
KGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5
dGVzUmVxdWlyZWQsIDApOwotICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1IpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7
Ci0gICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7Ci0gICAgICAgICAgZXJyb3Ig
PSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgs
IGhlaWdodCwgMSwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7Ci0gICAgICAgICAgaWYgKHBpeGVs
cy0+Ynl0ZUxlbmd0aCgpID09IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3Qgd2l0
aCBVTlBBQ0tfQUxJR05NRU5UID4gMSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmll
dyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKLXsKLSAgICByZXR1
cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KTsKLX0KLQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKLXsKLSAgICBp
ZiAoIXBpeGVscykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgYnl0ZXNSZXF1aXJlZCA9IDA7Ci0KLSAg
ICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
Ql9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdC
X0FNRDoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4Owot
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKLSAgICAgICAgICAgIGNvbnN0
IGludCBrQmxvY2tIZWlnaHQgPSA0OwotICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9zcyA9
ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKLSAgICAgICAgICAgIGlu
dCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8ga0Jsb2NrSGVp
Z2h0OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51bUJs
b2Nrc0Rvd24gKiBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBI
QV9BTUQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gMTY7
Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICAgICAgY29u
c3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzQWNyb3Nz
ID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOwotICAgICAgICAgICAg
aW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tI
ZWlnaHQ7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICogbnVt
QmxvY2tzRG93biAqIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4OwotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9j
a0hlaWdodCA9IDg7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRo
LCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiA0ICsgNykg
LyBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKLSAgICAgICAgewotICAg
ICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OwotICAgICAgICAgICAgY29uc3QgaW50
IGtCbG9ja1dpZHRoID0gMTY7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0g
ODsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dp
ZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAvIGtCbG9ja1Np
emU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSAhPSBieXRlc1JlcXVpcmVkKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZvciBk
aW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3Nl
ZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIGtC
bG9ja1dpZHRoID0gNDsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja0hlaWdodCA9IDQ7
Ci0gICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0YXJnZXQgPyBtX21heFRl
eHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7Ci0gICAgICAgIGNvbnN0IEdDM0Rz
aXplaSBtYXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVyZVNpemUgPj4gbGV2ZWw7Ci0g
ICAgICAgIGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0aCA9PSAxKSB8fCAobGV2ZWwg
JiYgd2lkdGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tXaWR0aCkgJiYgd2lkdGggPD0gbWF4
Q29tcHJlc3NlZERpbWVuc2lvbik7Ci0gICAgICAgIGJvb2wgaGVpZ2h0VmFsaWQgPSAobGV2ZWwg
JiYgaGVpZ2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQgPT0gMikgfHwgKCEoaGVpZ2h0ICUg
a0Jsb2NrSGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7Ci0gICAg
ICAgIGlmICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6
Ci0gICAgICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBwb3dlcnMgb2YgMi4KLSAgICAg
ICAgaWYgKCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBmb3Ig
bGV2ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4U3Vi
RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgV2ViR0xUZXh0
dXJlKiB0ZXgpCi17Ci0gICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwKSB7Ci0gICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIpOwotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKLSAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRo
ID0gNDsKLSAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgIGlmICgo
eG9mZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdodCkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBsZSBv
ZiA0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHdpZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKLSAgICAgICAg
ICAgIHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWxp
ZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICB9Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzogewotICAgICAgICBpZiAoeG9mZnNldCB8
fCB5b2Zmc2V0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlvZmZz
ZXQgbXVzdCBiZSB6ZXJvIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKLSAgICAg
ICAgICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3RpbmcgbGV2
ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdldCwg
bGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQ
T0lOVFM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9TVFJJUDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1A6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TElORVM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVA6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRSSUFOR0xFUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBkcmF3IG1vZGUiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
U3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBpZiAobV9z
dGVuY2lsTWFzayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5jUmVmICE9IG1f
c3RlbmNpbEZ1bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3RlbmNpbEZ1bmNN
YXNrQmFjaykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNrIHN0ZW5jaWxz
IHNldHRpbmdzIGRvIG5vdCBtYXRjaCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZ1bmMpCi17
Ci0gICAgc3dpdGNoIChmdW5jKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TkVWRVI6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpMRVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFQVRFUjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFVQUw6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpw
cmludEdMRXJyb3JUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICgh
bV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC0t
bV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQ7Ci0gICAgcHJpbnRXYXJuaW5nVG9Db25zb2xl
KG1lc3NhZ2UpOwotCi0gICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkKLSAg
ICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDogdG9vIG1hbnkgZXJyb3JzLCBubyBt
b3JlIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBjb25zb2xlIGZvciB0aGlzIGNvbnRl
eHQuIik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludFdhcm5pbmdUb0Nv
bnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghY2FudmFzKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgbWVzc2FnZSk7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVu
Y1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQpCi17Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIGF0dGFjaG1lbnQg
PiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKLSAgICAgICAgICAgICYmIGF0
dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlVOQ19BREQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVO
Q19TVUJUUkFDVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0VfU1VC
VFJBQ1Q6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6Ok1BWF9FWFQ6Ci0gICAgICAgIGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1JTl9F
WFQgfHwgbW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWluTWF4
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKLXsKLSAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01J
TlVTX0NPTlNUQU5UX0NPTE9SKQotICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
Q09OU1RBTlRfQUxQSEEpKQotICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09O
U1RBTlRfQ09MT1IpCi0gICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpD
T05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05T
VEFOVF9BTFBIQSkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNyYyBh
bmQgZHN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCi17Ci0gICAgc3dpdGNoIChjYXAp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDVUxMX0ZBQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
VEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U0FNUExFX0NPVkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
Y2FwYWJpbGl0eSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAgIGlmICghdikg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlv
bk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRN
aW5TaXplKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNp
emUpCi17Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYt
Pmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVp
IHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgcmV0dXJuIHZhbGlkYXRl
VW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYs
IHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAg
ICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRl
cnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0
aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkK
LXsKLSAgICBpZiAoIWxvY2F0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGxv
Y2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghdikgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8g
YXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAodHJhbnNwb3Nl
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwgKHNp
emUgJSByZXF1aXJlZE1pblNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
V2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFy
YW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gdXNhZ2UpCi17Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7Ci0gICAgc3dpdGNoICh0
YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZF
UjoKLSAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50
QXJyYXlCdWZmZXIoKS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSOgotICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlCdWZm
ZXIuZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBp
ZiAoIWJ1ZmZlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgc3dpdGNoICh1c2FnZSkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUQVRJQ19EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJB
VzoKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKLSAgICB9Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB1
c2FnZSIpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
SFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICgh
aW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBp
bWFnZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0IFVSTCYgdXJs
ID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7Ci0gICAgaWYgKHVybC5p
c051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIGltYWdlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlf
RVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7Ci0gICAgICAgIGVjID0g
U0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxW
aWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXZpZGVv
IHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKLSAgICAgICAgZWMgPSBTRUNVUklU
WV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBl
Y3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0Rm
bG9hdCB2MykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KLSAgICBp
ZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoZXhwZWN0
ZWRTaXplKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliMWYoaW5kZXgsIHYwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGYo
aW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotICAgIFZlcnRleEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0cmli
VmFsdWVbaW5kZXhdOwotICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7Ci0gICAgYXR0cmli
VmFsdWUudmFsdWVbMV0gPSB2MTsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOwotICAg
IGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgsIHYtPmRhdGEo
KSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4cGVj
dGVkU2l6ZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJp
bmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJbiBH
TCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlmIChpbmRleCB8
fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsK
LSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYo
aW5kZXgsIHYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YjNmdihpbmRleCwgdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAg
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJp
YlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0cmliVmFsdWUuaW5p
dFZhbHVlKCk7Ci0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytpaSkK
LSAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWldID0gdltpaV07Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCi17Ci0gICAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKLSAgICAKLSAgICBtX3ZlcnRleEF0
dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5v
YmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOwotICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQsIGZhbHNlLCAwLCAwKTsKLSAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCAwKTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KDApOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwotICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVsxXSA9IDAuMGY7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBmOwot
ICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKLSAgICBtX2ZvcmNlQXR0
cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUg
PSBmYWxzZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVydGV4
QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KQotewotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7Ci0gICAgY29uc3QgVmVydGV4QXR0cmli
VmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKLSAgICBpZiAoIW1f
Y3VycmVudFByb2dyYW0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIHVzaW5nVmVy
dGV4QXR0cmliMCA9IG1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7Ci0g
ICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMCkKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJl
Zm9yZSA9IHRydWU7Ci0gICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0ZXhBdHRyaWIw
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAgJiYg
IW1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
LT5vYmplY3QoKSk7Ci0gICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZlcnRl
eCArIDEpICogNCAqIHNpemVvZihHQzNEZmxvYXQpOwotICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+
IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJE
YXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFTaXplOwotICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZl
clJlZmlsbCA9IHRydWU7Ci0gICAgfQotICAgIGlmICh1c2luZ1ZlcnRleEF0dHJpYjAKLSAgICAg
ICAgJiYgKG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsCi0gICAgICAgICAgICB8fCBhdHRyaWJW
YWx1ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQotICAgICAgICAg
ICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVb
MV0KLSAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVydGV4QXR0cmli
MEJ1ZmZlclZhbHVlWzJdCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVszXSAhPSBt
X3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKLSAgICAgICAgYXV0byBidWZmZXJEYXRh
ID0gc3RkOjptYWtlX3VuaXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7Ci0g
ICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lpKSB7
Ci0gICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVswXTsK
LSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsx
XTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJWYWx1ZS52YWx1
ZVsyXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRyaWJWYWx1ZS52
YWx1ZVszXTsKLSAgICAgICAgfQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsw
XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVsxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwotICAgICAgICBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwotICAgICAgICBtX2Zv
cmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZl
clN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0YVNp
emUsIGJ1ZmZlckRhdGEuZ2V0KCkpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0
ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKLXsKLSAgICBjb25zdCBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIGlmIChzdGF0ZS5idWZm
ZXJCaW5kaW5nICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJv
KHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhB
dHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQs
IHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwotICAgIH0KLSAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3Ja
ZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKLXsKLSAgICBSZWZQdHI8V2ViR0xD
b250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOwotICAgIGNhbnZhcygp
LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKLSAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKTsKLSAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExvc3RD
b250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCi0gICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9y
ZUNvbnRleHQoKQotewotICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKLSAgICBpZiAoIW1fY29u
dGV4dExvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4
dCBpcyBub3QgcmVzdG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZQotICAg
IC8vIHdlYmdsY29udGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgotICAgIC8v
Ci0gICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1cCBmb3Ig
cmVhbCB2cy4gc3ludGhldGljIGxvc3QKLSAgICAvLyBjb250ZXh0IGV2ZW50cywgd2UgZG9uJ3Qg
aGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZwotICAgIC8vIHRo
ZSByZXRyeSBsb29wIGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCi0gICAgaWYgKCFtX3Jl
c3RvcmVBbGxvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgY29udGV4dExvc3RSZWFz
b24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QigpOwotCi0gICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgotICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0Qg
aW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5Ci0gICAgICAgIC8vIHN1cHBvcnQgR0xfQVJC
X3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCi0gICAgICAgIC8v
IFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVzZWQgdG8gZm9y
Y2UKLSAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6Ci0gICAgICAgIC8vIFRoZSBy
ZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0IHdhcwotICAg
ICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCi0gICAgICAgIHBy
aW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFnZSBj
YXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3JpbmcgdGhlIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJTk5PQ0VOVF9D
T05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBjb250ZXh0IHRv
IGJlIHJlc3RvcmVkLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VU5L
Tk9XTl9DT05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gV2Fybi4gSWRlYWxseSwgcHJvbXB0
IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCi0gICAgICAgIC8vIGNvbnRlbnQgb24g
dGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8KLSAgICAgICAg
Ly8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRpbnVlIHJ1bm5p
bmcKLSAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInllcyIgc2hvdWxk
IHdlIHN0YXJ0Ci0gICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgY29udGV4dC4K
LSAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50IG9u
IHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0Iik7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5k
b2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0dGlu
Z3MoKS53ZWJHTEVuYWJsZWQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyog
dmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0g
ICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3QoKTsKLSAgICBpZiAoIXJvb3QpCi0gICAg
ICAgIHJldHVybjsKLSAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdpbmRv
dygpOwotICAgIGlmICghaG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUobV9h
dHRyaWJ1dGVzLCBob3N0V2luZG93KSk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGlm
IChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCi0gICAgICAgICAgICBtX3Jl
c3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFwcGVu
IGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCi0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBu
ZXcgR3JhcGhpY3NDb250ZXh0M0QuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKLSAgICAgICAgRHJhd2luZ0J1
ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1dGVzLnByZXNl
cnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJhd2luZ0J1ZmZl
cjo6RGlzY2FyZDsKLSAgICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJlbWVudCBhbHBo
YSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDogRHJhd2luZ0J1
ZmZlcjo6T3BhcXVlOwotICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVyOjpj
cmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHByZXNlcnZlLCBh
bHBoYSk7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0KLQotICAgIG1f
Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwotICAgIHNldHVw
RmxhZ3MoKTsKLSAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwotICAgIGNhbnZhcygpLT5kaXNw
YXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29u
dGV4dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOwotfQotCi1TdHJpbmcgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4dCkgY29uc3QK
LXsKLSAgICBpZiAodGV4dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlTdHJp
bmcoKTsKLSAgICByZXR1cm4gdGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJ
bWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKLSAgICA6
IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5b
XT4oY2FwYWNpdHkpKQotICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKLXsKLX0KLQotSW1hZ2VC
dWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAw
OyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1
ZmZlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghYnVmKQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBidWJibGVUb0Zyb250KGkpOwotICAgICAgICByZXR1cm4gYnVmOwotICAg
IH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSwgMSk7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwotICAgIG1fYnVmZmVyc1tp
XSA9IFdURjo6bW92ZSh0ZW1wKTsKLQotICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNb
aV0uZ2V0KCk7Ci0gICAgYnViYmxlVG9Gcm9udChpKTsKLSAgICByZXR1cm4gYnVmOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxlVG9G
cm9udChpbnQgaWR4KQotewotICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCi0gICAg
ICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKLX0KLQotbmFtZXNwYWNlIHsK
LQotICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOwotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgotICAgICAgICAgICAgcmV0dXJu
ICJJTlZBTElEX1ZBTFVFIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT046Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9OIjsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKLSAgICAgICAgICAg
IHJldHVybiAiT1VUX09GX01FTU9SWSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAgcmV0dXJuICJJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKLSAgICAgICAgICAgIHJldHVybiAiQ09OVEVYVF9MT1NU
X1dFQkdMIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZv
cm1hdCgiV2ViR0wgRVJST1IoJTA0eCkiLCBlcnJvcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0g
Ly8gbmFtZXNwYWNlIGFub255bW91cwotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3lu
dGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5
KQotewotICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRpc3BsYXkgPT0g
RGlzcGxheUluQ29uc29sZSkgewotICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIp
ICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1lKSAr
ICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOwotICAgICAgcHJpbnRHTEVycm9yVG9Db25zb2xl
KHN0cik7Ci0gICAgfQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwot
fQotCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29uc29s
ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQotewot
ICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7Ci0gICAgICAgIFN0cmluZyBz
dHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0
cmluZyhkZXNjcmlwdGlvbik7Ci0gICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIpOwot
ICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRlc3Qo
KQotewotICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKLQotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1ZmZlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQ
dHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1
dGVzKCk7Ci0gICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+c3RlbmNpbCgp
OwotICAgIH0KLSAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
VEVTVCwKLSAgICAgICAgICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3RlbmNp
bEJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRpc2Fi
bGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSkK
LSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7Ci19Ci0KLUludFNpemUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2FudmFzU2l6ZSgpCi17Ci0gICAgcmV0dXJuIEludFNpemUo
Y2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBdKSwKLSAgICAg
ICAgICAgICAgICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3BvcnRE
aW1zWzFdKSk7Ci19Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhEcmF3
QnVmZmVycygpCi17Ci0gICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIGlmICghbV9tYXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhEcmF3
QnVmZmVycyk7Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhU
LCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKLSAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMgcmVx
dWlyZXMgTUFYX0NPTE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCi0gICAgcmV0
dXJuIHN0ZDo6bWluKG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7Ci19
Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRz
KCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhD
b2xvckF0dGFjaG1lbnRzKTsKLSAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVudW0g
YnVmKQotewotICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKLXsKLSAgICBFeGNlcHRp
b25Db2RlIGVjOwotICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCi17Ci0gICAgRXhjZXB0
aW9uQ29kZSBlYzsKLSAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5n
ZXQoKSwgZWMpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNEcmF3
QnVmZmVycygpCi17Ci0gICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVj
a2VkKSB7Ci0gICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSB0
cnVlOwotICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3QnVmZmVyczo6
c3VwcG9ydGVkKHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1N1cHBvcnRl
ZDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJbnN0YW5jZWQo
R0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkg
cHJpbWNvdW50KQotewotICAgIGlmICghcHJpbWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0
Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZURy
YXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHByaW1j
b3VudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAg
ICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xFUzJD
b21wbGlhbnQoKSkKLSAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVy
dGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmlj
dCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0YW5j
ZWQiLCB0cnVlKTsKLQotICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0KLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAm
JiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0
ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAg
ICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgZmFs
c2UpOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3Vu
dCkKLXsKLSAgICBpZiAoIXByaW1jb3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0g
MDsKLSAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQi
LCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgcHJpbWNvdW50KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJvb2wgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KSB7Ci0gICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxpZGF0ZUluZGV4
QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQp
LCBudW1FbGVtZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0
ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBpZiAoIWlzR0xFUzJOUE9U
U3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRz
SW5zdGFuY2VkIiwgdHJ1ZSk7Ci0KLSAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3RhbmNl
ZChtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgcHJp
bWNvdW50KTsKLQotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0
aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1
cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIGZhbHNlKTsKLSAgICBtYXJr
Q29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlzb3Ii
LCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRp
dmlzb3IpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNv
cik7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxNiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgV2ViR0xSZW5kZXJpbmdDb250ZXh0X2gKLSNkZWZpbmUgV2ViR0xSZW5kZXJp
bmdDb250ZXh0X2gKLQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVkZSA8bWVt
b3J5PgotI2luY2x1ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9JbnQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQU5HTEVJbnN0YW5jZWRBcnJheXM7Ci1jbGFzcyBFWFRC
bGVuZE1pbk1heDsKLWNsYXNzIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzsKLWNsYXNzIEVY
VFNoYWRlclRleHR1cmVMT0Q7Ci1jbGFzcyBFWFRzUkdCOwotY2xhc3MgRVhURnJhZ0RlcHRoOwot
Y2xhc3MgSFRNTEltYWdlRWxlbWVudDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Ci1jbGFzcyBJ
bWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBPRVNT
dGFuZGFyZERlcml2YXRpdmVzOwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0OwotY2xhc3MgT0VTVGV4
dHVyZUZsb2F0TGluZWFyOwotY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdDsKLWNsYXNzIE9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXI7Ci1jbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKLWNsYXNz
IE9FU0VsZW1lbnRJbmRleFVpbnQ7Ci1jbGFzcyBXZWJHTEFjdGl2ZUluZm87Ci1jbGFzcyBXZWJH
TEJ1ZmZlcjsKLWNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xDb250ZXh0T2Jq
ZWN0OwotY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLWNsYXNzIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOwotY2xh
c3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKLWNsYXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87
Ci1jbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLWNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlOwotY2xh
c3MgV2ViR0xEcmF3QnVmZmVyczsKLWNsYXNzIFdlYkdMRXh0ZW5zaW9uOwotY2xhc3MgV2ViR0xG
cmFtZWJ1ZmZlcjsKLWNsYXNzIFdlYkdMTG9zZUNvbnRleHQ7Ci1jbGFzcyBXZWJHTE9iamVjdDsK
LWNsYXNzIFdlYkdMUHJvZ3JhbTsKLWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwotY2xhc3MgV2Vi
R0xTaGFkZXI7Ci1jbGFzcyBXZWJHTFNoYXJlZE9iamVjdDsKLWNsYXNzIFdlYkdMU2hhZGVyUHJl
Y2lzaW9uRm9ybWF0OwotY2xhc3MgV2ViR0xUZXh0dXJlOwotY2xhc3MgV2ViR0xVbmlmb3JtTG9j
YXRpb247Ci1jbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwotCi10eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwotCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJs
aWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IGNy
ZWF0ZShIVE1MQ2FudmFzRWxlbWVudCosIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqKTsKLSAgICB2
aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpczNk
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2lmIFBMQVRGT1JNKFdJTikKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGFjY2VsZXJhdGVkIDNkIGNhbnZhcyBvbiBXaW5kb3dzLgot
ICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KLSNlbHNlCi0gICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotICAgIGludCBkcmF3aW5nQnVmZmVy
V2lkdGgoKSBjb25zdDsKLSAgICBpbnQgZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0OwotCi0g
ICAgdm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBH
QzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZy
YW1lYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgYmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBn
cmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSk7Ci0gICAgdm9pZCBibGVuZEVx
dWF0aW9uKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSk7Ci0gICAgdm9pZCBibGVuZEZ1bmMo
R0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3Rvcik7Ci0gICAgdm9pZCBibGVuZEZ1bmNT
ZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxw
aGEsIEdDM0RlbnVtIGRzdEFscGhhKTsKLQotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0
YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBH
QzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNE
ZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25n
IGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5
QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgR0MzRGVudW0gY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpOwotICAgIHZvaWQgY2xlYXIoR0MzRGJp
dGZpZWxkIG1hc2spOwotICAgIHZvaWQgY2xlYXJDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxv
YXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgY2xl
YXJEZXB0aChHQzNEZmxvYXQpOwotICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQpOwotICAg
IHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Ri
b29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKTsKLSAgICB2b2lkIGNvbXBpbGVTaGFkZXIo
V2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIGNvbXByZXNzZWRUZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwot
ICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwotCi0gICAgdm9pZCBjb3B5VGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlcik7Ci0gICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KTsKLQotICAgIFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZUJ1ZmZlcigpOwotICAg
IFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRlUHJvZ3JhbSgpOwotICAgIFBhc3NSZWZQdHI8
V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFBhc3NSZWZQdHI8
V2ViR0xTaGFkZXI+IGNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHZv
aWQgY3VsbEZhY2UoR0MzRGVudW0gbW9kZSk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJH
TEJ1ZmZlciopOwotICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciop
OwotICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKLSAgICB2b2lkIGRlbGV0
ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgIHZvaWQgZGVsZXRlU2hhZGVy
KFdlYkdMU2hhZGVyKik7Ci0gICAgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSopOwot
Ci0gICAgdm9pZCBkZXB0aEZ1bmMoR0MzRGVudW0pOwotICAgIHZvaWQgZGVwdGhNYXNrKEdDM0Ri
b29sZWFuKTsKLSAgICB2b2lkIGRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQg
ekZhcik7Ci0gICAgdm9pZCBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIq
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkaXNhYmxlKEdDM0RlbnVtIGNhcCk7Ci0gICAg
dm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIGRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwg
R0MzRHNpemVpIGNvdW50LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXAp
OwotICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGZpbmlzaCgpOwotICAgIHZvaWQgZmx1c2goKTsKLSAgICB2
b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlcios
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBXZWJHTFRl
eHR1cmUqLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmcm9udEZh
Y2UoR0MzRGVudW0gbW9kZSk7Ci0gICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJn
ZXQpOwotCi0gICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2ZUF0dHJpYihX
ZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NS
ZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIEdD
M0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBnZXRBdHRhY2hlZFNoYWRl
cnMoV2ViR0xQcm9ncmFtKiwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0QnVmZmVyUGFyYW1ldGVyKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNz
UmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0g
ICAgR0MzRGVudW0gZ2V0RXJyb3IoKTsKLSAgICBXZWJHTEV4dGVuc2lvbiogZ2V0RXh0ZW5zaW9u
KGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFBhcmFt
ZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0SW5mbyBn
ZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBX
ZWJHTEdldEluZm8gZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiwgR0MzRGVudW0gcG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTFNo
YWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lz
aW9uRm9ybWF0PiBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwg
R0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRT
aGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgVmVjdG9yPFN0
cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRUZXhQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFdlYkdMR2V0SW5mbyBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xV
bmlmb3JtTG9jYXRpb24+IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFZlcnRleEF0dHJp
YihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBs
b25nIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSk7Ci0KLSAgICB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKTsK
LSAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOwotICAgIGJvb2wgaXNDb250
ZXh0TG9zdCgpIGNvbnN0OwotICAgIEdDM0Rib29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXAp
OwotICAgIEdDM0Rib29sZWFuIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwotICAg
IEdDM0Rib29sZWFuIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKLSAgICBHQzNEYm9vbGVhbiBp
c1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgIEdDM0Rib29sZWFuIGlzU2hh
ZGVyKFdlYkdMU2hhZGVyKik7Ci0gICAgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFdlYkdMVGV4dHVy
ZSopOwotCi0gICAgdm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGxpbmtQcm9n
cmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHBpeGVsU3RvcmVp
KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKLSAgICB2b2lkIHBvbHlnb25PZmZzZXQo
R0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKTsKLSAgICB2b2lkIHJlYWRQaXhlbHMo
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci0gICAg
dm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBz
YW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7Ci0gICAg
dm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQpOwotICAgIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgY29uc3Qg
U3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0g
ZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbEZ1bmNT
ZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVp
bnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCk7Ci0gICAgdm9pZCBzdGVu
Y2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQg
c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7
Ci0gICAgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWls
LCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpOwotCi0gICAgdm9pZCB0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
Ci0gICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEltYWdlRGF0YSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwK
LSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
SW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52
YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lk
IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAg
ICB2b2lkIHRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGZsb2F0IHBhcmFtKTsKLSAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Ci0KLSAgICB2b2lkIHRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCB0ZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNlbmRpZgotCi0g
ICAgdm9pZCB1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RpbnQgeCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3Jt
MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHos
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1
bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3Jt
M2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQg
dywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIElu
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQz
MkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5z
cG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFs
dWUsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0
cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgeCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgs
IEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZl
cnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpOwot
ICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZh
bHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Ci0gICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVz
KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQg
dyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJh
eSogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYlBv
aW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJv
b2xlYW4gbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IHN0cmlkZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB2
aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KTsKLQotICAgIC8vIFdFQktJVF9sb3NlX2NvbnRleHQgc3VwcG9ydAotICAgIGVudW0g
TG9zdENvbnRleHRNb2RlIHsKLSAgICAgICAgLy8gTG9zdCBjb250ZXh0IG9jY3VycmVkIGF0IHRo
ZSBncmFwaGljcyBzeXN0ZW0gbGV2ZWwuCi0gICAgICAgIFJlYWxMb3N0Q29udGV4dCwKLQotICAg
ICAgICAvLyBMb3N0IGNvbnRleHQgcHJvdm9rZWQgYnkgV0VCS0lUX2xvc2VfY29udGV4dC4KLSAg
ICAgICAgU3ludGhldGljTG9zdENvbnRleHQKLSAgICB9OwotICAgIHZvaWQgZm9yY2VMb3N0Q29u
dGV4dChMb3N0Q29udGV4dE1vZGUpOwotICAgIHZvaWQgZm9yY2VSZXN0b3JlQ29udGV4dCgpOwot
ICAgIHZvaWQgbG9zZUNvbnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7IH0KLSAgICBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0R3JvdXAuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpOwotCi0gICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgb3ZlcnJpZGU7
Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKCk7Ci0KLSAgICB2b2lkIHJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCop
OwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKLSAg
ICAKLSAgICB1bnNpZ25lZCBnZXRNYXhWZXJ0ZXhBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gbV9t
YXhWZXJ0ZXhBdHRyaWJzOyB9Ci0KLSAgICAvLyBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIGV4dGVu
c2lvbiBmdW5jdGlvbnMuCi0gICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1v
ZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7
Ci0gICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNv
dW50KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1
aW50IGRpdmlzb3IpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJHTERyYXdCdWZm
ZXJzOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOwotICAgIGZyaWVuZCBjbGFz
cyBXZWJHTE9iamVjdDsKLSAgICBmcmllbmQgY2xhc3MgT0VTVmVydGV4QXJyYXlPYmplY3Q7Ci0g
ICAgZnJpZW5kIGNsYXNzIFdlYkdMRGVidWdTaGFkZXJzOwotICAgIGZyaWVuZCBjbGFzcyBXZWJH
TENvbXByZXNzZWRUZXh0dXJlQVRDOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEM7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RD
OwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxs
YmFjazsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKLQotICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzKTsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0Vs
ZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMpOwotICAgIHZvaWQgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKLSAgICB2b2lk
IHNldHVwRmxhZ3MoKTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAgIHZpcnR1YWwgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0
TmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJXZWJHTFJlbmRlcmluZ0NvbnRleHQiOyB9
Ci0KLSAgICB2b2lkIGFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOwotICAgIHZv
aWQgYWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKLSAgICB2b2lkIGRldGFj
aEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKLQotICAgIHZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4
dDNEKCk7Ci0gICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIC8vIFF1ZXJ5IHdo
ZXRoZXIgaXQgaXMgYnVpbHQgb24gdG9wIG9mIGNvbXBsaWFudCBHTEVTMiBpbXBsZW1lbnRhdGlv
bi4KLSAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSB7IHJldHVybiBtX2lzR0xFUzJDb21wbGlh
bnQ7IH0KLSAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gaXMgTlBPVCBzdHJp
Y3QuCi0gICAgYm9vbCBpc0dMRVMyTlBPVFN0cmljdCgpIHsgcmV0dXJuIG1faXNHTEVTMk5QT1RT
dHJpY3Q7IH0KLSAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVz
IGVycm9ycyBvbiBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3Nlcy4KLSAgICBib29sIGlzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSB7IHJldHVybiBtX2lzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7IH0KLSAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1w
bGVtZW50YXRpb24gaW5pdGlhbGl6ZXMgdGV4dHVyZXMvcmVuZGVyYnVmZmVycyB0byAwLgotICAg
IGJvb2wgaXNSZXNvdXJjZVNhZmUoKSB7IHJldHVybiBtX2lzUmVzb3VyY2VTYWZlOyB9Ci0gICAg
Ly8gUXVlcnkgaWYgZGVwdGhfc3RlbmNpbCBidWZmZXIgaXMgc3VwcG9ydGVkLgotICAgIGJvb2wg
aXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSB7IHJldHVybiBtX2lzRGVwdGhTdGVuY2lsU3VwcG9y
dGVkOyB9Ci0KLSAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9w
ZW5HTCBkYXRhIHR5cGVzCi0gICAgLy8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCi0gICAg
dW5zaWduZWQgaW50IHNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpOwotCi0gICAgLy8gQmFzaWMg
dmFsaWRhdGlvbiBvZiBjb3VudCBhbmQgb2Zmc2V0IGFnYWluc3QgbnVtYmVyIG9mIGVsZW1lbnRz
IGluIGVsZW1lbnQgYXJyYXkgYnVmZmVyCi0gICAgYm9vbCB2YWxpZGF0ZUVsZW1lbnRBcnJheVNp
emUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCk7Ci0K
LSAgICAvLyBDb25zZXJ2YXRpdmUgYnV0IHF1aWNrIGluZGV4IHZhbGlkYXRpb24KLSAgICBib29s
IHZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCYg
bnVtRWxlbWVudHNSZXF1aXJlZCk7Ci0KLSAgICAvLyBQcmVjaXNlIGJ1dCBzbG93IGluZGV4IHZh
bGlkYXRpb24gLS0gb25seSBkb25lIGlmIGNvbnNlcnZhdGl2ZSBjaGVja3MgZmFpbAotICAgIGJv
b2wgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCk7Ci0g
ICAgYm9vbCB2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1
bnNpZ25lZCBwcmltaXRpdmVDb3VudCA9IDApOwotCi0gICAgYm9vbCB2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KGNvbnN0IGNoYXIqLCBXZWJHTE9iamVjdCopOwotCi0gICAgYm9vbCB2YWxpZGF0ZURyYXdB
cnJheXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZp
cnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpOwotICAgIGJvb2wgdmFs
aWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2ln
bmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1jb3VudCk7Ci0KLSAgICAvLyBBZGRzIGEg
Y29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdC4KLSAgICB2b2lkIGFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEdDM0RlbnVtKTsKLQotICAgIFBhc3NSZWZQdHI8SW1hZ2U+IGRyYXdJbWFnZUludG9C
dWZmZXIoSW1hZ2UqLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3Rv
cik7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgUGFzc1JlZlB0cjxJbWFnZT4gdmlkZW9GcmFt
ZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIEJhY2tpbmdTdG9yZUNvcHksIEV4Y2VwdGlvbkNv
ZGUmKTsKLSNlbmRpZgotCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7
Ci0gICAgUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBtX2NvbnRleHRHcm91cDsKLQotICAgIC8v
IE9wdGlvbmFsIHN0cnVjdHVyZSBmb3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwgaW5z
dGVhZCBvZiBkaXJlY3RseQotICAgIC8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRleHQu
Ci0gICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKLQotICAgIC8vIERp
c3BhdGNoZXMgYSBjb250ZXh0IGxvc3QgZXZlbnQgb25jZSBpdCBpcyBkZXRlcm1pbmVkIHRoYXQg
b25lIGlzIG5lZWRlZC4KLSAgICAvLyBUaGlzIGlzIHVzZWQgYm90aCBmb3Igc3ludGhldGljIGFu
ZCByZWFsIGNvbnRleHQgbG9zc2VzLiBGb3IgcmVhbCBvbmVzLCBpdCdzCi0gICAgLy8gbGlrZWx5
IHRoYXQgdGhlcmUncyBubyBKYXZhU2NyaXB0IG9uIHRoZSBzdGFjaywgYnV0IHRoYXQgbWlnaHQg
YmUgZGVwZW5kZW50Ci0gICAgLy8gb24gaG93IGV4YWN0bHkgdGhlIHBsYXRmb3JtIGRpc2NvdmVy
cyB0aGF0IHRoZSBjb250ZXh0IHdhcyBsb3N0LiBGb3IgYmV0dGVyCi0gICAgLy8gcG9ydGFiaWxp
dHkgd2UgYWx3YXlzIGRlZmVyIHRoZSBkaXNwYXRjaCBvZiB0aGUgZXZlbnQuCi0gICAgVGltZXIg
bV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcjsKLSAgICBib29sIG1fcmVzdG9yZUFsbG93
ZWQ7Ci0gICAgVGltZXIgbV9yZXN0b3JlVGltZXI7Ci0KLSAgICBib29sIG1fbmVlZHNVcGRhdGU7
Ci0gICAgYm9vbCBtX21hcmtlZENhbnZhc0RpcnR5OwotICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0
T2JqZWN0Kj4gbV9jb250ZXh0T2JqZWN0czsKLQotICAgIC8vIExpc3Qgb2YgYm91bmQgVkJPJ3Mu
IFVzZWQgdG8gbWFpbnRhaW4gaW5mbyBhYm91dCBzaXplcyBmb3IgQVJSQVlfQlVGRkVSIGFuZCBz
dG9yZWQgdmFsdWVzIGZvciBFTEVNRU5UX0FSUkFZX0JVRkZFUgotICAgIFJlZlB0cjxXZWJHTEJ1
ZmZlcj4gbV9ib3VuZEFycmF5QnVmZmVyOwotICAgIAotICAgIFJlZlB0cjxXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTPiBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsKLSAgICBSZWZQdHI8V2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0OwotICAgIHZv
aWQgc2V0Qm91bmRWZXJ0ZXhBcnJheU9iamVjdChQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM+IGFycmF5T2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKGFycmF5T2JqZWN0KQot
ICAgICAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gYXJyYXlPYmplY3Q7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1fZGVmYXVs
dFZlcnRleEFycmF5T2JqZWN0OwotICAgIH0KLSAgICAKLSAgICBjbGFzcyBWZXJ0ZXhBdHRyaWJW
YWx1ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGluaXRWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICB2b2lkIGluaXRWYWx1ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbHVlWzBdID0gMC4w
ZjsKLSAgICAgICAgICAgIHZhbHVlWzFdID0gMC4wZjsKLSAgICAgICAgICAgIHZhbHVlWzJdID0g
MC4wZjsKLSAgICAgICAgICAgIHZhbHVlWzNdID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzRdOwotICAgIH07Ci0gICAgVmVjdG9yPFZlcnRleEF0
dHJpYlZhbHVlPiBtX3ZlcnRleEF0dHJpYlZhbHVlOwotICAgIHVuc2lnbmVkIG1fbWF4VmVydGV4
QXR0cmliczsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsK
LSAgICBsb25nIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemU7Ci0gICAgR0MzRGZsb2F0IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzRdOwotICAgIGJvb2wgbV9mb3JjZUF0dHJpYjBCdWZmZXJS
ZWZpbGw7Ci0gICAgYm9vbCBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlOwotCi0gICAgUmVmUHRy
PFdlYkdMUHJvZ3JhbT4gbV9jdXJyZW50UHJvZ3JhbTsKLSAgICBSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gbV9mcmFtZWJ1ZmZlckJpbmRpbmc7Ci0gICAgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVy
PiBtX3JlbmRlcmJ1ZmZlckJpbmRpbmc7Ci0gICAgc3RydWN0IFRleHR1cmVVbml0U3RhdGUgewot
ICAgICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXh0dXJlMkRCaW5kaW5nOwotICAgICAgICBS
ZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7Ci0gICAgfTsKLSAgICBW
ZWN0b3I8VGV4dHVyZVVuaXRTdGF0ZT4gbV90ZXh0dXJlVW5pdHM7Ci0gICAgdW5zaWduZWQgbG9u
ZyBtX2FjdGl2ZVRleHR1cmVVbml0OwotCi0gICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFj
a1RleHR1cmUyRDsKLSAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZUN1YmVN
YXA7Ci0KLSAgICBWZWN0b3I8R0MzRGVudW0+IG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwot
Ci0gICAgLy8gRml4ZWQtc2l6ZSBjYWNoZSBvZiByZXVzYWJsZSBpbWFnZSBidWZmZXJzIGZvciB2
aWRlbyB0ZXhJbWFnZTJEIGNhbGxzLgotICAgIGNsYXNzIExSVUltYWdlQnVmZmVyQ2FjaGUgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgTFJVSW1hZ2VCdWZmZXJDYWNoZShpbnQgY2FwYWNpdHkpOwot
ICAgICAgICAvLyBUaGUgcG9pbnRlciByZXR1cm5lZCBpcyBvd25lZCBieSB0aGUgaW1hZ2UgYnVm
ZmVyIG1hcC4KLSAgICAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKGNvbnN0IEludFNpemUm
IHNpemUpOwotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgYnViYmxlVG9Gcm9udChpbnQgaWR4
KTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5b
XT4gbV9idWZmZXJzOwotICAgICAgICBpbnQgbV9jYXBhY2l0eTsKLSAgICB9OwotICAgIExSVUlt
YWdlQnVmZmVyQ2FjaGUgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlOwotCi0gICAgR0MzRGludCBtX21h
eFRleHR1cmVTaXplOwotICAgIEdDM0RpbnQgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7Ci0gICAg
R0MzRGludCBtX21heFJlbmRlcmJ1ZmZlclNpemU7Ci0gICAgR0MzRGludCBtX21heFZpZXdwb3J0
RGltc1syXTsKLSAgICBHQzNEaW50IG1fbWF4VGV4dHVyZUxldmVsOwotICAgIEdDM0RpbnQgbV9t
YXhDdWJlTWFwVGV4dHVyZUxldmVsOwotCi0gICAgR0MzRGludCBtX21heERyYXdCdWZmZXJzOwot
ICAgIEdDM0RpbnQgbV9tYXhDb2xvckF0dGFjaG1lbnRzOwotICAgIEdDM0RlbnVtIG1fYmFja0Ry
YXdCdWZmZXI7Ci0gICAgYm9vbCBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2Vk
OwotICAgIGJvb2wgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZDsKLQotICAgIEdDM0RpbnQgbV9wYWNr
QWxpZ25tZW50OwotICAgIEdDM0RpbnQgbV91bnBhY2tBbGlnbm1lbnQ7Ci0gICAgYm9vbCBtX3Vu
cGFja0ZsaXBZOwotICAgIGJvb2wgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhOwotICAgIEdDM0Rl
bnVtIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb247Ci0gICAgYm9vbCBtX2NvbnRleHRMb3N0
OwotICAgIExvc3RDb250ZXh0TW9kZSBtX2NvbnRleHRMb3N0TW9kZTsKLSAgICBHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Ci0KLSAgICBib29sIG1fbGF5ZXJDbGVh
cmVkOwotICAgIEdDM0RmbG9hdCBtX2NsZWFyQ29sb3JbNF07Ci0gICAgYm9vbCBtX3NjaXNzb3JF
bmFibGVkOwotICAgIEdDM0RmbG9hdCBtX2NsZWFyRGVwdGg7Ci0gICAgR0MzRGludCBtX2NsZWFy
U3RlbmNpbDsKLSAgICBHQzNEYm9vbGVhbiBtX2NvbG9yTWFza1s0XTsKLSAgICBHQzNEYm9vbGVh
biBtX2RlcHRoTWFzazsKLQotICAgIGJvb2wgbV9zdGVuY2lsRW5hYmxlZDsKLSAgICBHQzNEdWlu
dCBtX3N0ZW5jaWxNYXNrLCBtX3N0ZW5jaWxNYXNrQmFjazsKLSAgICBHQzNEaW50IG1fc3RlbmNp
bEZ1bmNSZWYsIG1fc3RlbmNpbEZ1bmNSZWZCYWNrOyAvLyBOb3RlIHRoYXQgdGhlc2UgYXJlIHRo
ZSB1c2VyIHNwZWNpZmllZCB2YWx1ZXMsIG5vdCB0aGUgaW50ZXJuYWwgY2xhbXBlZCB2YWx1ZS4K
LSAgICBHQzNEdWludCBtX3N0ZW5jaWxGdW5jTWFzaywgbV9zdGVuY2lsRnVuY01hc2tCYWNrOwot
Ci0gICAgYm9vbCBtX2lzR0xFUzJDb21wbGlhbnQ7Ci0gICAgYm9vbCBtX2lzR0xFUzJOUE9UU3Ry
aWN0OwotICAgIGJvb2wgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzOwot
ICAgIGJvb2wgbV9pc1Jlc291cmNlU2FmZTsKLSAgICBib29sIG1faXNEZXB0aFN0ZW5jaWxTdXBw
b3J0ZWQ7Ci0gICAgYm9vbCBtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZDsKLQotICAgIGJvb2wg
bV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZTsKLSAgICBpbnQgbV9udW1HTEVycm9yc1RvQ29u
c29sZUFsbG93ZWQ7Ci0KLSAgICAvLyBBIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBjYW4gYmUgY3Jl
YXRlZCBpbiBhIHN0YXRlIHdoZXJlIGl0IGFwcGVhcnMgYXMKLSAgICAvLyBhIHZhbGlkIGFuZCBh
Y3RpdmUgY29udGV4dCwgYnV0IHdpbGwgbm90IGV4ZWN1dGUgYW55IGltcG9ydGFudCBvcGVyYXRp
b25zCi0gICAgLy8gdW50aWwgaXRzIGxvYWQgcG9saWN5IGlzIGNvbXBsZXRlbHkgcmVzb2x2ZWQu
Ci0gICAgYm9vbCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb247Ci0gICAgYm9vbCBtX2hhc1Jl
cXVlc3RlZFBvbGljeVJlc29sdXRpb247Ci0gICAgYm9vbCBpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCk7Ci0KLSAgICAvLyBFbmFibGVkIGV4dGVuc2lvbiBvYmplY3RzLgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxFWFRGcmFnRGVwdGg+IG1fZXh0RnJhZ0RlcHRoOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxF
WFRCbGVuZE1pbk1heD4gbV9leHRCbGVuZE1pbk1heDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RVhU
c1JHQj4gbV9leHRzUkdCOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWM+IG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxFWFRTaGFkZXJUZXh0dXJlTE9EPiBtX2V4dFNoYWRlclRleHR1cmVMT0Q7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE9FU1RleHR1cmVGbG9hdD4gbV9vZXNUZXh0dXJlRmxvYXQ7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE9FU1RleHR1cmVGbG9hdExpbmVhcj4gbV9vZXNUZXh0dXJlRmxvYXRMaW5l
YXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU1RleHR1cmVIYWxmRmxvYXQ+IG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVh
cj4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNT
dGFuZGFyZERlcml2YXRpdmVzPiBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPE9FU1ZlcnRleEFycmF5T2JqZWN0PiBtX29lc1ZlcnRleEFycmF5T2JqZWN0Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNFbGVtZW50SW5kZXhVaW50PiBtX29lc0VsZW1lbnRJbmRl
eFVpbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMTG9zZUNvbnRleHQ+IG1fd2ViZ2xMb3Nl
Q29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbz4gbV93
ZWJnbERlYnVnUmVuZGVyZXJJbmZvOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlYnVnU2hh
ZGVycz4gbV93ZWJnbERlYnVnU2hhZGVyczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM+IG1fd2ViZ2xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViR0xEZXB0aFRleHR1cmU+IG1fd2ViZ2xEZXB0aFRleHR1cmU7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkdMRHJhd0J1ZmZlcnM+IG1fd2ViZ2xEcmF3QnVmZmVyczsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8QU5HTEVJbnN0YW5jZWRBcnJheXM+IG1fYW5nbGVJbnN0YW5jZWRBcnJheXM7Ci0KLSAg
ICAvLyBIZWxwZXJzIGZvciBnZXRQYXJhbWV0ZXIgYW5kIG90aGVycwotICAgIFdlYkdMR2V0SW5m
byBnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0Qm9v
bGVhbkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0RmxvYXRQ
YXJhbWV0ZXIoR0MzRGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRJbnRQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihHQzNEZW51
bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51
bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0p
OwotCi0gICAgLy8gQ2xlYXIgdGhlIGJhY2tidWZmZXIgaWYgaXQgd2FzIGNvbXBvc2l0ZWQgc2lu
Y2UgdGhlIGxhc3Qgb3BlcmF0aW9uLgotICAgIC8vIGNsZWFyTWFzayBpcyBzZXQgdG8gdGhlIGJp
dGZpZWxkIG9mIGFueSBjbGVhciB0aGF0IHdvdWxkIGhhcHBlbiBhbnl3YXkgYXQgdGhpcyB0aW1l
Ci0gICAgLy8gYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhhdCBjbGVhciBpcyBu
b3cgdW5uZWNlc3NhcnkuCi0gICAgYm9vbCBjbGVhcklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQg
Y2xlYXJNYXNrID0gMCk7Ci0KLSAgICAvLyBIZWxwZXIgdG8gcmVzdG9yZSBzdGF0ZSB0aGF0IGNs
ZWFyaW5nIHRoZSBmcmFtZWJ1ZmZlciBtYXkgZGVzdHJveS4KLSAgICB2b2lkIHJlc3RvcmVTdGF0
ZUFmdGVyQ2xlYXIoKTsKLQotICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBH
cmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkRC
YXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291
cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsK
LQotICAgIHZvaWQgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqLCBib29sKTsK
LQotICAgIHZvaWQgY3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7Ci0KLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gZm9yIGNvcHlUZXh7U3VifUltYWdlLCBjaGVjayB3aGV0aGVyIHRoZSBp
bnRlcm5hbGZvcm1hdAotICAgIC8vIGFuZCB0aGUgY29sb3IgYnVmZmVyIGZvcm1hdCBvZiB0aGUg
Y3VycmVudCBib3VuZCBmcmFtZWJ1ZmZlciBjb21iaW5hdGlvbgotICAgIC8vIGlzIHZhbGlkLgot
ICAgIGJvb2wgaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChH
QzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpOwot
Ci0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIncyBj
b2xvciBidWZmZXIgZm9ybWF0LgotICAgIEdDM0RlbnVtIGdldEJvdW5kRnJhbWVidWZmZXJDb2xv
ckZvcm1hdCgpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJh
bWVidWZmZXIncyB3aWR0aC4KLSAgICBpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCk7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGhl
aWdodC4KLSAgICBpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZlcmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aCBvZiB1bmlmb3JtIGFu
ZCBhdHRyaWJ1dGUgbG9jYXRpb25zLgotICAgIGJvb2wgdmFsaWRhdGVMb2NhdGlvbkxlbmd0aChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHNpemUgaXMgbm9uLW5lZ2F0aXZlLgotICAgIC8vIEdlbmVy
YXRlIEdMIGVycm9yIGFuZCByZXR1cm4gZmFsc2UgZm9yIG5lZ2F0aXZlIGlucHV0czsgb3RoZXJ3
aXNlLCByZXR1cm4gdHJ1ZS4KLSAgICBib29sIHZhbGlkYXRlU2l6ZShjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byBjaGVjayBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGJlbG9uZyB0byB0aGUK
LSAgICAvLyBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbiBHTFNMIEVTIDEuMCBzcGVjIHNlY3Rp
b24gMy4xLgotICAgIGJvb2wgdmFsaWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBTdHJpbmcmKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0YXJn
ZXQgYW5kIHRleHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KLSAgICAvLyBHZW5lcmF0ZSBHTCBl
cnJvcnMgYW5kIHJldHVybiAwIGlmIHRhcmdldCBpcyBpbnZhbGlkIG9yIHRleHR1cmUgYm91bmQg
aXMKLSAgICAvLyBudWxsLiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHRleHR1cmUgYm91bmQgdG8g
dGhlIHRhcmdldC4KLSAgICBXZWJHTFRleHR1cmUqIHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNG
b3JDdWJlTWFwKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBmb3Jt
YXQvdHlwZSBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCi0gICAgLy8gR2VuZXJh
dGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQu
Ci0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKTsK
LQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBmb3IgZnVuY3Rp
b25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCBy
ZXR1cm5zIGZhbHNlIGlmIGxldmVsIGlzIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1
bmNMZXZlbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCk7Ci0KLSAgICBlbnVtIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIHsKLSAg
ICAgICAgTm90VGV4U3ViSW1hZ2UyRCwKLSAgICAgICAgVGV4U3ViSW1hZ2UyRCwKLSAgICB9Owot
Ci0gICAgZW51bSBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgewotICAgICAgICBTb3VyY2VB
cnJheUJ1ZmZlclZpZXcsCi0gICAgICAgIFNvdXJjZUltYWdlRGF0YSwKLSAgICAgICAgU291cmNl
SFRNTEltYWdlRWxlbWVudCwKLSAgICAgICAgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsCi0gICAg
ICAgIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsCi0gICAgfTsKLQotICAgIC8vIEhlbHBlciBmdW5j
dGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIGNoZWNrIGlmIHRoZSBpbnB1dCBmb3JtYXQvdHlw
ZS9sZXZlbC90YXJnZXQvd2lkdGgvaGVpZ2h0L2JvcmRlci94b2Zmc2V0L3lvZmZzZXQgYXJlIHZh
bGlkLgotICAgIC8vIE90aGVyd2lzZSwgaXQgd291bGQgcmV0dXJuIHF1aWNrbHkgd2l0aG91dCBk
b2luZyBvdGhlciB3b3JrLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxpZGF0
aW9uU291cmNlVHlwZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLAotICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
Y2hlY2sgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2Uu
Ci0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRl
cnMgYXJlIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSk7Ci0KLSAgICBlbnVtIE51bGxEaXNwb3NpdGlv
biB7Ci0gICAgICAgIE51bGxBbGxvd2VkLAotICAgICAgICBOdWxsTm90QWxsb3dlZAotICAgIH07
Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZ2l2ZW4gQXJy
YXlCdWZmZXJWaWV3Ci0gICAgLy8gaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSBhbmQgY29udGFpbnMg
ZW5vdWdoIGRhdGEgZm9yIHRoZSB0ZXhJbWFnZSBjYWxsLgotICAgIC8vIEdlbmVyYXRlcyBHTCBl
cnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJv
b2wgdmFsaWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQg
bGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1
ZmZlclZpZXcqIHBpeGVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVsbERpc3Bv
c2l0aW9uKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhIGdpdmVuIHRl
eHR1cmUgZm9ybWF0IGlzIHNldHRhYmxlIGFzIGluCi0gICAgLy8geW91IGNhbiBzdXBwbHkgZGF0
YSB0byB0ZXhJbWFnZTJELCBvciBjYWxsIHRleEltYWdlMkQsIGNvcHlUZXhJbWFnZTJEIGFuZAot
ICAgIC8vIGNvcHlUZXhTdWJJbWFnZTJELgotICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQg
cmV0dXJucyBmYWxzZSBpZiB0aGUgZm9ybWF0IGlzIG5vdCBzZXR0YWJsZS4KLSAgICBib29sIHZh
bGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBmb3JtYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNz
ZWQgdGV4dHVyZSBkYXRhIGlzIGNvcnJlY3Qgc2l6ZQotICAgIC8vIGZvciB0aGUgZ2l2ZW4gZm9y
bWF0IGFuZCBkaW1lbnNpb25zLgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0Rh
dGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZl
clZpZXcqIHBpeGVscyk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcg
Y29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdHMuCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRU
ZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2
YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1cmUgZGltZW5zaW9ucyBhcmUgdmFsaWQgZm9yCi0gICAg
Ly8gdGhlIGdpdmVuIGZvcm1hdC4KLSAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVu
c2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1
cmUgZGltZW5zaW9ucyBhcmUgdmFsaWQgZm9yCi0gICAgLy8gdGhlIGdpdmVuIGZvcm1hdC4KLSAg
ICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgV2ViR0xUZXh0dXJlKik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUg
bW9kZSBmb3IgZHJhd3tBcnJheXMvRWxlbWVudHN9LgotICAgIGJvb2wgdmFsaWRhdGVEcmF3TW9k
ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSBpZiBmcm9udC9iYWNrIHN0ZW5jaWxNYXNrIGFuZCBzdGVuY2ls
RnVuYyBzZXR0aW5ncyBhcmUgdGhlIHNhbWUuCi0gICAgYm9vbCB2YWxpZGF0ZVN0ZW5jaWxTZXR0
aW5ncyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHZhbGlkYXRlIHN0ZW5jaWwgZnVuYy4KLSAgICBib29sIHZhbGlkYXRlU3RlbmNpbEZ1bmMo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIHRleFBhcmFtZXRlcmYgYW5kIHRleFBhcmFtZXRlcmkuCi0gICAgdm9pZCB0ZXhQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFt
aSwgR0MzRGludCBwYXJhbWYsIGJvb2wgaXNGbG9hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gcHJpbnQgR0wgZXJyb3JzIHRvIGNvbnNvbGUuCi0gICAgdm9pZCBwcmludEdMRXJyb3JU
b0NvbnNvbGUoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwcmludEdMV2FybmluZ1RvQ29uc29s
ZShjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogcmVhc29uKTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byBwcmludCB3YXJuaW5ncyB0byBjb25zb2xlLiBDdXJyZW50bHkKLSAg
ICAvLyB1c2VkIG9ubHkgdG8gd2FybiBhYm91dCB1c2Ugb2Ygb2Jzb2xldGUgZnVuY3Rpb25zLgot
ICAgIHZvaWQgcHJpbnRXYXJuaW5nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZyYW1lYnVm
ZmVyIGZ1bmN0aW9ucy4KLSAgICAvLyBHZW5lcmF0ZSBHTCBlcnJvciBpZiBwYXJhbWV0ZXJzIGFy
ZSBpbGxlZ2FsLgotICAgIGJvb2wgdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBlcXVhdGlv
biBtb2RlLgotICAgIGJvb2wgdmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRl
IGJsZW5kIGZ1bmMgZmFjdG9ycy4KLSAgICBib29sIHZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KTsKLQot
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhIEdMIGNhcGFiaWxpdHkuCi0gICAg
Ym9vbCB2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVy
cyBmb3IgdW5pZm9ybSBmdW5jdGlvbnMuCi0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
LCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiosIEludDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiosIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBtb2QpOwotICAgIGJv
b2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBG
bG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgdm9pZCosIEdDM0RzaXplaSwgR0Mz
RHNpemVpIG1vZCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgcGFyYW1l
dGVycyBmb3IgYnVmZmVyRGF0YS4KLSAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgYm91bmQgYnVm
ZmVyIHRvIHRhcmdldCwgb3IgMCBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIFdlYkdM
QnVmZmVyKiB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSk7Ci0KLSAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkg
YW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KLSAgICBib29sIHZhbGlkYXRlSFRNTEltYWdlRWxl
bWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0
byBtYWtlIHN1cmUgY2FudmFzIGlzIHJlYWR5IGFuZCB3b3VsZG4ndCB0YWludCBPcmlnaW4uCi0g
ICAgYm9vbCB2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSNpZiBFTkFCTEUoVklE
RU8pCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBz
dXJlIHZpZGVvIGlzIHJlYWR5IHdvdWxkbid0IHRhaW50IE9yaWdpbi4KLSAgICBib29sIHZhbGlk
YXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxWaWRlb0Vs
ZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jZW5kaWYKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
bnMgZm9yIHZlcnRleEF0dHJpYk5me3Z9LgotICAgIHZvaWQgdmVydGV4QXR0cmliZkltcGwoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVk
U2l6ZSwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KTsKLSAgICB2
b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50
IGluZGV4LCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKLSAgICB2b2lk
IHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwotCi0g
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBkZWxldGUqIChkZWxldGVCdWZmZXIsIGRlbGV0ZVBy
b2dyYW0sIGV0YykgZnVuY3Rpb25zLgotICAgIC8vIFJldHVybiBmYWxzZSBpZiBjYWxsZXIgc2hv
dWxkIHJldHVybiB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4KLSAgICBib29sIGRlbGV0ZU9i
amVjdChXZWJHTE9iamVjdCopOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBiaW5kKiAo
YmluZEJ1ZmZlciwgYmluZFRleHR1cmUsIGV0YykgYW5kIHVzZVByb2dyYW0uCi0gICAgLy8gSWYg
dGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGRlbGV0ZWQsIHNldCBkZWxldGVkIHRvIHRydWUg
dXBvbiByZXR1cm4uCi0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJu
IHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLgotICAgIGJvb2wgY2hlY2tPYmplY3RUb0JlQm91
bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCosIGJvb2wmIGRlbGV0ZWQp
OwotCi0gICAgLy8gSGVscGVycyBmb3Igc2ltdWxhdGluZyB2ZXJ0ZXhBdHRyaWIwCi0gICAgdm9p
ZCBpbml0VmVydGV4QXR0cmliMCgpOwotICAgIGJvb2wgc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdD
M0RzaXplaSBudW1WZXJ0ZXgpOwotICAgIHZvaWQgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0
cmliMFNpbXVsYXRpb24oKTsKLQotICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCk7
Ci0gICAgLy8gSGVscGVyIGZvciByZXN0b3JhdGlvbiBhZnRlciBjb250ZXh0IGxvc3QuCi0gICAg
dm9pZCBtYXliZVJlc3RvcmVDb250ZXh0KCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgaWYgd2UgYXJl
IHJ1bm5pbmcgcHJpdmlsZWdlZCBjb2RlIGluIHRoZSBicm93c2VyLCBmb3IgZXhhbXBsZSwKLSAg
ICAvLyBhIFNhZmFyaSBvciBDaHJvbWUgZXh0ZW5zaW9uLgotICAgIGJvb2wgYWxsb3dQcml2aWxl
Z2VkRXh0ZW5zaW9ucygpIGNvbnN0OwotCi0gICAgZW51bSBDb25zb2xlRGlzcGxheVByZWZlcmVu
Y2UgewotICAgICAgICBEaXNwbGF5SW5Db25zb2xlLAotICAgICAgICBEb250RGlzcGxheUluQ29u
c29sZQotICAgIH07Ci0KLSAgICAvLyBXcmFwcGVyIGZvciBHcmFwaGljc0NvbnRleHQzRDo6c3lu
dGhlc2l6ZUdMRXJyb3IgdGhhdCBzZW5kcyBhIG1lc3NhZ2UKLSAgICAvLyB0byB0aGUgSmF2YVNj
cmlwdCBjb25zb2xlLgotICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0sIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNw
bGF5UHJlZmVyZW5jZSA9IERpc3BsYXlJbkNvbnNvbGUpOwotCi0gICAgU3RyaW5nIGVuc3VyZU5v
dE51bGwoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0KLSAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBz
dGVuY2lsIHRlc3QgYmFzZWQgb24gdXNlciBzZXR0aW5nIGFuZAotICAgIC8vIHdoZXRoZXIgdGhl
IGN1cnJlbnQgRkJPIGhhcyBhIHN0ZW5jaWwgYnVmZmVyLgotICAgIHZvaWQgYXBwbHlTdGVuY2ls
VGVzdCgpOwotCi0gICAgLy8gSGVscGVyIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYSBjYXBh
YmlsaXR5LgotICAgIHZvaWQgZW5hYmxlT3JEaXNhYmxlKEdDM0RlbnVtIGNhcGFiaWxpdHksIGJv
b2wgZW5hYmxlKTsKLQotICAgIC8vIENsYW1wIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIEdMX01B
WF9WSUVXUE9SVF9ESU1TLgotICAgIEludFNpemUgY2xhbXBlZENhbnZhc1NpemUoKTsKLQotICAg
IC8vIEZpcnN0IHRpbWUgY2FsbGVkLCBpZiBFWFRfZHJhd19idWZmZXJzIGlzIHN1cHBvcnRlZCwg
cXVlcnkgdGhlIHZhbHVlOyBvdGhlcndpc2UgcmV0dXJuIDAuCi0gICAgLy8gTGF0ZXIsIHJldHVy
biB0aGUgY2FjaGVkIHZhbHVlLgotICAgIEdDM0RpbnQgZ2V0TWF4RHJhd0J1ZmZlcnMoKTsKLSAg
ICBHQzNEaW50IGdldE1heENvbG9yQXR0YWNobWVudHMoKTsKLQotICAgIHZvaWQgc2V0QmFja0Ry
YXdCdWZmZXIoR0MzRGVudW0pOwotCi0gICAgdm9pZCByZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVy
KCk7Ci0gICAgdm9pZCByZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpOwotCi0gICAgLy8gQ2hlY2sg
aWYgRVhUX2RyYXdfYnVmZmVycyBleHRlbnNpb24gaXMgc3VwcG9ydGVkIGFuZCBpZiBpdCBzYXRp
c2ZpZXMgdGhlIFdlYkdMIHJlcXVpcmVtZW50cy4KLSAgICBib29sIHN1cHBvcnRzRHJhd0J1ZmZl
cnMoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5p
ZGwJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNjc3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotdHlwZWRlZiB1bnNp
Z25lZCBsb25nICBHTGVudW07Ci10eXBlZGVmIGJvb2xlYW4gICAgICAgIEdMYm9vbGVhbjsKLXR5
cGVkZWYgdW5zaWduZWQgbG9uZyAgR0xiaXRmaWVsZDsKLXR5cGVkZWYgYnl0ZSAgICAgICAgICAg
R0xieXRlOyAgICAgICAgIC8qICdieXRlJyBzaG91bGQgYmUgYSBzaWduZWQgOCBiaXQgdHlwZS4g
Ki8KLXR5cGVkZWYgc2hvcnQgICAgICAgICAgR0xzaG9ydDsKLXR5cGVkZWYgbG9uZyAgICAgICAg
ICAgR0xpbnQ7Ci10eXBlZGVmIGxvbmcgICAgICAgICAgIEdMc2l6ZWk7Ci10eXBlZGVmIGxvbmcg
bG9uZyAgICAgIEdMaW50cHRyOwotdHlwZWRlZiBsb25nIGxvbmcgICAgICBHTHNpemVpcHRyOwot
dHlwZWRlZiBvY3RldCAgICAgICAgICBHTHVieXRlOyAgICAgICAgLyogJ29jdGV0JyBzaG91bGQg
YmUgYW4gdW5zaWduZWQgOCBiaXQgdHlwZS4gKi8KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgR0x1
c2hvcnQ7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMdWludDsKLXR5cGVkZWYgdW5yZXN0cmlj
dGVkIGZsb2F0IEdMZmxvYXQ7Ci10eXBlZGVmIHVucmVzdHJpY3RlZCBmbG9hdCBHTGNsYW1wZjsK
LQotWwotICAgIENvbmRpdGlvbmFsPVdFQkdMLAotICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAot
ICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi1dIGludGVyZmFjZSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKLQotICAgIC8qIENsZWFyQnVmZmVyTWFzayAq
LwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgPSAweDAw
MDAwMTAwOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JVRkZFUl9CSVQgICAgICAgICAgICAg
PSAweDAwMDAwNDAwOwotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9CVUZGRVJfQklUICAgICAgICAg
ICAgICAgPSAweDAwMDA0MDAwOwotCi0gICAgLyogQmVnaW5Nb2RlICovCi0gICAgY29uc3QgR0xl
bnVtIFBPSU5UUyAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDsKLSAgICBjb25zdCBH
TGVudW0gTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAxOwotICAgIGNvbnN0
IEdMZW51bSBMSU5FX0xPT1AgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDI7Ci0gICAgY29u
c3QgR0xlbnVtIExJTkVfU1RSSVAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMzsKLSAgICBj
b25zdCBHTGVudW0gVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA0OwotICAg
IGNvbnN0IEdMZW51bSBUUklBTkdMRV9TVFJJUCAgICAgICAgICAgICAgICAgPSAweDAwMDU7Ci0g
ICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX0ZBTiAgICAgICAgICAgICAgICAgICA9IDB4MDAwNjsK
LQotICAgIC8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi8KLSAgICAv
KiAgICAgIE5FVkVSICovCi0gICAgLyogICAgICBMRVNTICovCi0gICAgLyogICAgICBFUVVBTCAq
LwotICAgIC8qICAgICAgTEVRVUFMICovCi0gICAgLyogICAgICBHUkVBVEVSICovCi0gICAgLyog
ICAgICBOT1RFUVVBTCAqLwotICAgIC8qICAgICAgR0VRVUFMICovCi0gICAgLyogICAgICBBTFdB
WVMgKi8KLQotICAgIC8qIEJsZW5kaW5nRmFjdG9yRGVzdCAqLwotICAgIGNvbnN0IEdMZW51bSBa
RVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOwotICAgIGNvbnN0IEdMZW51bSBPTkUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxOwotICAgIGNvbnN0IEdMZW51bSBTUkNfQ09M
T1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDA7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9N
SU5VU19TUkNfQ09MT1IgICAgICAgICAgICA9IDB4MDMwMTsKLSAgICBjb25zdCBHTGVudW0gU1JD
X0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzAyOwotICAgIGNvbnN0IEdMZW51bSBP
TkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgPSAweDAzMDM7Ci0gICAgY29uc3QgR0xlbnVt
IERTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwNDsKLSAgICBjb25zdCBHTGVu
dW0gT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgID0gMHgwMzA1OwotCi0gICAgLyogQmxl
bmRpbmdGYWN0b3JTcmMgKi8KLSAgICAvKiAgICAgIFpFUk8gKi8KLSAgICAvKiAgICAgIE9ORSAq
LwotICAgIGNvbnN0IEdMZW51bSBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAz
MDY7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19EU1RfQ09MT1IgICAgICAgICAgICA9IDB4
MDMwNzsKLSAgICBjb25zdCBHTGVudW0gU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgID0g
MHgwMzA4OwotICAgIC8qICAgICAgU1JDX0FMUEhBICovCi0gICAgLyogICAgICBPTkVfTUlOVVNf
U1JDX0FMUEhBICovCi0gICAgLyogICAgICBEU1RfQUxQSEEgKi8KLSAgICAvKiAgICAgIE9ORV9N
SU5VU19EU1RfQUxQSEEgKi8KLQotICAgIC8qIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAqLwotICAg
IGNvbnN0IEdMZW51bSBGVU5DX0FERCAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwMDY7Ci0g
ICAgY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OICAgICAgICAgICAgICAgICA9IDB4ODAwOTsK
LSAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAgID0gMHg4MDA5
OyAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KLSAgICBjb25zdCBHTGVudW0gQkxFTkRf
RVFVQVRJT05fQUxQSEEgICAgICAgICAgID0gMHg4ODNEOwotCi0gICAgLyogQmxlbmRTdWJ0cmFj
dCAqLwotICAgIGNvbnN0IEdMZW51bSBGVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgPSAw
eDgwMEE7Ci0gICAgY29uc3QgR0xlbnVtIEZVTkNfUkVWRVJTRV9TVUJUUkFDVCAgICAgICAgICA9
IDB4ODAwQjsKLQotICAgIC8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLwotICAgIGNvbnN0
IEdMZW51bSBCTEVORF9EU1RfUkdCICAgICAgICAgICAgICAgICAgPSAweDgwQzg7Ci0gICAgY29u
c3QgR0xlbnVtIEJMRU5EX1NSQ19SR0IgICAgICAgICAgICAgICAgICA9IDB4ODBDOTsKLSAgICBj
b25zdCBHTGVudW0gQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgID0gMHg4MENBOwotICAg
IGNvbnN0IEdMZW51bSBCTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgPSAweDgwQ0I7Ci0g
ICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICA9IDB4ODAwMTsK
LSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgID0gMHg4MDAy
OwotICAgIGNvbnN0IEdMZW51bSBDT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgPSAweDgw
MDM7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAgICAgICA9IDB4
ODAwNDsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgID0g
MHg4MDA1OwotCi0gICAgLyogQnVmZmVyIE9iamVjdHMgKi8KLSAgICBjb25zdCBHTGVudW0gQVJS
QVlfQlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4ODkyOwotICAgIGNvbnN0IEdMZW51bSBF
TEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgPSAweDg4OTM7Ci0gICAgY29uc3QgR0xlbnVt
IEFSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4ODg5NDsKLSAgICBjb25zdCBHTGVu
dW0gRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyAgID0gMHg4ODk1OwotCi0gICAgY29uc3Qg
R0xlbnVtIFNUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAgICA9IDB4ODhFMDsKLSAgICBjb25z
dCBHTGVudW0gU1RBVElDX0RSQVcgICAgICAgICAgICAgICAgICAgID0gMHg4OEU0OwotICAgIGNv
bnN0IEdMZW51bSBEWU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgPSAweDg4RTg7Ci0KLSAg
ICBjb25zdCBHTGVudW0gQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgID0gMHg4NzY0Owot
ICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfVVNBR0UgICAgICAgICAgICAgICAgICAgPSAweDg3NjU7
Ci0KLSAgICBjb25zdCBHTGVudW0gQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAgID0gMHg4
NjI2OwotCi0gICAgLyogQ3VsbEZhY2VNb2RlICovCi0gICAgY29uc3QgR0xlbnVtIEZST05UICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNDsKLSAgICBjb25zdCBHTGVudW0gQkFDSyAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA1OwotICAgIGNvbnN0IEdMZW51bSBGUk9O
VF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgPSAweDA0MDg7Ci0KLSAgICAvKiBEZXB0aEZ1bmN0
aW9uICovCi0gICAgLyogICAgICBORVZFUiAqLwotICAgIC8qICAgICAgTEVTUyAqLwotICAgIC8q
ICAgICAgRVFVQUwgKi8KLSAgICAvKiAgICAgIExFUVVBTCAqLwotICAgIC8qICAgICAgR1JFQVRF
UiAqLwotICAgIC8qICAgICAgTk9URVFVQUwgKi8KLSAgICAvKiAgICAgIEdFUVVBTCAqLwotICAg
IC8qICAgICAgQUxXQVlTICovCi0KLSAgICAvKiBFbmFibGVDYXAgKi8KLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgID0gMHgwREUxOwotICAgIGNvbnN0IEdM
ZW51bSBDVUxMX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgPSAweDBCNDQ7Ci0gICAgY29uc3Qg
R0xlbnVtIEJMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJFMjsKLSAgICBjb25z
dCBHTGVudW0gRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkQwOwotICAgIGNv
bnN0IEdMZW51bSBTVEVOQ0lMX1RFU1QgICAgICAgICAgICAgICAgICAgPSAweDBCOTA7Ci0gICAg
Y29uc3QgR0xlbnVtIERFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICA9IDB4MEI3MTsKLSAg
ICBjb25zdCBHTGVudW0gU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgID0gMHgwQzExOwot
ICAgIGNvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9GSUxMICAgICAgICAgICAgPSAweDgwMzc7
Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICA9IDB4ODA5
RTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgID0gMHg4
MEEwOwotCi0gICAgLyogRXJyb3JDb2RlICovCi0gICAgY29uc3QgR0xlbnVtIE5PX0VSUk9SICAg
ICAgICAgICAgICAgICAgICAgICA9IDA7Ci0gICAgY29uc3QgR0xlbnVtIElOVkFMSURfRU5VTSAg
ICAgICAgICAgICAgICAgICA9IDB4MDUwMDsKLSAgICBjb25zdCBHTGVudW0gSU5WQUxJRF9WQUxV
RSAgICAgICAgICAgICAgICAgID0gMHgwNTAxOwotICAgIGNvbnN0IEdMZW51bSBJTlZBTElEX09Q
RVJBVElPTiAgICAgICAgICAgICAgPSAweDA1MDI7Ci0gICAgY29uc3QgR0xlbnVtIE9VVF9PRl9N
RU1PUlkgICAgICAgICAgICAgICAgICA9IDB4MDUwNTsKLQotICAgIC8qIEZyb250RmFjZURpcmVj
dGlvbiAqLwotICAgIGNvbnN0IEdMZW51bSBDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDA5MDA7Ci0gICAgY29uc3QgR0xlbnVtIENDVyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDkwMTsKLQotICAgIC8qIEdldFBOYW1lICovCi0gICAgY29uc3QgR0xlbnVtIExJTkVf
V0lEVEggICAgICAgICAgICAgICAgICAgICA9IDB4MEIyMTsKLSAgICBjb25zdCBHTGVudW0gQUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgID0gMHg4NDZEOwotICAgIGNvbnN0IEdMZW51bSBB
TElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgPSAweDg0NkU7Ci0gICAgY29uc3QgR0xlbnVt
IENVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICA9IDB4MEI0NTsKLSAgICBjb25zdCBHTGVu
dW0gRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgID0gMHgwQjQ2OwotICAgIGNvbnN0IEdM
ZW51bSBERVBUSF9SQU5HRSAgICAgICAgICAgICAgICAgICAgPSAweDBCNzA7Ci0gICAgY29uc3Qg
R0xlbnVtIERFUFRIX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEI3MjsKLSAgICBjb25z
dCBHTGVudW0gREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQjczOwotICAgIGNv
bnN0IEdMZW51bSBERVBUSF9GVU5DICAgICAgICAgICAgICAgICAgICAgPSAweDBCNzQ7Ci0gICAg
Y29uc3QgR0xlbnVtIFNURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICA9IDB4MEI5MTsKLSAg
ICBjb25zdCBHTGVudW0gU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgID0gMHgwQjkyOwot
ICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgPSAweDBCOTQ7
Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICA9IDB4MEI5
NTsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgID0gMHgw
Qjk2OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1JFRiAgICAgICAgICAgICAgICAgICAgPSAw
eDBCOTc7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVkFMVUVfTUFTSyAgICAgICAgICAgICA9
IDB4MEI5MzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAg
ID0gMHgwQjk4OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAgICAg
ICAgPSAweDg4MDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19GQUlMICAgICAgICAg
ICAgICA9IDB4ODgwMTsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhf
RkFJTCAgID0gMHg4ODAyOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBU
SF9QQVNTICAgPSAweDg4MDM7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19SRUYgICAg
ICAgICAgICAgICA9IDB4OENBMzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1ZBTFVF
X01BU0sgICAgICAgID0gMHg4Q0E0OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLICAgICAgICAgPSAweDhDQTU7Ci0gICAgY29uc3QgR0xlbnVtIFZJRVdQT1JUICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MEJBMjsKLSAgICBjb25zdCBHTGVudW0gU0NJU1NPUl9CT1gg
ICAgICAgICAgICAgICAgICAgID0gMHgwQzEwOwotICAgIC8qICAgICAgU0NJU1NPUl9URVNUICov
Ci0gICAgY29uc3QgR0xlbnVtIENPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4MEMy
MjsKLSAgICBjb25zdCBHTGVudW0gQ09MT1JfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0gMHgw
QzIzOwotICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgPSAw
eDBDRjU7Ci0gICAgY29uc3QgR0xlbnVtIFBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICA9
IDB4MEQwNTsKLSAgICBjb25zdCBHTGVudW0gTUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAg
ID0gMHgwRDMzOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAg
ICAgPSAweDBEM0E7Ci0gICAgY29uc3QgR0xlbnVtIFNVQlBJWEVMX0JJVFMgICAgICAgICAgICAg
ICAgICA9IDB4MEQ1MDsKLSAgICBjb25zdCBHTGVudW0gUkVEX0JJVFMgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwRDUyOwotICAgIGNvbnN0IEdMZW51bSBHUkVFTl9CSVRTICAgICAgICAgICAg
ICAgICAgICAgPSAweDBENTM7Ci0gICAgY29uc3QgR0xlbnVtIEJMVUVfQklUUyAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEQ1NDsKLSAgICBjb25zdCBHTGVudW0gQUxQSEFfQklUUyAgICAgICAg
ICAgICAgICAgICAgID0gMHgwRDU1OwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9CSVRTICAgICAg
ICAgICAgICAgICAgICAgPSAweDBENTY7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQklUUyAg
ICAgICAgICAgICAgICAgICA9IDB4MEQ1NzsKLSAgICBjb25zdCBHTGVudW0gUE9MWUdPTl9PRkZT
RVRfVU5JVFMgICAgICAgICAgID0gMHgyQTAwOwotICAgIC8qICAgICAgUE9MWUdPTl9PRkZTRVRf
RklMTCAqLwotICAgIGNvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9GQUNUT1IgICAgICAgICAg
PSAweDgwMzg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQklORElOR18yRCAgICAgICAgICAg
ICA9IDB4ODA2OTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAg
ICAgID0gMHg4MEE4OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVTICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDgwQTk7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRV9WQUxVRSAg
ICAgICAgICA9IDB4ODBBQTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFX0lOVkVS
VCAgICAgICAgID0gMHg4MEFCOwotCi0gICAgLyogR2V0VGV4dHVyZVBhcmFtZXRlciAqLwotICAg
IC8qICAgICAgVEVYVFVSRV9NQUdfRklMVEVSICovCi0gICAgLyogICAgICBURVhUVVJFX01JTl9G
SUxURVIgKi8KLSAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9TICovCi0gICAgLyogICAgICBURVhU
VVJFX1dSQVBfVCAqLwotCi0gICAgY29uc3QgR0xlbnVtIENPTVBSRVNTRURfVEVYVFVSRV9GT1JN
QVRTICAgICA9IDB4ODZBMzsKLQotICAgIC8qIEhpbnRNb2RlICovCi0gICAgY29uc3QgR0xlbnVt
IERPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMDsKLSAgICBjb25zdCBHTGVu
dW0gRkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAxOwotICAgIGNvbnN0IEdM
ZW51bSBOSUNFU1QgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDI7Ci0KLSAgICAvKiBI
aW50VGFyZ2V0ICovCi0gICAgY29uc3QgR0xlbnVtIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAg
ICAgICAgPSAweDgxOTI7Ci0KLSAgICAvKiBEYXRhVHlwZSAqLwotICAgIGNvbnN0IEdMZW51bSBC
WVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDA7Ci0gICAgY29uc3QgR0xlbnVt
IFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA9IDB4MTQwMTsKLSAgICBjb25zdCBHTGVu
dW0gU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAyOwotICAgIGNvbnN0IEdM
ZW51bSBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgPSAweDE0MDM7Ci0gICAgY29uc3Qg
R0xlbnVtIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwNDsKLSAgICBjb25z
dCBHTGVudW0gVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgID0gMHgxNDA1OwotICAgIGNv
bnN0IEdMZW51bSBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDY7Ci0KLSAg
ICAvKiBQaXhlbEZvcm1hdCAqLwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DT01QT05FTlQgICAg
ICAgICAgICAgICAgPSAweDE5MDI7Ci0gICAgY29uc3QgR0xlbnVtIEFMUEhBICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MTkwNjsKLSAgICBjb25zdCBHTGVudW0gUkdCICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgxOTA3OwotICAgIGNvbnN0IEdMZW51bSBSR0JBICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDE5MDg7Ci0gICAgY29uc3QgR0xlbnVtIExVTUlOQU5DRSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MTkwOTsKLSAgICBjb25zdCBHTGVudW0gTFVNSU5BTkNF
X0FMUEhBICAgICAgICAgICAgICAgID0gMHgxOTBBOwotCi0gICAgLyogUGl4ZWxUeXBlICovCi0g
ICAgLyogICAgICBVTlNJR05FRF9CWVRFICovCi0gICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NI
T1JUXzRfNF80XzQgICAgICAgICA9IDB4ODAzMzsKLSAgICBjb25zdCBHTGVudW0gVU5TSUdORURf
U0hPUlRfNV81XzVfMSAgICAgICAgID0gMHg4MDM0OwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05F
RF9TSE9SVF81XzZfNSAgICAgICAgICAgPSAweDgzNjM7Ci0KLSAgICAvKiBTaGFkZXJzICovCi0g
ICAgY29uc3QgR0xlbnVtIEZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgID0gMHg4QjMw
OwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAgICA9IDB4
OEIzMTsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAgICAg
PSAweDg4Njk7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAg
ICAgID0gMHg4REZCOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkFSWUlOR19WRUNUT1JTICAgICAg
ICAgICAgICA9IDB4OERGQzsKLSAgICBjb25zdCBHTGVudW0gTUFYX0NPTUJJTkVEX1RFWFRVUkVf
SU1BR0VfVU5JVFMgPSAweDhCNEQ7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUUyAgID0gMHg4QjRDOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyAgICAgICAgICA9IDB4ODg3MjsKLSAgICBjb25zdCBHTGVudW0gTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgPSAweDhERkQ7Ci0gICAgY29uc3QgR0xlbnVtIFNIQURF
Ul9UWVBFICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjRGOwotICAgIGNvbnN0IEdMZW51bSBE
RUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICA9IDB4OEI4MDsKLSAgICBjb25zdCBHTGVu
dW0gTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCODI7Ci0gICAgY29uc3Qg
R0xlbnVtIFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgID0gMHg4QjgzOwotICAgIGNv
bnN0IEdMZW51bSBBVFRBQ0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICA9IDB4OEI4NTsKLSAg
ICBjb25zdCBHTGVudW0gQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgICAgPSAweDhCODY7
Ci0gICAgY29uc3QgR0xlbnVtIEFDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgID0gMHg4
Qjg5OwotICAgIGNvbnN0IEdMZW51bSBTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gICAgICAgICA9
IDB4OEI4QzsKLSAgICBjb25zdCBHTGVudW0gQ1VSUkVOVF9QUk9HUkFNICAgICAgICAgICAgICAg
ICAgPSAweDhCOEQ7Ci0KLSAgICAvKiBTdGVuY2lsRnVuY3Rpb24gKi8KLSAgICBjb25zdCBHTGVu
dW0gTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAwOwotICAgIGNvbnN0IEdM
ZW51bSBMRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDE7Ci0gICAgY29uc3Qg
R0xlbnVtIEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMjsKLSAgICBjb25z
dCBHTGVudW0gTEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAzOwotICAgIGNv
bnN0IEdMZW51bSBHUkVBVEVSICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDQ7Ci0gICAg
Y29uc3QgR0xlbnVtIE5PVEVRVUFMICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNTsKLSAg
ICBjb25zdCBHTGVudW0gR0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjA2Owot
ICAgIGNvbnN0IEdMZW51bSBBTFdBWVMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDc7
Ci0KLSAgICAvKiBTdGVuY2lsT3AgKi8KLSAgICAvKiAgICAgIFpFUk8gKi8KLSAgICBjb25zdCBH
TGVudW0gS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAwOwotICAgIGNvbnN0
IEdMZW51bSBSRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDE7Ci0gICAgY29u
c3QgR0xlbnVtIElOQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMjsKLSAgICBj
b25zdCBHTGVudW0gREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAzOwotICAg
IGNvbnN0IEdMZW51bSBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE1MEE7Ci0g
ICAgY29uc3QgR0xlbnVtIElOQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODUwNzsK
LSAgICBjb25zdCBHTGVudW0gREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0gMHg4NTA4
OwotCi0gICAgLyogU3RyaW5nTmFtZSAqLwotICAgIGNvbnN0IEdMZW51bSBWRU5ET1IgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDFGMDA7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkVSICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMTsKLSAgICBjb25zdCBHTGVudW0gVkVSU0lPTiAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAyOwotCi0gICAgLyogVGV4dHVyZU1hZ0ZpbHRl
ciAqLwotICAgIGNvbnN0IEdMZW51bSBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDI2MDA7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MjYwMTsKLQotICAgIC8qIFRleHR1cmVNaW5GaWx0ZXIgKi8KLSAgICAvKiAgICAgIE5FQVJF
U1QgKi8KLSAgICAvKiAgICAgIExJTkVBUiAqLwotICAgIGNvbnN0IEdMZW51bSBORUFSRVNUX01J
UE1BUF9ORUFSRVNUICAgICAgICAgPSAweDI3MDA7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVBUl9N
SVBNQVBfTkVBUkVTVCAgICAgICAgICA9IDB4MjcwMTsKLSAgICBjb25zdCBHTGVudW0gTkVBUkVT
VF9NSVBNQVBfTElORUFSICAgICAgICAgID0gMHgyNzAyOwotICAgIGNvbnN0IEdMZW51bSBMSU5F
QVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgPSAweDI3MDM7Ci0KLSAgICAvKiBUZXh0dXJlUGFy
YW1ldGVyTmFtZSAqLwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX01BR19GSUxURVIgICAgICAg
ICAgICAgPSAweDI4MDA7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfTUlOX0ZJTFRFUiAgICAg
ICAgICAgICA9IDB4MjgwMTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9XUkFQX1MgICAgICAg
ICAgICAgICAgID0gMHgyODAyOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX1dSQVBfVCAgICAg
ICAgICAgICAgICAgPSAweDI4MDM7Ci0KLSAgICAvKiBUZXh0dXJlVGFyZ2V0ICovCi0gICAgLyog
ICAgICBURVhUVVJFXzJEICovCi0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MTcwMjsKLQotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQ
ICAgICAgICAgICAgICAgPSAweDg1MTM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQklORElO
R19DVUJFX01BUCAgICAgICA9IDB4ODUxNDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YICAgID0gMHg4NTE1OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1ggICAgPSAweDg1MTY7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWSAgICA9IDB4ODUxNzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZICAgID0gMHg4NTE4OwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogICAgPSAweDg1MTk7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA9IDB4ODUxQTsKLSAgICBjb25zdCBHTGVudW0g
TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgID0gMHg4NTFDOwotCi0gICAgLyogVGV4dHVy
ZVVuaXQgKi8KLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEMwOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMSAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0QzE7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRDMjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTMgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEMzOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFNCAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0QzQ7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU1ICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODRDNTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTYgICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEM2OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFNyAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0Qzc7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU4ICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODRDODsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTkgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEM5OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0E7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUx
MSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RTEyICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENDOwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFMTMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Q7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkUxNCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRTsKLSAgICBjb25zdCBHTGVudW0g
VEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENGOwotICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDA7Ci0gICAgY29uc3QgR0xl
bnVtIFRFWFRVUkUxNyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMTsKLSAgICBjb25zdCBH
TGVudW0gVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQyOwotICAgIGNvbnN0
IEdMZW51bSBURVhUVVJFMTkgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDM7Ci0gICAgY29u
c3QgR0xlbnVtIFRFWFRVUkUyMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENDsKLSAgICBj
b25zdCBHTGVudW0gVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ1OwotICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDY7Ci0g
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENzsK
LSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ4
OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
RDk7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNiAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODREQTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NERCOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAg
PSAweDg0REM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyOSAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODRERDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTMwICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NERFOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMzEgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0REY7Ci0gICAgY29uc3QgR0xlbnVtIEFDVElWRV9URVhUVVJFICAgICAgICAg
ICAgICAgICA9IDB4ODRFMDsKLQotICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqLwotICAgIGNvbnN0
IEdMZW51bSBSRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI5MDE7Ci0gICAgY29u
c3QgR0xlbnVtIENMQU1QX1RPX0VER0UgICAgICAgICAgICAgICAgICA9IDB4ODEyRjsKLSAgICBj
b25zdCBHTGVudW0gTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgID0gMHg4MzcwOwotCi0g
ICAgLyogVW5pZm9ybSBUeXBlcyAqLwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9WRUMyICAgICAg
ICAgICAgICAgICAgICAgPSAweDhCNTA7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX1ZFQzMgICAg
ICAgICAgICAgICAgICAgICA9IDB4OEI1MTsKLSAgICBjb25zdCBHTGVudW0gRkxPQVRfVkVDNCAg
ICAgICAgICAgICAgICAgICAgID0gMHg4QjUyOwotICAgIGNvbnN0IEdMZW51bSBJTlRfVkVDMiAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTM7Ci0gICAgY29uc3QgR0xlbnVtIElOVF9WRUMz
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NDsKLSAgICBjb25zdCBHTGVudW0gSU5UX1ZF
QzQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU1OwotICAgIGNvbnN0IEdMZW51bSBCT09M
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTY7Ci0gICAgY29uc3QgR0xlbnVtIEJP
T0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NzsKLSAgICBjb25zdCBHTGVudW0g
Qk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU4OwotICAgIGNvbnN0IEdMZW51
bSBCT09MX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTk7Ci0gICAgY29uc3QgR0xl
bnVtIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QTsKLSAgICBjb25zdCBH
TGVudW0gRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVCOwotICAgIGNvbnN0
IEdMZW51bSBGTE9BVF9NQVQ0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUM7Ci0gICAgY29u
c3QgR0xlbnVtIFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1RTsKLSAgICBj
b25zdCBHTGVudW0gU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgID0gMHg4QjYwOwotCi0g
ICAgLyogVmVydGV4IEFycmF5cyAqLwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FS
UkFZX0VOQUJMRUQgICAgICAgID0gMHg4NjIyOwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRU
UklCX0FSUkFZX1NJWkUgICAgICAgICAgID0gMHg4NjIzOwotICAgIGNvbnN0IEdMZW51bSBWRVJU
RVhfQVRUUklCX0FSUkFZX1NUUklERSAgICAgICAgID0gMHg4NjI0OwotICAgIGNvbnN0IEdMZW51
bSBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgID0gMHg4NjI1OwotICAgIGNvbnN0
IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQgICAgID0gMHg4ODZBOwotICAg
IGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgICAgICAgID0gMHg4NjQ1
OwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HID0g
MHg4ODlGOwotCi0gICAgLyogU2hhZGVyIFNvdXJjZSAqLwotICAgIGNvbnN0IEdMZW51bSBDT01Q
SUxFX1NUQVRVUyAgICAgICAgICAgICAgICAgPSAweDhCODE7Ci0KLSAgICAvKiBTaGFkZXIgUHJl
Y2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLwotICAgIGNvbnN0IEdMZW51bSBMT1dfRkxPQVQgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhERjA7Ci0gICAgY29uc3QgR0xlbnVtIE1FRElVTV9GTE9B
VCAgICAgICAgICAgICAgICAgICA9IDB4OERGMTsKLSAgICBjb25zdCBHTGVudW0gSElHSF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgID0gMHg4REYyOwotICAgIGNvbnN0IEdMZW51bSBMT1dfSU5U
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjM7Ci0gICAgY29uc3QgR0xlbnVtIE1FRElV
TV9JTlQgICAgICAgICAgICAgICAgICAgICA9IDB4OERGNDsKLSAgICBjb25zdCBHTGVudW0gSElH
SF9JTlQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REY1OwotCi0gICAgLyogRnJhbWVidWZm
ZXIgT2JqZWN0LiAqLwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUiAgICAgICAgICAgICAg
ICAgICAgPSAweDhENDA7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUiAgICAgICAgICAg
ICAgICAgICA9IDB4OEQ0MTsKLQotICAgIGNvbnN0IEdMZW51bSBSR0JBNCAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDgwNTY7Ci0gICAgY29uc3QgR0xlbnVtIFJHQjVfQTEgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODA1NzsKLSAgICBjb25zdCBHTGVudW0gUkdCNTY1ICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4RDYyOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DT01QT05F
TlQxNiAgICAgICAgICAgICAgPSAweDgxQTU7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfSU5E
RVggICAgICAgICAgICAgICAgICA9IDB4MTkwMTsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9J
TkRFWDggICAgICAgICAgICAgICAgID0gMHg4RDQ4OwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9T
VEVOQ0lMICAgICAgICAgICAgICAgICAgPSAweDg0Rjk7Ci0KLSAgICBjb25zdCBHTGVudW0gU1JH
Ql9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhDNDA7Ci0gICAg
Y29uc3QgR0xlbnVtIFNSR0JfQUxQSEFfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QzQyOwotICAgIGNvbnN0IEdMZW51bSBTUkdCOF9BTFBIQThfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4OEM0MzsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQgICAgPSAweDgyMTA7Ci0KLSAgICBjb25zdCBH
TGVudW0gTUlOX0VYVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA3OwotICAgIGNvbnN0
IEdMZW51bSBNQVhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwMDg7Ci0KLSAgICBj
b25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgID0gMHg4RDQyOwotICAg
IGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgPSAweDhENDM7Ci0g
ICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQgICA9IDB4OEQ0NDsK
LSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgID0gMHg4RDUw
OwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgPSAweDhE
NTE7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9CTFVFX1NJWkUgICAgICAgICA9IDB4
OEQ1MjsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgID0g
MHg4RDUzOwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAg
PSAweDhENTQ7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUgICAg
ICA9IDB4OEQ1NTsKLQotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9UWVBFICAgICAgICAgICA9IDB4OENEMDsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgPSAweDhDRDE7Ci0gICAgY29uc3Qg
R0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCAgICAgICAgID0gMHg4
Q0QyOwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VC
RV9NQVBfRkFDRSA9IDB4OENEMzsKLQotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9BVFRBQ0hNRU5U
MCAgICAgICAgICAgICAgPSAweDhDRTA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX0FUVEFDSE1F
TlQgICAgICAgICAgICAgICA9IDB4OEQwMDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9BVFRB
Q0hNRU5UICAgICAgICAgICAgID0gMHg4RDIwOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQgICAgICAgPSAweDgyMUE7Ci0KLSAgICBjb25zdCBHTGVudW0gTk9ORSAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLQotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJV
RkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICA9IDB4OENENTsKLSAgICBjb25zdCBH
TGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgPSAweDhDRDY7
Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hN
RU5UID0gMHg4Q0Q3OwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJ
TUVOU0lPTlMgICAgICAgICA9IDB4OENEOTsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAweDhDREQ7Ci0KLSAgICBjb25zdCBHTGVu
dW0gRlJBTUVCVUZGRVJfQklORElORyAgICAgICAgICAgID0gMHg4Q0E2OwotICAgIGNvbnN0IEdM
ZW51bSBSRU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgPSAweDhDQTc7Ci0gICAgY29uc3Qg
R0xlbnVtIE1BWF9SRU5ERVJCVUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRFODsKLQotICAgIGNv
bnN0IEdMZW51bSBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiAgPSAweDA1MDY7Ci0KLSAg
ICAvKiBXZWJHTC1zcGVjaWZpYyBlbnVtcyAqLwotICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfRkxJ
UF9ZX1dFQkdMICAgICAgICAgICAgICAgID0gMHg5MjQwOwotICAgIGNvbnN0IEdMZW51bSBVTlBB
Q0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgICAgID0gMHg5MjQxOwotICAgIGNvbnN0IEdMZW51
bSBDT05URVhUX0xPU1RfV0VCR0wgICAgICAgICAgICAgICAgID0gMHg5MjQyOwotICAgIGNvbnN0
IEdMZW51bSBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzOwotICAg
IGNvbnN0IEdMZW51bSBCUk9XU0VSX0RFRkFVTFRfV0VCR0wgICAgICAgICAgICAgID0gMHg5MjQ0
OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1ZmZlcldpZHRoOwot
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJIZWlnaHQ7Ci0KLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBhY3Rp
dmVUZXh0dXJlKEdMZW51bSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtIHByb2dy
YW0sIFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBHTHVpbnQgaW5kZXgsIERPTVN0cmluZyBuYW1lKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQnVmZmVyKEdMZW51bSB0
YXJnZXQsIFdlYkdMQnVmZmVyIGJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQs
IFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRSZW5kZXJidWZmZXIoR0xlbnVtIHRh
cmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kVGV4dHVyZShHTGVudW0g
dGFyZ2V0LCBXZWJHTFRleHR1cmUgdGV4dHVyZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGJsZW5kQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xj
bGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBibGVuZEVxdWF0aW9uKEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdMZW51bSBtb2RlUkdC
LCBHTGVudW0gbW9kZUFscGhhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgYmxlbmRGdW5jKEdMZW51bSBzZmFjdG9yLCBHTGVudW0gZGZhY3Rvcik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVuY1NlcGFyYXRlKEdMZW51bSBzcmNS
R0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZm
ZXJEYXRhKEdMZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyPyBkYXRhLCBHTGVudW0gdXNhZ2UpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1
ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhLCBHTGVudW0gdXNh
Z2UpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNh
Z2UpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1
ZmZlcj8gZGF0YSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQs
IEFycmF5QnVmZmVyVmlldz8gZGF0YSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVu
dW0gICAgICAgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0gdGFyZ2V0KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXIoR0xiaXRmaWVsZCBtYXNrKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJDb2xvcihHTGNsYW1wZiBy
ZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoR0xjbGFtcGYgZGVw
dGgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhclN0ZW5jaWwo
R0xpbnQgcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbG9yTWFz
ayhHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xl
YW4gYWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLQotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb21wcmVzc2VkVGV4SW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgQXJyYXlCdWZmZXJWaWV3IGRhdGEpOwotICAgIAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBjb3B5VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgY29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdM
QnVmZmVyIGNyZWF0ZUJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMRnJh
bWVidWZmZXIgY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBX
ZWJHTFByb2dyYW0gY3JlYXRlUHJvZ3JhbSgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdl
YkdMUmVuZGVyYnVmZmVyIGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xTaGFkZXIgY3JlYXRlU2hhZGVyKEdMZW51bSB0
eXBlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVy
ZSgpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGN1bGxGYWNlKEdM
ZW51bSBtb2RlKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxl
dGVCdWZmZXIoV2ViR0xCdWZmZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZl
cik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVByb2dyYW0o
V2ViR0xQcm9ncmFtIHByb2dyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlU2hhZGVyKFdlYkdM
U2hhZGVyIHNoYWRlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRl
bGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlIHRleHR1cmUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIGRlcHRoRnVuYyhHTGVudW0gZnVuYyk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoTWFzayhHTGJvb2xlYW4gZmxhZyk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoUmFuZ2UoR0xjbGFtcGYgek5l
YXIsIEdMY2xhbXBmIHpGYXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
ZGlzYWJsZShHTGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJh
d0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgR0xpbnRw
dHIgb2Zmc2V0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBlbmFi
bGUoR0xlbnVtIGNhcCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4KTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmluaXNoKCk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGZsdXNoKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSByZW5kZXJidWZmZXJ0
YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIFdl
YkdMVGV4dHVyZSB0ZXh0dXJlLCBHTGludCBsZXZlbCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGZyb250RmFjZShHTGVudW0gbW9kZSk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGdlbmVyYXRlTWlwbWFwKEdMZW51bSB0YXJnZXQpOwotICAg
IAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJ
bmZvIGdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMQWN0aXZlSW5m
byBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgpOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLQotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIEdMaW50ICAgICAgICBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0g
cHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tXSBhbnkgZ2V0QnVmZmVyUGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGdldENv
bnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVudW0gZ2V0
RXJyb3IoKTsKLQotICAgIC8vIG9iamVjdCBnZXRFeHRlbnNpb24oRE9NU3RyaW5nIG5hbWUpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdldEV4dGVuc2lvbihET01TdHJp
bmcgbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2Vw
dGlvbl0gYW55IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFBhcmFtZXRlcihHTGVudW0gcG5h
bWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBh
bnkgZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0xlbnVtIHBuYW1l
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51
bGwsIFJhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJv
Z3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4
Y2VwdGlvbl0gYW55IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0
aW9uXSBhbnkgZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyIHNoYWRlciwgR0xlbnVtIHBu
YW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5n
QXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVySW5mb0xvZyhX
ZWJHTFNoYWRlciBzaGFkZXIpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdCBnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlKTsKLQotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhj
ZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRlcik7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHNlcXVlbmNlPERPTVN0cmluZz4g
Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRUZXhQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBhbnkgZ2V0VW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24pOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQ
cm9ncmFtIHByb2dyYW0sIERPTVN0cmluZyBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VmVydGV4QXR0cmliKEdMdWludCBp
bmRleCwgR0xlbnVtIHBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMc2l6ZWlw
dHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lKTsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBoaW50KEdMZW51bSB0YXJnZXQs
IEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNC
dWZmZXIoV2ViR0xCdWZmZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJv
b2xlYW4gICAgaXNDb250ZXh0TG9zdCgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9v
bGVhbiAgICBpc0VuYWJsZWQoR0xlbnVtIGNhcCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
R0xib29sZWFuICAgIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzUHJvZ3JhbShXZWJHTFBy
b2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlz
UmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzU2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzVGV4dHVyZShXZWJHTFRl
eHR1cmUgdGV4dHVyZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGxp
bmVXaWR0aChHTGZsb2F0IHdpZHRoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBpeGVsU3RvcmVpKEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBwb2x5Z29uT2Zmc2V0KEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsKLQotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHJlYWRQ
aXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcgcGl4ZWxzKTsKLSAgICAK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcmVsZWFzZVNoYWRlckNvbXBp
bGVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc2Npc3NvcihHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgc2hhZGVyU291cmNlKFdlYkdMU2hh
ZGVyIHNoYWRlciwgRE9NU3RyaW5nIHN0cmluZyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIHN0ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBt
YXNrKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmNT
ZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2sp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsTWFzayhHTHVp
bnQgbWFzayk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE9wKEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWws
IEdMZW51bSB6cGFzcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0
ZW5jaWxPcFNlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBH
TGVudW0genBhc3MpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHRl
eFBhcmFtZXRlcmYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdGV4UGFyYW1ldGVyaShHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKLQotICAgIC8vIFN1cHBvcnRl
ZCBmb3JtczoKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscyk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBI
VE1MQ2FudmFzRWxlbWVudD8gY2FudmFzKTsKLSNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYg
RU5BQkxFX1ZJREVPCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2
aWRlbyk7Ci0jZW5kaWYKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhT
dWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFn
ZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1l
bnQ/IGNhbnZhcyk7Ci0jaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRl
eFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/IHZp
ZGVvKTsKLSNlbmRpZgotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHVuaWZvcm0xZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCB1bmlmb3JtMWZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkg
dik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm0xaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFpdihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJmKFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJmdihXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmkoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaXYoV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zZihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmdihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2koV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0z
aXYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkgdik7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwg
R0xmbG9hdCB3KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCB1bmlmb3JtNGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkIHVuaWZvcm00aShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xpbnQgeiwgR0xpbnQgdyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSBhcnJheSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybU1hdHJpeDNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFu
IHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4NGZ2KFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkg
YXJyYXkpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdmFsaWRhdGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdMdWludCBpbmR4
LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgdmVydGV4QXR0cmliMmYoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdM
dWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliM2YoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xm
bG9hdCB5LCBHTGZsb2F0IHopOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9p
ZCB2ZXJ0ZXhBdHRyaWIzZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0ZihHTHVpbnQg
aW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdMdWludCBp
bmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBpbmR4
LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6
ZWkgc3RyaWRlLCBHTGludHB0ciBvZmZzZXQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIHZpZXdwb3J0KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjM1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV0VCR0wpCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorCisjaW5j
bHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgor
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RVhUQmxlbmRNaW5NYXguaCIKKyNpbmNsdWRlICJFWFRGcmFnRGVwdGguaCIKKyNpbmNsdWRlICJF
WFRTaGFkZXJUZXh0dXJlTE9ELmgiCisjaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljLmgiCisjaW5jbHVkZSAiRVhUc1JHQi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJI
VE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgorI2luY2x1ZGUgIk9FU1N0YW5kYXJk
RGVyaXZhdGl2ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJP
RVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0Lmgi
CisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIk9FU1Zl
cnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckJv
eC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJX
ZWJHTEFjdGl2ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldl
YkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0
dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2lu
Y2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRF
dmVudC5oIgorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCisjaW5jbHVkZSAiV2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5j
bHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgi
CisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRl
eHQuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1
ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgorCisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+
CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvVWludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5S
ZXN0b3JlQXR0ZW1wdHMgPSAxLjA7Citjb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25z
b2xlID0gMjU2OworCituYW1lc3BhY2UgeworICAgIAorY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZl
ckJpbmRlciB7CitwdWJsaWM6CisgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3aW5n
QnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJpbmRp
bmcpCisgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCisgICAgICAgICwg
bV9mcmFtZWJ1ZmZlckJpbmRpbmcoZnJhbWVidWZmZXJCaW5kaW5nKQorICAgIHsKKyAgICAgICAg
Ly8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGlu
ZykKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIH0KKyAgICAKKyAg
ICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigpCisgICAgeworICAgICAgICAvLyBSZXN0b3Jl
IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5k
KCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdC
dWZmZXI7CisgICAgV2ViR0xGcmFtZWJ1ZmZlciogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7Cit9Owor
CitQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQorewor
ICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDogMDsKK30KKwordm9pZCBjbGlw
MUQoR0MzRGludCBzdGFydCwgR0MzRHNpemVpIHJhbmdlLCBHQzNEc2l6ZWkgc291cmNlUmFuZ2Us
IEdDM0RpbnQqIGNsaXBwZWRTdGFydCwgR0MzRHNpemVpKiBjbGlwcGVkUmFuZ2UpCit7CisgICAg
QVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlwcGVkUmFuZ2UpOworICAgIGlmIChzdGFydCA8IDAp
IHsKKyAgICAgICAgcmFuZ2UgKz0gc3RhcnQ7CisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICB9Cisg
ICAgR0MzRGludCBlbmQgPSBzdGFydCArIHJhbmdlOworICAgIGlmIChlbmQgPiBzb3VyY2VSYW5n
ZSkKKyAgICAgICAgcmFuZ2UgLT0gZW5kIC0gc291cmNlUmFuZ2U7CisgICAgKmNsaXBwZWRTdGFy
dCA9IHN0YXJ0OworICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKK30KKworLy8gUmV0dXJucyBm
YWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGkuZS4sIHgsIHksIHdpZHRoLCBoZWln
aHQgc3RheSB0aGUgc2FtZS4KK2Jvb2wgY2xpcDJEKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICBHQzNEc2l6ZWkgc291
cmNlV2lkdGgsIEdDM0RzaXplaSBzb3VyY2VIZWlnaHQsCisgICAgICAgICAgICBHQzNEaW50KiBj
bGlwcGVkWCwgR0MzRGludCogY2xpcHBlZFksIEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNE
c2l6ZWkqY2xpcHBlZEhlaWdodCkKK3sKKyAgICBBU1NFUlQoY2xpcHBlZFggJiYgY2xpcHBlZFkg
JiYgY2xpcHBlZFdpZHRoICYmIGNsaXBwZWRIZWlnaHQpOworICAgIGNsaXAxRCh4LCB3aWR0aCwg
c291cmNlV2lkdGgsIGNsaXBwZWRYLCBjbGlwcGVkV2lkdGgpOworICAgIGNsaXAxRCh5LCBoZWln
aHQsIHNvdXJjZUhlaWdodCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOworICAgIHJldHVybiAo
KmNsaXBwZWRYICE9IHggfHwgKmNsaXBwZWRZICE9IHkgfHwgKmNsaXBwZWRXaWR0aCAhPSB3aWR0
aCB8fCAqY2xpcHBlZEhlaWdodCAhPSBoZWlnaHQpOworfQorCitHQzNEaW50IGNsYW1wKEdDM0Rp
bnQgdmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKK3sKKyAgICBpZiAodmFsdWUgPCBt
aW4pCisgICAgICAgIHZhbHVlID0gbWluOworICAgIGlmICh2YWx1ZSA+IG1heCkKKyAgICAgICAg
dmFsdWUgPSBtYXg7CisgICAgcmV0dXJuIHZhbHVlOworfQorCisvLyBSZXR1cm4gdHJ1ZSBpZiBh
IGNoYXJhY3RlciBiZWxvbmdzIHRvIHRoZSBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbgorLy8g
R0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9uIDMuMS4KK2Jvb2wgdmFsaWRhdGVDaGFyYWN0ZXIodW5z
aWduZWQgY2hhciBjKQoreworICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4
Y2VwdCAiICQgYCBAIFwgJyBERUwuCisgICAgaWYgKGMgPj0gMzIgJiYgYyA8PSAxMjYKKyAgICAg
ICAgJiYgYyAhPSAnIicgJiYgYyAhPSAnJCcgJiYgYyAhPSAnYCcgJiYgYyAhPSAnQCcgJiYgYyAh
PSAnXFwnICYmIGMgIT0gJ1wnJykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gSG9yaXpv
bnRhbCB0YWIsIGxpbmUgZmVlZCwgdmVydGljYWwgdGFiLCBmb3JtIGZlZWQsIGNhcnJpYWdlIHJl
dHVybgorICAgIC8vIGFyZSBhbHNvIHZhbGlkLgorICAgIGlmIChjID49IDkgJiYgYyA8PSAxMykK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGlzUHJl
Zml4UmVzZXJ2ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLnN0YXJ0c1dp
dGgoImdsXyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRo
KCJfd2ViZ2xfIikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gU3RyaXBzIGNvbW1lbnRzIGZyb20gc2hhZGVyIHRleHQuIFRoaXMgYWxsb3dzIG5vbi1B
U0NJSSBjaGFyYWN0ZXJzCisvLyB0byBiZSB1c2VkIGluIGNvbW1lbnRzIHdpdGhvdXQgcG90ZW50
aWFsbHkgYnJlYWtpbmcgT3BlbkdMCisvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVjdGluZyBj
aGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgorY2xhc3MgU3RyaXBDb21tZW50cyB7
CitwdWJsaWM6CisgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJpbmcmIHN0cikKKyAgICAgICAg
OiBtX3BhcnNlU3RhdGUoQmVnaW5uaW5nT2ZMaW5lKQorICAgICAgICAsIG1fc291cmNlU3RyaW5n
KHN0cikKKyAgICAgICAgLCBtX2xlbmd0aChzdHIubGVuZ3RoKCkpCisgICAgICAgICwgbV9wb3Np
dGlvbigwKQorICAgIHsKKyAgICAgICAgcGFyc2UoKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5n
IHJlc3VsdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBib29sIGhhc01vcmVDaGFyYWN0ZXJzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAobV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBwYXJzZSgpCisgICAgeworICAgICAgICB3aGlsZSAoaGFzTW9yZUNoYXJh
Y3RlcnMoKSkgeworICAgICAgICAgICAgcHJvY2VzcyhjdXJyZW50KCkpOworICAgICAgICAgICAg
Ly8gcHJvY2VzcygpIG1pZ2h0IGFkdmFuY2UgdGhlIHBvc2l0aW9uLgorICAgICAgICAgICAgaWYg
KGhhc01vcmVDaGFyYWN0ZXJzKCkpCisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvY2VzcyhVQ2hhcik7CisgICAgCisgICAgYm9v
bCBwZWVrKFVDaGFyJiBjaGFyYWN0ZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9wb3Np
dGlvbiArIDEgPj0gbV9sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGNoYXJhY3RlciA9IG1fc291cmNlU3RyaW5nW21fcG9zaXRpb24gKyAxXTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9wb3NpdGlvbiA8IG1f
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fc291cmNlU3RyaW5nW21fcG9zaXRpb25dOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgKyttX3Bvc2l0aW9u
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzTmV3bGluZShVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0
CisgICAgeworICAgICAgICAvLyBEb24ndCBhdHRlbXB0IHRvIGNhbm9uaWNhbGl6ZSBuZXdsaW5l
IHJlbGF0ZWQgY2hhcmFjdGVycy4KKyAgICAgICAgcmV0dXJuIChjaGFyYWN0ZXIgPT0gJ1xuJyB8
fCBjaGFyYWN0ZXIgPT0gJ1xyJyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdChVQ2hhciBj
aGFyYWN0ZXIpCisgICAgeworICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKGNoYXJhY3Rlcik7Cisg
ICAgfQorICAgIAorICAgIGVudW0gUGFyc2VTdGF0ZSB7CisgICAgICAgIC8vIEhhdmUgbm90IHNl
ZW4gYW4gQVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIHlldCBvbgorICAgICAgICAvLyB0
aGlzIGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgc2VlIGEgcHJlcHJvY2Vzc29yCisgICAg
ICAgIC8vIGRpcmVjdGl2ZS4KKyAgICAgICAgQmVnaW5uaW5nT2ZMaW5lLAorICAgICAgICAKKyAg
ICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9uZSBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFy
YWN0ZXIKKyAgICAgICAgLy8gb24gdGhpcyBsaW5lLgorICAgICAgICBNaWRkbGVPZkxpbmUsCisg
ICAgICAgIAorICAgICAgICAvLyBIYW5kbGluZyBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFBh
c3NlcyB0aHJvdWdoIGFsbAorICAgICAgICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2Yg
dGhlIGxpbmUuIERpc2FibGVzIGNvbW1lbnQKKyAgICAgICAgLy8gcHJvY2Vzc2luZy4KKyAgICAg
ICAgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmUsCisgICAgICAgIAorICAgICAgICAvLyBIYW5kbGlu
ZyBhIHNpbmdsZS1saW5lIGNvbW1lbnQuIFRoZSBjb21tZW50IHRleHQgaXMKKyAgICAgICAgLy8g
cmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4KKyAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVu
dCwKKyAgICAgICAgCisgICAgICAgIC8vIEhhbmRsaW5nIGEgbXVsdGktbGluZSBjb21tZW50LiBO
ZXdsaW5lcyBhcmUgcGFzc2VkCisgICAgICAgIC8vIHRocm91Z2ggdG8gcHJlc2VydmUgbGluZSBu
dW1iZXJzLgorICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKKyAgICB9OworICAgIAorICAgIFBh
cnNlU3RhdGUgbV9wYXJzZVN0YXRlOworICAgIFN0cmluZyBtX3NvdXJjZVN0cmluZzsKKyAgICB1
bnNpZ25lZCBtX2xlbmd0aDsKKyAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uOworICAgIFN0cmluZ0J1
aWxkZXIgbV9idWlsZGVyOworfTsKKwordm9pZCBTdHJpcENvbW1lbnRzOjpwcm9jZXNzKFVDaGFy
IGMpCit7CisgICAgaWYgKGlzTmV3bGluZShjKSkgeworICAgICAgICAvLyBObyBtYXR0ZXIgd2hh
dCBzdGF0ZSB3ZSBhcmUgaW4sIHBhc3MgdGhyb3VnaCBuZXdsaW5lcworICAgICAgICAvLyBzbyB3
ZSBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisgICAgICAgIGVtaXQoYyk7CisgICAgICAgIAorICAg
ICAgICBpZiAobV9wYXJzZVN0YXRlICE9IEluTXVsdGlMaW5lQ29tbWVudCkKKyAgICAgICAgICAg
IG1fcGFyc2VTdGF0ZSA9IEJlZ2lubmluZ09mTGluZTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgVUNoYXIgdGVtcCA9IDA7CisgICAgc3dpdGNoIChtX3BhcnNl
U3RhdGUpIHsKKyAgICBjYXNlIEJlZ2lubmluZ09mTGluZToKKyAgICAgICAgaWYgKFdURjo6aXNB
U0NJSVNwYWNlKGMpKSB7CisgICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjID09ICcjJykgeworICAgICAgICAg
ICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7CisgICAgICAgICAgICBl
bWl0KGMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFRyYW5zaXRpb24gdG8gbm9ybWFsIHN0YXRlIGFuZCByZS1oYW5kbGUgY2hhcmFjdGVyLgor
ICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7CisgICAgICAgIHByb2Nlc3MoYyk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE1pZGRsZU9mTGluZToKKyAgICAg
ICAgaWYgKGMgPT0gJy8nICYmIHBlZWsodGVtcCkpIHsKKyAgICAgICAgICAgIGlmICh0ZW1wID09
ICcvJykgeworICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluU2luZ2xlTGluZUNvbW1l
bnQ7CisgICAgICAgICAgICAgICAgZW1pdCgnICcpOworICAgICAgICAgICAgICAgIGFkdmFuY2Uo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHRlbXAgPT0gJyonKSB7CisgICAgICAgICAgICAgICAgbV9wYXJzZVN0
YXRlID0gSW5NdWx0aUxpbmVDb21tZW50OworICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNv
bW1lbnQgc3RhcnQgaW4gY2FzZSB0aGUgdXNlciBoYXMKKyAgICAgICAgICAgICAgICAvLyBhbiB1
bmNsb3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCisgICAgICAgICAgICAgICAgLy8g
c2lnbmFsIGFuIGVycm9yLgorICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAgICAgICAgICAg
ICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBl
bWl0KGMpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBJblByZXByb2Nlc3Nv
ckRpcmVjdGl2ZToKKyAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgdGhlIGNoYXJhY3RlciBpcywg
anVzdCBwYXNzIGl0CisgICAgICAgIC8vIHRocm91Z2guIERvIG5vdCBwYXJzZSBjb21tZW50cyBp
biB0aGlzIHN0YXRlLiBUaGlzCisgICAgICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhp
bmcgdG8gZG8gbG9uZyB0ZXJtLCBidXQgaXQKKyAgICAgICAgLy8gc2hvdWxkIGhhbmRsZSB0aGUg
I2Vycm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuCisgICAgICAgIGVtaXQoYyk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEluU2luZ2xlTGluZUNvbW1lbnQ6CisgICAgICAg
IC8vIFRoZSBuZXdsaW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNh
cmUKKyAgICAgICAgLy8gb2YgcmVzZXR0aW5nIG91ciBzdGF0ZSB3aGVuIHdlIGdldCBvdXQgb2Yg
dGhlCisgICAgICAgIC8vIHNpbmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVyIGNo
YXJhY3RlcnMuCisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEluTXVsdGlMaW5l
Q29tbWVudDoKKyAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9PSAn
LycpIHsKKyAgICAgICAgICAgIGVtaXQoJyonKTsKKyAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAg
ICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKKyAgICAgICAgICAgIGFkdmFu
Y2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJzLiBVbmNsZWFyIHdoZXRoZXIgd2UgbWF5Cisg
ICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0IGVtaXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVy
IHRvIHRyeQorICAgICAgICAvLyB0byBwcmVzZXJ2ZSBjb2x1bW4gbnVtYmVycyBmb3IgZGVidWdn
aW5nIHB1cnBvc2VzLgorICAgICAgICBicmVhazsKKyAgICB9Cit9Cit9IC8vIG5hbWVzcGFjZSBh
bm9ueW1vdXMKKworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrIDogcHVi
bGljIEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRMb3N0Q2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY2IpIAorICAgIDog
bV9jb250ZXh0KGNiKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0KCkgb3Zl
cnJpZGUgCisgICAgeyAKKyAgICAgICAgbV9jb250ZXh0LT5mb3JjZUxvc3RDb250ZXh0KFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OlJlYWxMb3N0Q29udGV4dCk7IAorICAgIH0KKyAgICB2aXJ0
dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6Cisg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogbV9jb250ZXh0OworfTsKKworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjYikgCisgICAgOiBtX2Nv
bnRleHQoY2IpIHsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yTWVzc2FnZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIEdDM0RpbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
bV9jb250ZXh0LT5tX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKQorICAgICAgICAgICAgbV9j
b250ZXh0LT5wcmludEdMRXJyb3JUb0NvbnNvbGUobWVzc2FnZSk7CisgICAgfQorICAgIHZpcnR1
YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKCkgeyB9Citwcml2
YXRlOgorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKK307CisKK3N0
ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgV2ViR0xDb250ZXh0
QXR0cmlidXRlcyogYXR0cnMsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBEb2N1bWVudCYg
ZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAKKyAgICAvLyBUaGUgRnJhbWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3JlYXRpb24gb2Yg
YSBuZXcgV2ViR0wgY29udGV4dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBpbgorICAgIC8v
IHBhcnRpY3VsYXIsIGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3IgbW9yZSB0aW1l
cyB2aWEgdGhlIEdMX0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KKyAgICBpZiAoIWZyYW1lLT5s
b2FkZXIoKS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxl
ZCgpKSkgeworICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxz
ZSwgdHJ1ZSwgIldlYiBwYWdlIHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBXZWJHTCBjb250
ZXh0LiIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiA9IGZhbHNlOworICAgIERvY3VtZW50JiB0b3BEb2N1
bWVudCA9IGRvY3VtZW50LnRvcERvY3VtZW50KCk7CisgICAgUGFnZSogcGFnZSA9IHRvcERvY3Vt
ZW50LnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiAhdG9wRG9jdW1lbnQudXJsKCkuaXNMb2NhbEZp
bGUoKSkgeworICAgICAgICBXZWJHTExvYWRQb2xpY3kgcG9saWN5ID0gcGFnZS0+bWFpbkZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkud2ViR0xQb2xpY3lGb3JVUkwodG9wRG9jdW1lbnQudXJsKCkp
OworICAgICAgICAKKyAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pIHsK
KyAgICAgICAgICAgIExPRyhXZWJHTCwgIlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJMICglcykgaXMg
dG8gYmxvY2sgV2ViR0wuIiwgdG9wRG9jdW1lbnQudXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmIChwb2xpY3kgPT0gV2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExP
RyhXZWJHTCwgIldlYkdMIHBvbGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZl
ZCBsYXRlci4iKTsKKyAgICAgICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVl
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMgPSBhdHRycyA/IGF0dHJzLT5hdHRyaWJ1dGVzKCkgOiBHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcygpOworICAgIAorICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlh
cykgeworICAgICAgICBpZiAoIWZyYW1lLT5zZXR0aW5ncygpLm9wZW5HTE11bHRpc2FtcGxpbmdF
bmFibGVkKCkpCisgICAgICAgICAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisgICAgYXR0cmli
dXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOworICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3Jl
dGVHUFUgPSB0cnVlOworICAgIAorICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKS5mb3JjZVNvZnR3
YXJlV2ViR0xSZW5kZXJpbmcoKSkKKyAgICAgICAgYXR0cmlidXRlcy5mb3JjZVNvZnR3YXJlUmVu
ZGVyZXIgPSB0cnVlOworICAgIAorICAgIGlmIChwYWdlKQorICAgICAgICBhdHRyaWJ1dGVzLmRl
dmljZVBpeGVsUmF0aW8gPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIAorICAgIGlm
IChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkNyZWF0
ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQgd2lsbCByZXF1aXJlIGEgcG9s
aWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U+IHJlbmRlcmluZ0NvbnRleHQgPSBuaWw7CisgICAgICAgIGlm
ICh0eXBlID09ICJleHBlcmltZW50YWwtd2ViZ2wyIikKKyAgICAgICAgICAgIHJlbmRlcmluZ0Nv
bnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4obmV3IFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wxUmVuZGVy
aW5nQ29udGV4dD4obmV3IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1dGVz
KSk7CisgICAgfQorICAgIAorICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVudC52
aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5k
b3cpKTsKKyAgICAKKyAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKSB7CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZh
bHNlLCB0cnVlLCAiQ291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNp
b25zID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChleHRlbnNpb25zLT5zdXBw
b3J0cygiR0xfRVhUX2RlYnVnX21hcmtlciIpKQorICAgICAgICBleHRlbnNpb25zLT5wdXNoR3Jv
dXBNYXJrZXJFWFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOworICAgIAorICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiByZW5kZXJpbmdDb250ZXh0ID0gbmls
OworICAgIGlmICh0eXBlID09ICJleHBlcmltZW50YWwtd2ViZ2wyIikKKyAgICAgICAgcmVuZGVy
aW5nQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihuZXcg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQsIGF0dHJpYnV0ZXMpKTsKKyAg
ICBlbHNlCisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wx
UmVuZGVyaW5nQ29udGV4dD4obmV3IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBjb250
ZXh0LCBhdHRyaWJ1dGVzKSk7CisgICAgcmVuZGVyaW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVk
KCk7CisgICAgCisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Cit9CisKK1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoSFRNTENhbnZhc0VsZW1l
bnQqIHBhc3NlZENhbnZhcywgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRl
cykKKyAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQorICAgICwgQWN0
aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCisgICAgLCBtX2NvbnRleHQo
MCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQorICAgICwgbV9kaXNwYXRjaENvbnRleHRMb3N0
RXZlbnRUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoQ29u
dGV4dExvc3RFdmVudCkKKyAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCisgICAgLCBtX3Jl
c3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1heWJlUmVzdG9y
ZUNvbnRleHQpCisgICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoMCkKKyAgICAsIG1fY29udGV4
dExvc3QoZmFsc2UpCisgICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4
dCkKKyAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICwgbV9zeW50aGVzaXplZEVy
cm9yc1RvQ29uc29sZSh0cnVlKQorICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQo
bWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQorICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uKHRydWUpCisgICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFsc2Up
Cit7Cit9CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCxHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzKQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBB
Y3RpdmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4
dChjb250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29u
dGV4dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlz
cGF0Y2hDb250ZXh0TG9zdEV2ZW50KQorICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKKyAg
ICAsIG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5
YmVSZXN0b3JlQ29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSg0KQorICAgICwg
bV9jb250ZXh0TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xv
c3RDb250ZXh0KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRo
ZXNpemVkRXJyb3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xl
QWxsb3dlZChtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1Bv
bGljeVJlc29sdXRpb24oZmFsc2UpCisgICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRp
b24oZmFsc2UpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgbV9jb250ZXh0R3JvdXAg
PSBXZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKCk7CisgICAgbV9jb250ZXh0R3JvdXAtPmFkZENv
bnRleHQodGhpcyk7CisgICAgCisgICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdw
b3J0RGltc1sxXSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKKyAgICAKKyAgICBp
ZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAg
ICAKKyAgICBzZXR1cEZsYWdzKCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCgpCit7
CisgICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0KTsKKyAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsK
KyAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAgbV9hY3RpdmVUZXh0dXJlVW5p
dCA9IDA7CisgICAgbV9wYWNrQWxpZ25tZW50ID0gNDsKKyAgICBtX3VucGFja0FsaWdubWVudCA9
IDQ7CisgICAgbV91bnBhY2tGbGlwWSA9IGZhbHNlOworICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSA9IGZhbHNlOworICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGlj
c0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMOworICAgIG1fYm91bmRBcnJheUJ1ZmZl
ciA9IDA7CisgICAgbV9jdXJyZW50UHJvZ3JhbSA9IDA7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgPSAwOworICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7CisgICAgbV9kZXB0aE1hc2sg
PSB0cnVlOworICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICBtX3N0ZW5jaWxNYXNr
ID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7CisgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IDA7CisgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOworICAg
IG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0Jh
Y2sgPSAweEZGRkZGRkZGOworICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CisgICAgbV9udW1H
TEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7Cisg
ICAgCisgICAgbV9jbGVhckNvbG9yWzBdID0gbV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9y
WzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsKKyAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7
CisgICAgbV9jbGVhckRlcHRoID0gMTsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9j
b2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1h
c2tbM10gPSB0cnVlOworICAgIAorICAgIEdDM0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKTsKKyAgICBtX3RleHR1cmVVbml0cy5jbGVhcigpOworICAgIG1fdGV4dHVyZVVuaXRz
LnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAKKyAgICBHQzNEaW50
IG51bVZlcnRleEF0dHJpYnMgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJm51bVZlcnRleEF0dHJpYnMpOworICAg
IG1fbWF4VmVydGV4QXR0cmlicyA9IG51bVZlcnRleEF0dHJpYnM7CisgICAgCisgICAgbV9tYXhU
ZXh0dXJlU2l6ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpOworICAgIG1fbWF4VGV4
dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heFRleHR1cmVT
aXplLCBtX21heFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSA9IDA7
CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRSwgJm1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1
YmVNYXBUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4
Q3ViZU1hcFRleHR1cmVTaXplLCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhS
ZW5kZXJidWZmZXJTaXplID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUsICZtX21heFJlbmRlcmJ1ZmZlclNpemUp
OworICAgIAorICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRfZHJhd19idWZmZXJzIGFy
ZSBsYXppbHkgcXVlcmllZC4KKyAgICBtX21heERyYXdCdWZmZXJzID0gMDsKKyAgICBtX21heENv
bG9yQXR0YWNobWVudHMgPSAwOworICAgIAorICAgIG1fYmFja0RyYXdCdWZmZXIgPSBHcmFwaGlj
c0NvbnRleHQzRDo6QkFDSzsKKyAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVj
a2VkID0gZmFsc2U7CisgICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZCA9IGZhbHNlOworICAgIAor
ICAgIG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uzo6Y3JlYXRlKHRoaXMsIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0
KTsKKyAgICBhZGRDb250ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgp
KTsKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9i
amVjdDsKKyAgICAKKyAgICBtX3ZlcnRleEF0dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0
dHJpYnMpOworICAgIAorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY3Jl
YXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkpCisgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisgICAgCisgICAgSW50U2l6ZSBjYW52
YXNTaXplID0gY2xhbXBlZENhbnZhc1NpemUoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOworICAgIAorICAgIG1f
Y29udGV4dC0+cmVzaGFwZShjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkp
OworICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52
YXNTaXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQtPnNjaXNzb3IoMCwgMCwgY2FudmFzU2l6
ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKKyAgICAKKyAgICBtX2NvbnRleHQtPnNl
dENvbnRleHRMb3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRl
eHRMb3N0Q2FsbGJhY2s+KHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNh
bGxiYWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdl
Q2FsbGJhY2s+KHRoaXMpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpz
ZXR1cEZsYWdzKCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICAKKyAgICBpZiAoUGFn
ZSogcGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgbV9zeW50aGVz
aXplZEVycm9yc1RvQ29uc29sZSA9IHBhZ2UtPnNldHRpbmdzKCkud2ViR0xFcnJvcnNUb0NvbnNv
bGVFbmFibGVkKCk7CisgICAgCisgICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5p
c0dMRVMyQ29tcGxpYW50KCk7CisgICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0Fj
Y2Vzc2VzID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01J
VU1fc3RyaWN0X2F0dHJpYnMiKTsKKyAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOwor
ICAgIGlmIChtX2lzR0xFUzJDb21wbGlhbnQpIHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmlj
dCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVy
ZV9ucG90Iik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwi
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9v
Zl90d28iKTsKKyAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIp
OworICAgIH0KKyAgICBtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNv
bnN0Cit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkp
CisgICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnByaXZpbGVnZWRXZWJHTEV4dGVuc2lv
bnNFbmFibGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkK
K3sKKyAgICBpZiAoIW1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCkp
CisgICAgICAgIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmFwcGVuZChmb3JtYXQpOworfQor
CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSgp
Cit7CisgICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0
aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVm
b3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgor
ICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9kZWZhdWx0VmVydGV4QXJy
YXlPYmplY3QgPSBudWxscHRyOworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxw
dHI7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRQ
cm9ncmFtID0gbnVsbHB0cjsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxwdHI7Cisg
ICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKKyAgICAKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fdGV4
dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBtX3RleHR1
cmVVbml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICAK
KyAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVN
YXAgPSBudWxscHRyOworICAgIAorICAgIGlmICghbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KSB7CisgICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKyAgICAgICAgZGVzdHJv
eUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVDb250
ZXh0KHRoaXMpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
ZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJl
c29sdXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUaGUgZHJhd2luZyBidWZm
ZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAor
ICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KKyAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKKyAgICAK
KyAgICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RD
YWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxs
YmFjayhudWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgfQorfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit7Cisg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
bV9jb250ZXh0LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAKKyAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsK
KyAgICAKKyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOworICAgIFJlbmRlckJveCogcmVuZGVy
Qm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOworICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYg
cmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7Cisg
ICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICBjYW52YXMoKS0+Y2xl
YXJDb3BpZWRJbWFnZSgpOworICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZh
c0NoYW5nZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0
eSkgeworICAgICAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7CisgICAgICAgICAg
ICBjYW52YXMoKS0+ZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgwLCAwKSwgY2xhbXBlZENh
bnZhc1NpemUoKSkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBpZiAoIW1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFy
ZWQKKyAgICAgICAgfHwgbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFz
ayAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gY29udGV4dEF0dHJpYnV0ZXMgPSBn
ZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIAorICAgIC8vIERldGVybWluZSBpZiBpdCdzIHBv
c3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2VyIGFza2VkIGZvciBhbmQgdGhpcyBj
bGVhci4KKyAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBtYXNrICYmICFtX3NjaXNzb3JFbmFibGVk
OworICAgIAorICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKKyAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkgeworICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3Io
bV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29sb3JbMV0gOiAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0gPyBtX2NsZWFyQ29sb3JbMl0g
OiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbM10gPyBtX2Ns
ZWFyQ29sb3JbM10gOiAwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNv
bG9yKDAsIDAsIDAsIDApOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRy
dWUsIHRydWUpOworICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPmRlcHRoKCkp
IHsKKyAgICAgICAgaWYgKCFjb21iaW5lZENsZWFyIHx8ICFtX2RlcHRoTWFzayB8fCAhKG1hc2sg
JiBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCkpCisgICAgICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyRGVwdGgoMS4wZik7CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICAgICAgbV9jb250ZXh0LT5kZXB0aE1hc2so
dHJ1ZSk7CisgICAgfQorICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+c3RlbmNpbCgpKSB7Cisg
ICAgICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCht
X2NsZWFyU3RlbmNpbCAmIG1fc3RlbmNpbE1hc2spOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgICAgIG1fY29udGV4dC0+c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4RkZGRkZGRkYpOwor
ICAgIH0KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmNsZWFyRnJhbWVidWZmZXJzKGNsZWFyTWFzayk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIG1fY29udGV4
dC0+Y2xlYXIoY2xlYXJNYXNrKTsKKyAgICB9CisgICAgCisgICAgcmVzdG9yZVN0YXRlQWZ0ZXJD
bGVhcigpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RP
clplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2xheWVyQ2xlYXJlZCA9
IHRydWU7CisgICAgCisgICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpCit7CisgICAgLy8g
UmVzdG9yZSB0aGUgc3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCisgICAgaWYgKG1fc2Npc3Nv
ckVuYWJsZWQpCisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NsZWFyQ29sb3JbMF0s
IG1fY2xlYXJDb2xvclsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGVhckNvbG9y
WzJdLCBtX2NsZWFyQ29sb3JbM10pOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JN
YXNrWzBdLCBtX2NvbG9yTWFza1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9y
TWFza1syXSwgbV9jb2xvck1hc2tbM10pOworICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChtX2Ns
ZWFyRGVwdGgpOworICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsKTsK
KyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
T05ULCBtX3N0ZW5jaWxNYXNrKTsKKyAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhtX2RlcHRoTWFz
ayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFya0xheWVyQ29tcG9z
aXRlZCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKGNhbnZhcygpLT5kb2N1bWVudCgpLnByaW50aW5nKCkpCisgICAgICAgIGNh
bnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICAKKyAgICAvLyBVbnRpbCB0aGUg
Y2FudmFzIGlzIHdyaXR0ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAor
ICAgIC8vIGhhcHBlbmVkIGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVk
IGJ5IHRoZSBjb21wb3NpdG9yLgorICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgp
ICYmICFtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fY29u
dGV4dC0+cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7
CisgICAgICAgIAorICAgICAgICBjYW52YXMoKS0+bWFrZVByZXNlbnRhdGlvbkNvcHkoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOworICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5
ICYmICFtX2xheWVyQ2xlYXJlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNhbnZhcygp
LT5jbGVhckNvcGllZEltYWdlKCk7CisgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwor
ICAgIAorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
Y29tbWl0KCk7CisgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhj
YW52YXMoKS0+YnVmZmVyKCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgCisgICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9
Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2xlYXJJZkNvbXBv
c2l0ZWQoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmNvbW1pdCgpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IG1fY29udGV4
dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEobV9kcmF3aW5nQnVmZmVyLmdldCgp
KTsKKyAgICAKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJC
aW5kaW5nLmdldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIGFwcHJveGltYXRpb24gYmVjYXVzZSBhdCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbGV2ZWwgd2UgZG9uJ3QKKyAgICAvLyBrbm93IGlmIHRoZSB1bmRlcmx5
aW5nIEZCTyB1c2VzIHRleHR1cmVzIG9yIHJlbmRlcmJ1ZmZlcnMuCisgICAgR0MzRGludCBtYXhT
aXplID0gc3RkOjptaW4obV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhSZW5kZXJidWZmZXJTaXplKTsK
KyAgICAvLyBMaW1pdCBkcmF3aW5nIGJ1ZmZlciBzaXplIHRvIDRrIHRvIGF2b2lkIG1lbW9yeSBl
eGhhdXN0aW9uLgorICAgIGNvbnN0IGludCBzaXplVXBwZXJMaW1pdCA9IDQwOTY7CisgICAgbWF4
U2l6ZSA9IHN0ZDo6bWluKG1heFNpemUsIHNpemVVcHBlckxpbWl0KTsKKyAgICBHQzNEaW50IG1h
eFdpZHRoID0gc3RkOjptaW4obWF4U2l6ZSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pOworICAgIEdD
M0RpbnQgbWF4SGVpZ2h0ID0gc3RkOjptaW4obWF4U2l6ZSwgbV9tYXhWaWV3cG9ydERpbXNbMV0p
OworICAgIHdpZHRoID0gY2xhbXAod2lkdGgsIDEsIG1heFdpZHRoKTsKKyAgICBoZWlnaHQgPSBj
bGFtcChoZWlnaHQsIDEsIG1heEhlaWdodCk7CisgICAgCisgICAgaWYgKG1fbmVlZHNVcGRhdGUp
IHsKKyAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7
CisgICAgICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCkpCisgICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0No
YW5nZWQpOworICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgfQorICAgIAorICAg
IC8vIFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUg
bmV3bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgorICAgIC8vIGNs
ZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KKyAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworICAgIAor
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG9iamVjdE9yWmVybyhtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJl
MkRCaW5kaW5nLmdldCgpKSk7CisgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG9iamVjdE9yWmVybyhtX3JlbmRlcmJ1ZmZlckJp
bmRpbmcuZ2V0KCkpKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
b2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Cit9CisKK2ludCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdAoreworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNp
emUoKS53aWR0aCgpOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJh
bWVidWZmZXJTaXplKCkud2lkdGgoKTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdAoreworICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKKyAg
ICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhl
aWdodCgpOworfQorCit1bnNpZ25lZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzaXplSW5C
eXRlcyhHQzNEZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJZVEU6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGJ5dGUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIHJldHVy
biBzaXplb2YoR0MzRHVieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEc2hvcnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1c2hvcnQp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihHQzNEaW50KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVpbnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RmbG9hdCk7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRleHR1cmUgLSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJh
Y3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBtX2FjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZSAtIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMDsKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUodGV4dHVy
ZSk7CisgICAgCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5zZXRBY3RpdmVUZXh0dXJlVW5pdCh0ZXh0dXJlKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJH
TFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xP
YmplY3QoImF0dGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJh
dHRhY2hTaGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFwcm9ncmFt
LT5hdHRhY2hTaGFkZXIoc2hhZGVyKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJhdHRhY2hTaGFkZXIiLCAic2hhZGVy
IGF0dGFjaG1lbnQgYWxyZWFkeSBoYXMgc2hhZGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmpl
Y3RPclplcm8oc2hhZGVyKSk7CisgICAgc2hhZGVyLT5vbkF0dGFjaGVkKCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0cmliTG9jYXRpb24i
LCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxl
bmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRB
dHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYmluZEF0dHJp
YkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgaW5kZXgsIG5hbWUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNo
ZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3Qq
IG9iamVjdCwgYm9vbCYgZGVsZXRlZCkKK3sKKyAgICBkZWxldGVkID0gZmFsc2U7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChvYmplY3QpIHsKKyAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgp
LCB0aGlzKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qgbm90IGZyb20gdGhp
cyBjb250ZXh0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgZGVsZXRlZCA9ICFvYmplY3QtPm9iamVjdCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kQnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVj
dFRvQmVCb3VuZCgiYmluZEJ1ZmZlciIsIGJ1ZmZlciwgZGVsZXRlZCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgYnVmZmVyID0gMDsKKyAgICBpZiAoYnVmZmVy
ICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiYmluZEJ1ZmZlciIsICJidWZmZXJzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11
bHRpcGxlIHRhcmdldHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGFyZ2V0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIpCisgICAgICAgIG1fYm91bmRBcnJh
eUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPnNldEVsZW1lbnRBcnJheUJ1ZmZlcihidWZmZXIpOworICAgIGVsc2UgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEJ1
ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsK
KyAgICBpZiAoYnVmZmVyKQorICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVj
a09iamVjdFRvQmVCb3VuZCgiYmluZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAgICBidWZmZXIgPSAwOworICAg
IGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5k
RnJhbWVidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZyhvYmpl
Y3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9m
IGJpbmRpbmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+YmluZCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoYnVmZmVyKQor
ICAgICAgICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKKyAgICBhcHBseVN0ZW5jaWxU
ZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZFJlbmRlcmJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJCdWZmZXIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxl
dGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRSZW5kZXJidWZmZXIiLCBy
ZW5kZXJCdWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlbGV0ZWQp
CisgICAgICAgIHJlbmRlckJ1ZmZlciA9IDA7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kUmVuZGVyYnVmZmVyIiwgImludmFsaWQg
dGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9yZW5kZXJidWZmZXJCaW5k
aW5nID0gcmVuZGVyQnVmZmVyOworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJn
ZXQsIG9iamVjdE9yWmVybyhyZW5kZXJCdWZmZXIpKTsKKyAgICBpZiAocmVuZGVyQnVmZmVyKQor
ICAgICAgICByZW5kZXJCdWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdl
YkdMVGV4dHVyZSogdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3Vu
ZCgiYmluZFRleHR1cmUiLCB0ZXh0dXJlLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChkZWxldGVkKQorICAgICAgICB0ZXh0dXJlID0gMDsKKyAgICBpZiAodGV4dHVyZSAmJiB0
ZXh0dXJlLT5nZXRUYXJnZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiYmluZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVs
dGlwbGUgdGFyZ2V0cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RpbnQgbWF4
TGV2ZWwgPSAwOworICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQpIHsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVy
ZTJEQmluZGluZyA9IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2
ZWw7CisgICAgICAgIAorICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyICYmICFtX2FjdGl2ZVRl
eHR1cmVVbml0KQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRUZXh0dXJlMkRCaW5k
aW5nKG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7CisgICAgICAgIAorICAgIH0gZWxzZSBpZiAodGFy
Z2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7CisgICAgICAgIG1f
dGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZyA9
IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJiaW5kVGV4dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmpl
Y3RPclplcm8odGV4dHVyZSkpOworICAgIGlmICh0ZXh0dXJlKQorICAgICAgICB0ZXh0dXJlLT5z
ZXRUYXJnZXQodGFyZ2V0LCBtYXhMZXZlbCk7CisgICAgCisgICAgLy8gTm90ZTogcHJldmlvdXNs
eSB3ZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBURVhUVVJFX1dSQVBfUgorICAgIC8v
IHJlcGVhdCBtb2RlIHRvIENMQU1QX1RPX0VER0UgZm9yIGN1YmUgbWFwIHRleHR1cmVzLCBiZWNh
dXNlIE9wZW5HTAorICAgIC8vIEVTIDIuMCBkb2Vzbid0IGV4cG9zZSB0aGlzIGZsYWcgKGEgYnVn
IGluIHRoZSBzcGVjaWZpY2F0aW9uKSBhbmQKKyAgICAvLyBvdGhlcndpc2UgdGhlIGFwcGxpY2F0
aW9uIGhhcyBubyBjb250cm9sIG92ZXIgdGhlIHNlYW1zIGluIHRoaXMKKyAgICAvLyBkaW1lbnNp
b24uIEhvd2V2ZXIsIGl0IGFwcGVhcnMgdGhhdCBzdXBwb3J0aW5nIHRoaXMgcHJvcGVybHkgb24g
YWxsCisgICAgLy8gcGxhdGZvcm1zIGlzIGZhaXJseSBpbnZvbHZlZCAod2lsbCByZXF1aXJlIGEg
SGFzaE1hcCBmcm9tIHRleHR1cmUgSUQKKyAgICAvLyBpbiBhbGwgcG9ydHMpLCBhbmQgd2UgaGF2
ZSBub3QgaGFkIGFueSBjb21wbGFpbnRzLCBzbyB0aGUgbG9naWMgaGFzCisgICAgLy8gYmVlbiBy
ZW1vdmVkLgorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kQ29sb3Io
R0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0
IGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kRXF1YXRpb24oR0Mz
RGVudW0gbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJH
QiwgR0MzRGVudW0gbW9kZUFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGVSR0IpIHx8
ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlQWxwaGEpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJH
QiwgbW9kZUFscGhhKTsKK30KKworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJs
ZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxl
bmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVt
IGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAgIC8v
IE5vdGU6IEFscGhhIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIFJHQi4K
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0Zh
Y3RvcnMoImJsZW5kRnVuYyIsIHNyY1JHQiwgZHN0UkdCKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fY29udGV4dC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBk
c3RBbHBoYSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0
YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZl
ciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVz
YWdlKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzaXplIDwg
MCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoIXNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPT0gMCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRh
KHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4oc2l6ZSkpKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEi
LCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
OworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXpl
aXB0cj4oc2l6ZSksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBm
YWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtz
IGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAg
IH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0g
dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2Up
OworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFkYXRhKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiYnVmZmVyRGF0YSIsICJubyBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAgICAg
aWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVy
RGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0
aCgpLCBkYXRhLT5kYXRhKCksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3Jz
VG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5j
dGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQg
dGhpbmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgp
OworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIq
IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJn
ZXQsIHVzYWdlKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
ZGF0YSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7
CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRo
ZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEt
PmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSwgdXNhZ2UpOworICAgIGlmIChtX2Nv
bnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRo
ZSBidWZmZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3Qg
aGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVyLT5kaXNhc3Nv
Y2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBB
cnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMo
ImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7
CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAob2Zmc2V0IDwgMCkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5h
c3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRh
dGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZm
ZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+
Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRh
IGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0
YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJE
YXRhKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZl
clN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZp
ZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdl
YkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJT
dWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIGlm
ICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJi
dWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRl
QnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVF
cnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0
YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5n
dGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEg
ZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRh
IGl0IHRoaW5rcyBpdCBkb2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRh
dGEoKTsKKyAgICB9Cit9CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxpZCB0
YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURTsKKyAgICBjb25zdCBj
aGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgR0MzRGVudW0gcmVz
dWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3RhdHVzKCZyZWFzb24pOworICAgIGlm
IChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Cisg
ICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwg
cmVhc29uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgcmVzdWx0ID0gbV9j
b250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhcihHQzNEYml0Zmll
bGQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1hc2sgJiB+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJf
QklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyIiwgImludmFsaWQgbWFzayIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFt
ZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNv
dXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY2xlYXIiLCByZWFz
b24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghY2xlYXJJZkNvbXBvc2l0ZWQo
bWFzaykpCisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIobWFzayk7CisgICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJDb2xv
cihHQzNEZmxvYXQgciwgR0MzRGZsb2F0IGcsIEdDM0RmbG9hdCBiLCBHQzNEZmxvYXQgYSkKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKHN0ZDo6aXNuYW4ocikpCisgICAgICAgIHIgPSAwOworICAgIGlmIChzdGQ6OmlzbmFuKGcp
KQorICAgICAgICBnID0gMDsKKyAgICBpZiAoc3RkOjppc25hbihiKSkKKyAgICAgICAgYiA9IDA7
CisgICAgaWYgKHN0ZDo6aXNuYW4oYSkpCisgICAgICAgIGEgPSAxOworICAgIG1fY2xlYXJDb2xv
clswXSA9IHI7CisgICAgbV9jbGVhckNvbG9yWzFdID0gZzsKKyAgICBtX2NsZWFyQ29sb3JbMl0g
PSBiOworICAgIG1fY2xlYXJDb2xvclszXSA9IGE7CisgICAgbV9jb250ZXh0LT5jbGVhckNvbG9y
KHIsIGcsIGIsIGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFy
RGVwdGgoR0MzRGZsb2F0IGRlcHRoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsKKyAgICBtX2Nv
bnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xlYXJTdGVuY2lsID0gczsKKyAg
ICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwg
R0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29sb3JNYXNrWzBdID0g
cmVkOworICAgIG1fY29sb3JNYXNrWzFdID0gZ3JlZW47CisgICAgbV9jb2xvck1hc2tbMl0gPSBi
bHVlOworICAgIG1fY29sb3JNYXNrWzNdID0gYWxwaGE7CisgICAgbV9jb250ZXh0LT5jb2xvck1h
c2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RP
clplcm8oc2hhZGVyKSk7CisgICAgR0MzRGludCB2YWx1ZTsKKyAgICBtX2NvbnRleHQtPmdldFNo
YWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9T
VEFUVVMsICZ2YWx1ZSk7CisgICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBk
YXRhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIs
IHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCF2YWxpZGF0
ZUNvbXByZXNzZWRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4
SW1hZ2UyRCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGJvcmRlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRl
ciBub3QgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21w
cmVzc2VkVGV4RGltZW5zaW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVs
LCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIs
IHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29t
cHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7CisgICAgICAgIGlmIChs
ZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJj
b21wcmVzc2VkVGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2NvbnRleHQtPm1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGRhdGEtPmJ5dGVMZW5ndGgo
KSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGNvbXByZXNzZWRUZXhJbWFn
ZTJEIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2
ZSB0aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KKyAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJn
ZXQsIGxldmVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB0ZXgtPnNldExl
dmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgIHRleC0+c2V0Q29tcHJlc3NlZCgp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVUZXhGdW5j
TGV2ZWwoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChmb3JtYXQpKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIGZvcm1hdCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEo
ImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwor
ICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGZvcm1hdCAhPSB0
ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEIiwgImZvcm1hdCBkb2VzIG5vdCBtYXRjaCB0ZXh0dXJlIGZvcm1hdCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghdmFsaWRhdGVDb21wcmVz
c2VkVGV4U3ViRGltZW5zaW9ucygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHRleCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICB0ZXgtPnNl
dENvbXByZXNzZWQoKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
Zm9ybWF0KQoreworICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlGb3Jt
YXQoZm9ybWF0KSAmIChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiZm9ybWF0IGNhbiBub3QgYmUgc2V0LCBvbmx5IHJlbmRlcmVkIHRvIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFn
ZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4
SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0YXJn
ZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1Rl
eEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0
LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleElt
YWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBX
ZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJE
IiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCByZWFzb24pOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlzUmVzb3VyY2VT
YWZlKCkpIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3
aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIG1f
Y29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgs
IHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU2NvcGVk
RHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1l
YnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZ
OworICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OworICAgICAg
ICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0
aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAm
Y2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAg
JiYgY2xpcHBlZEhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNs
aXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Cisg
ICAgfQorICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBu
b25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCisgICAgdGV4LT5zZXRMZXZlbElu
Zm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVu
Y0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1
cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5
VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB4b2Zmc2V0
LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBo
ZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlz
IGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KKyAgICBpZiAo
eG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsgaGVpZ2h0IDwgMCkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlU
ZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkg
fHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiY29weVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xlIG91dCBvZiByYW5nZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0ID0gdGV4LT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVU
ZXhGb3JtYXQoImNvcHlUZXhTdWJJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlv
blZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRp
YmxlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJl
YXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQz
RCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAi
Y29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKKyAgICAg
ICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgp
LCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIG1fY29udGV4dC0+Y29weVRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBl
ZFk7CisgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CisgICAg
ICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldp
ZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFks
ICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgeworICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAg
ICAgIEdDM0RlbnVtIHR5cGUgPSB0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCk7CisgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hhcltdPiB6ZXJvOworICAgICAgICAgICAg
aWYgKHdpZHRoICYmIGhlaWdodCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemU7Cisg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNp
emVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQs
ICZzaXplLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVy
cm9yLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB6ZXJv
ID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KHNpemUpOworICAgICAgICAgICAg
ICAgIGlmICghemVybykgeworICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91
dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJv
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWln
aHQgPiAwKSB7CisgICAgICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5k
ZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0ICsgY2xpcHBlZFggLSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZ
LCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9k
cmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAg
ICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorfQorCitQ
YXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVC
dWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbyA9IFdlYkdMQnVmZmVyOjpj
cmVhdGUodGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBv
OworfQorCitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gbyA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRDb250ZXh0
T2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKHRoaXMpOwor
ICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1Jl
ZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVByb2dy
YW0oKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJHTFByb2dyYW06OmNy
ZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87
Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdlYkdMUmVuZGVy
YnVmZmVyPiBvID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFy
ZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xT
aGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0
eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSICYmIHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY3JlYXRlU2hhZGVyIiwg
ImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIAorICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhp
cywgdHlwZSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmN1bGxGYWNlKEdDM0RlbnVtIG1v
ZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+Y3VsbEZhY2UobW9kZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRl
eHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAob2JqZWN0LT5vYmpl
Y3QoKSkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gY29udGV4dCBoZXJlIGJlY2F1
c2Ugd2Ugd2FudAorICAgICAgICAvLyB0aGluZ3MgaW4gdGhpcyBjb250ZXh0IHVuYm91bmQuCisg
ICAgICAgIG9iamVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
ZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVj
dChidWZmZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9
PSBidWZmZXIpCisgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7CisgICAgCisgICAgbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0LT51bmJpbmRCdWZmZXIoYnVmZmVyKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVm
ZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZlcikp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJp
bmRpbmcpIHsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgICAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1l
YnVmZmVyQmluZGluZygwKTsKKyAgICAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVi
dWZmZXIgaGVyZSB0byBiaW5kIGJhY2sgdG8gaW50ZXJuYWwgZmJvLgorICAgICAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlUHJvZ3Jh
bShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgZGVsZXRlT2JqZWN0KHByb2dyYW0pOwor
ICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFByb2dyYW0gdG8gMCBoZXJlIGJlY2F1c2Ug
dGhlIGRlbGV0aW9uIG9mIHRoZQorICAgIC8vIGN1cnJlbnQgcHJvZ3JhbSBpcyBkZWxheWVkLgor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihX
ZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghZGVsZXRlT2JqZWN0
KHJlbmRlcmJ1ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVmZmVyID09
IG1fcmVuZGVyYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0g
MDsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIocmVuZGVyYnVmZmVy
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVTaGFkZXIoV2Vi
R0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBkZWxldGVPYmplY3Qoc2hhZGVyKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSog
dGV4dHVyZSkKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJE
QmluZGluZykKKyAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcg
PSBudWxscHRyOworICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVVbml0c1tpXS50ZXh0
dXJlQ3ViZU1hcEJpbmRpbmcpCisgICAgICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJl
Q3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJv
bUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZGVwdGhGdW5j
KGZ1bmMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlcHRoTWFzayhH
QzNEYm9vbGVhbiBmbGFnKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2RlcHRoTWFzayA9IGZsYWc7CisgICAgbV9jb250ZXh0LT5k
ZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVw
dGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoek5lYXIgPiB6
RmFyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCFwcm9ncmFtLT5kZXRhY2hTaGFkZXIoc2hhZGVyKSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRh
Y2hTaGFkZXIiLCAic2hhZGVyIG5vdCBhdHRhY2hlZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2Jq
ZWN0T3JaZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRl
eHQzRCgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlKEdD
M0RlbnVtIGNhcCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7CisgICAgICAgIG1fc3Rl
bmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkgeworICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNz
b3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOworICAgIH0KKyAgICBtX2NvbnRleHQtPmRpc2Fi
bGUoY2FwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3RhdGUuZW5hYmxlZCA9IGZhbHNlOworICAg
IAorICAgIGlmIChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICBtX2Nv
bnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgUmVmUHRyPFdl
YkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qt
PmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG9mZnNldCA8IDApCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBhcnJheSwg
b2Zmc2V0IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDQgZm9yIGFsaWdubWVudCByZWFzb25zLgorICAg
ICAgICBpZiAob2Zmc2V0ICUgNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgb2Zm
c2V0IC89IDQ7CisgICAgICAgIAorICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJh
eUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gNDsKKyAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291
bnQgPiBuIC0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKKyAgICAgICAg
Ly8gRm9yIGFuIHVuc2lnbmVkIHNob3J0IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUg
YnkgMiBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCisgICAgICAgIGlmIChvZmZzZXQgJSAyKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSB1b2Zmc2V0
IGFuIGVsZW1lbnQgb2Zmc2V0LgorICAgICAgICBvZmZzZXQgLz0gMjsKKyAgICAgICAgCisgICAg
ICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAy
OworICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFy
cmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CisgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50
ID4gbiAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJ
bmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50
c1JlcXVpcmVkKQoreworICAgIC8vIFBlcmZvcm1zIGNvbnNlcnZhdGl2ZSB2YWxpZGF0aW9uIGJ5
IGNhY2hpbmcgYSBtYXhpbXVtIGluZGV4IG9mCisgICAgLy8gdGhlIGdpdmVuIHR5cGUgcGVyIGVs
ZW1lbnQgYXJyYXkgYnVmZmVyLiBJZiBhbGwgb2YgdGhlIGJvdW5kCisgICAgLy8gYXJyYXkgYnVm
ZmVycyBoYXZlIGVub3VnaCBlbGVtZW50cyB0byBzYXRpc2Z5IHRoYXQgbWF4aW11bQorICAgIC8v
IGluZGV4LCBza2lwcyB0aGUgZXhwZW5zaXZlIHBlci1kcmF3LWNhbGwgaXRlcmF0aW9uIGluCisg
ICAgLy8gdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZS4KKyAgICAKKyAgICBSZWZQdHI8V2ViR0xC
dWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0
RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVu
dHMgPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICAvLyBUaGUgY2FzZSBj
b3VudD09MCBpcyBhbHJlYWR5IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxp
ZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUuCisgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50
QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXIpOwor
ICAgIAorICAgIGludCBtYXhJbmRleCA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Z2V0Q2FjaGVkTWF4
SW5kZXgodHlwZSk7CisgICAgaWYgKG1heEluZGV4IDwgMCkgeworICAgICAgICAvLyBDb21wdXRl
IHRoZSBtYXhpbXVtIGluZGV4IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlw
ZSBvZiBpbmRleC4KKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6IHsKKyAgICAgICAgICAgIGNvbnN0IEdDM0R1Ynl0
ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAg
ICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykK
KyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2Fz
dDxpbnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOiB7CisgICAgICAgICAgICBudW1F
bGVtZW50cyAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgICAgICBjb25zdCBHQzNEdXNo
b3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGJ1ZmZlci0+ZGF0YSgpKTsK
KyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkr
KykKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNf
Y2FzdDxpbnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDogeworICAgICAgICAgICAgaWYg
KCFtX29lc0VsZW1lbnRJbmRleFVpbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgICAg
IGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVpbnQqPihidWZmZXIt
PmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVs
ZW1lbnRzOyBpKyspCisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRl
eCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGVsZW1lbnRBcnJheUJ1ZmZlci0+c2V0Q2FjaGVkTWF4SW5kZXgodHlwZSwgbWF4
SW5kZXgpOworICAgIH0KKyAgICAKKyAgICBpZiAobWF4SW5kZXggPj0gMCkgeworICAgICAgICAv
LyBUaGUgbnVtYmVyIG9mIHJlcXVpcmVkIGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG1h
eGltdW0KKyAgICAgICAgLy8gaW5kZXggdGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgorICAgICAgICBu
dW1FbGVtZW50c1JlcXVpcmVkID0gbWF4SW5kZXggKyAxOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0MzRHNpemVpIGNvdW50LCBH
QzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVx
dWlyZWQpCit7CisgICAgQVNTRVJUKGNvdW50ID49IDAgJiYgb2Zmc2V0ID49IDApOworICAgIHVu
c2lnbmVkIGxhc3RJbmRleCA9IDA7CisgICAgCisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVt
ZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpOworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBudW1FbGVtZW50
c1JlcXVpcmVkID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlm
ICghZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHVuc2lnbmVkIGxvbmcgdW9mZnNldCA9IG9mZnNldDsKKyAg
ICB1bnNpZ25lZCBsb25nIG4gPSBjb3VudDsKKyAgICAKKyAgICBpZiAodHlwZSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBl
bGVtZW50IG9mZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVpbnQpOworICAg
ICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oZWxl
bWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7
CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5k
ZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX1NIT1JUKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4K
KyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgIGNvbnN0IEdD
M0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oZWxlbWVudEFycmF5
QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7CisgICAgICAg
IHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgpCisgICAg
ICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUp
IHsKKyAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVi
eXRlKj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSAr
IHVvZmZzZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAg
PiBsYXN0SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAg
ICArK3A7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlbiBzZXQgdGhlIGxhc3Qg
aW5kZXggaW4gdGhlIGluZGV4IGFycmF5IGFuZCBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCisgICAg
bnVtRWxlbWVudHNSZXF1aXJlZCA9IGxhc3RJbmRleCArIDE7CisgICAgcmV0dXJuIG51bUVsZW1l
bnRzUmVxdWlyZWQgPiAwOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHBy
aW1pdGl2ZUNvdW50KQoreworICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRy
aWIgYW5kIGNoZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAgICAg
aWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZh
bGlkYXRlQmluZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAK
KyAgICBpZiAoZWxlbWVudENvdW50IDw9IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIAorICAgIC8vIExvb2sgaW4gZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUg
Y3VycmVudCBwcm9ncmFtKS4KKyAgICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNl
OworICAgIGJvb2wgc2F3RW5hYmxlZEF0dHJpYiA9IGZhbHNlOworICAgIGludCBudW1BY3RpdmVB
dHRyaWJMb2NhdGlvbnMgPSBtX2N1cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlv
bnMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsg
KytpKSB7CisgICAgICAgIGludCBsb2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRy
aWJMb2NhdGlvbihpKTsKKyAgICAgICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0
PGludD4obV9tYXhWZXJ0ZXhBdHRyaWJzKSkgeworICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShsb2MpOworICAgICAgICAgICAgaWYg
KHN0YXRlLmVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAvLyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVt
ZW50cyBjb21wdXRhdGlvbi4KKyAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVu
dCwgd2Ugd2lsbCBvbmx5IHRvdWNoIHRoZSBkYXRhIGZvciB0aGUKKyAgICAgICAgICAgICAgICAv
LyBlbGVtZW50IGFuZCBub3RoaW5nIGJleW9uZCBpdC4KKyAgICAgICAgICAgICAgICBpbnQgYnl0
ZXNSZW1haW5pbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVM
ZW5ndGgoKSAtIHN0YXRlLm9mZnNldCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxl
bWVudHMgPSAwOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYnl0ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50
KQorICAgICAgICAgICAgICAgICAgICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcg
LSBzdGF0ZS5ieXRlc1BlckVsZW1lbnQpIC8gc3RhdGUuc3RyaWRlOworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGluc3RhbmNlc1JlcXVpcmVkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc3Rh
dGUuZGl2aXNvcikgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNl
aWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghc2F3Tm9uSW5z
dGFuY2VkQXR0cmliICYmIHNhd0VuYWJsZWRBdHRyaWIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5vYmplY3QoKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0IG9yIG9iamVjdCBkZWxldGVkIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRl
eHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5v
dCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWl0aXZlQ291
bnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3
TW9kZShmdW5jdGlvbk5hbWUsIG1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGZpcnN0IDwgMCB8fCBjb3VudCA8IDApIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIGlmICghY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHBy
aW1pdGl2ZUNvdW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghaXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZl
IGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8R0Mz
RGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2Vk
Q291bnQ7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQ
cmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CisgICAgICAgIGlmIChjaGVja2VkU3VtLmhh
c092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8
ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hlY2tl
ZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0
cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVm
ZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVh
c29uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzKEdDM0Rl
bnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlRHJh
d0FycmF5cygiZHJhd0FycmF5cyIsIG1vZGUsIGZpcnN0LCBjb3VudCwgMCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIAorICAgIGJvb2wgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KQorICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIw
KGZpcnN0ICsgY291bnQgLSAxKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAg
ICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0FycmF5cyIsIHRydWUpOworICAgIAor
ICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworICAgIAorICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAg
ICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYg
KCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3Mo
ImRyYXdBcnJheXMiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50cywgR0MzRHNp
emVpIHByaW1pdGl2ZUNvdW50KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25O
YW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKKyAgICAgICAgaWYgKG1fb2VzRWxlbWVu
dEluZGV4VWludCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
Y291bnQgb3Igb2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIGlmICghY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByaW1pdGl2ZUNvdW50IDwg
MCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1F
TlRfQVJSQVlfQlVGRkVSIGJvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsK
KyAgICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKKyAgICAg
ICAgaWYgKCF2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0
PEdDM0RpbnRwdHI+KG9mZnNldCkpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInJlcXVl
c3Qgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVudCBFTEVNRU5UX0FSUkFZX0JVRkZFUiIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghY291bnQpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBDaGVja2VkPEdDM0Rp
bnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOworICAgICAgICBDaGVja2Vk
PEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZl
Q291bnQpOworICAgICAgICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVj
a2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghdmFs
aWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRh
dGVWZXJ0ZXhBdHRyaWJ1dGVzKG51bUVsZW1lbnRzLCBjaGVja2VkUHJpbWl0aXZlQ291bnQudW5z
YWZlR2V0KCkpKSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2Uo
Y2hlY2tlZENvdW50LnVuc2FmZUdldCgpLCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVt
ZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMi
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcygw
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0
bHkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nl
c3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgCisgICAgdW5zaWduZWQgbnVtRWxlbWVu
dHMgPSAwOworICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50cyIsIG1v
ZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzLCAwKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgYm9vbCB2ZXJ0ZXhB
dHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsK
KyAgICAgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgICAgIHZhbGlkYXRlSW5kZXhBcnJh
eVByZWNpc2UoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51
bUVsZW1lbnRzKTsKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVy
dGV4QXR0cmliMChudW1FbGVtZW50cyk7CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJp
Y3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHMiLCB0
cnVlKTsKKyAgICAKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlw
ZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CisgICAgCisgICAgaWYgKCFpc0dM
RVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgcmVzdG9y
ZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1l
bnRzIiwgZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJlbmFibGUiLCBj
YXApKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9URVNUKSB7CisgICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgPSB0cnVlOworICAgICAg
ICBhcHBseVN0ZW5jaWxUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CisgICAgICAgIG1fc2Npc3Nv
ckVuYWJsZWQgPSB0cnVlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsK
KyAgICB9CisgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGluZGV4ID49
IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImlu
ZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91
bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgIHN0
YXRlLmVuYWJsZWQgPSB0cnVlOworICAgIAorICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZp
bmlzaCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+ZmluaXNoKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Zmx1c2goKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFdlYkdMUmVuZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIs
IHRhcmdldCwgYXR0YWNobWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVm
ZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAo
KSwgdGhpcykpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gYnVmZmVy
IG9yIGJ1ZmZlciBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRh
dGVkOyBhbGwgY3VycmVudAorICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVy
bmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXJPYmpl
Y3QgPSBvYmplY3RPclplcm8oYnVmZmVyKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAg
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmpl
Y3QpOworICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0
LCBidWZmZXJPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVu
ZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgYnVm
ZmVyKTsKKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwg
R0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVm
ZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2ht
ZW50KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChsZXZlbCkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVy
VGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUg
bm90IGZyb20gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8g
RG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1
cnJlbnQKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBs
YWNlIG9mIHRoZSBkZWZhdWx0CisgICAgLy8gRkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFt
ZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9y
WmVybyh0ZXh0dXJlKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
QVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVO
VDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAg
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0
YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgIH0KKyAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyb250RmFjZShHQzNEZW51
bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPmZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdl
YkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAi
LCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghdGV4LT5jYW5HZW5lcmF0ZU1pcG1hcHMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIs
ICJsZXZlbCAwIG5vdCBwb3dlciBvZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIzOTE2LiBDb21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBh
bGxvd2VkIGluIFdlYkdMIDI6CisgICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2VuZXJhdGVNaXBtYXAiLCAidHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21w
cmVzc2VkIHRleHR1cmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlk
YXRlU2V0dGFibGVUZXhGb3JtYXQoImdlbmVyYXRlTWlwbWFwIiwgdGV4LT5nZXRJbnRlcm5hbEZv
cm1hdCh0YXJnZXQsIDApKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIGdlbmVyYXRl
TWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVyIGlzIG5vdCBORUFSRVNUX01J
UE1BUF9MSU5FQVIKKyAgICAvLyBvbiBNYWMuIFJlbW92ZSB0aGUgaGFjayBvbmNlIHRoaXMgZHJp
dmVyIGJ1ZyBpcyBmaXhlZC4KKyNpZiBPUyhEQVJXSU4pCisgICAgYm9vbCBuZWVkVG9SZXNldE1p
bkZpbHRlciA9IGZhbHNlOworICAgIGlmICh0ZXgtPmdldE1pbkZpbHRlcigpICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpIHsKKyAgICAgICAgbV9jb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUik7CisgICAgICAgIG5l
ZWRUb1Jlc2V0TWluRmlsdGVyID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAgICBtX2NvbnRleHQt
PmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CisjaWYgT1MoREFSV0lOKQorICAgIGlmIChuZWVkVG9S
ZXNldE1pbkZpbHRlcikKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGV4LT5nZXRNaW5GaWx0ZXIo
KSk7CisjZW5kaWYKKyAgICB0ZXgtPmdlbmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7Cit9CisKK1Bh
c3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRB
Y3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVBdHRyaWIi
LCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgQWN0aXZlSW5mbyBpbmZv
OworICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHByb2dy
YW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIExP
RyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgYXR0cmlidXRlICVkOiAlcyIsIGluZGV4LCBpbmZv
Lm5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgCisgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6
Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworfQorCitQYXNzUmVmUHRy
PFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlVW5p
Zm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9n
cmFtKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQWN0aXZlSW5mbyBpbmZvOworICAgIGlmICgh
bV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgs
IGluZm8pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlh
bnQoKSkgeworICAgICAgICBpZiAoaW5mby5zaXplID4gMSAmJiAhaW5mby5uYW1lLmVuZHNXaXRo
KCJbMF0iKSkKKyAgICAgICAgICAgIGluZm8ubmFtZS5hcHBlbmQoIlswXSIpOworICAgIH0KKyAg
ICAKKyAgICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZlIHVuaWZvcm0gJWQ6ICVzIiwgaW5k
ZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAKKyAgICByZXR1cm4gV2ViR0xBY3Rp
dmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3Rz
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIHNoYWRl
ck9iamVjdHMuY2xlYXIoKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGNvbnN0IEdDM0RlbnVtIHNoYWRlclR5cGVbXSA9
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIsCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIKKyAgICB9OworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplb2Yoc2hhZGVyVHlwZSkgLyBzaXplb2YoR0MzRGVudW0pOyArK2kp
IHsKKyAgICAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hh
ZGVyKHNoYWRlclR5cGVbaV0pOworICAgICAgICBpZiAoc2hhZGVyKQorICAgICAgICAgICAgc2hh
ZGVyT2JqZWN0cy5hcHBlbmQoc2hhZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0cmliTG9jYXRpb24oV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0cmliTG9j
YXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmICghdmFsaWRhdGVM
b2NhdGlvbkxlbmd0aCgiZ2V0QXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkp
CisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdldEF0dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOworICAgICAg
ICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0
aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9C
VUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGlmIChwbmFtZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUgJiYgcG5hbWUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkJVRkZFUl9VU0FHRSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
KyAgICAKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclBh
cmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgaWYgKHBuYW1lID09IEdyYXBo
aWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2
YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFs
dWUpKTsKK30KKworUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gV2Ug
YWx3YXlzIG5lZWQgdG8gcmV0dXJuIGEgbmV3IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgb2JqZWN0
IHRvCisgICAgLy8gcHJldmVudCB0aGUgdXNlciBmcm9tIG11dGF0aW5nIGFueSBjYWNoZWQgdmVy
c2lvbi4KKyAgICAKKyAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2UgcmVxdWVzdGVkIHZh
bHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAorICAgIC8vIGFuZCBzdGVuY2lsLCByZWdhcmRsZXNz
IG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCisgICAgLy8gR3JhcGhpY3NDb250
ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRl
cz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZShtX2NvbnRleHQt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOworICAgIGlmICghbV9hdHRyaWJ1dGVzLmRlcHRoKQor
ICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7CisgICAgaWYgKCFtX2F0dHJpYnV0
ZXMuc3RlbmNpbCkKKyAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNpbChmYWxzZSk7CisgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBUaGUgRHJhd2luZ0J1ZmZlciBvYnRh
aW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRy
aWJ1dGVzKCksCisgICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3duIGRldGVybWluYXRpb24g
b2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KKyAgICAgICAgYXR0cmlidXRl
cy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1wbGUoKSk7CisgICAgfQor
ICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKK30KKworR0MzRGVudW0gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXJyb3IoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKK30KKworV2ViR0xFeHRlbnNpb24q
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfYmxl
bmRfbWlubWF4IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBv
cnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpIHsKKyAgICAgICAgaWYgKCFtX2V4dEJsZW5kTWlu
TWF4KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIpOworICAgICAgICAgICAgbV9leHRCbGVuZE1pbk1h
eCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7CisgICAgICAgIGlmICgh
bV9leHRzUkdCKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsKKyAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0ZDo6
bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1f
ZXh0c1JHQi5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJF
WFRfZnJhZ19kZXB0aCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgeworICAgICAgICBpZiAoIW1fZXh0RnJhZ0Rl
cHRoKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKKyAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRoID0g
c3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKKyAgICAgICAgJiYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRl
cl90ZXh0dXJlX2xvZCIpKSkgeworICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxPRCkg
eworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIG1fZXh0U2hhZGVyVGV4
dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsKKyAg
ICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgeworICAg
ICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPih0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgeworICAgICAg
ICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyIpOworICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjptYWtl
X3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOworICAgIH0KKyAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKKyAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9h
dCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1RleHR1cmVGbG9hdD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2Vz
VGV4dHVyZUZsb2F0LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpIHsK
KyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zs
b2F0X2xpbmVhciIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOworICAgIH0KKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQorICAg
ICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKSkgeworICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdCkg
eworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhh
bGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsKKyAg
ICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBw
b3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgeworICAgICAgICBpZiAo
IW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRf
bGluZWFyIik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7CisgICAg
fQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKKyAgICAgICAgaWYgKCFtX29lc1ZlcnRleEFy
cmF5T2JqZWN0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAgICAgICAgIG1f
b2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5T2Jq
ZWN0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJheU9i
amVjdC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNf
ZWxlbWVudF9pbmRleF91aW50IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKKyAgICAgICAgaWYg
KCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7Cisg
ICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU0Vs
ZW1lbnRJbmRleFVpbnQ+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29lc0Vs
ZW1lbnRJbmRleFVpbnQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsTG9zZUNv
bnRleHQpCisgICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VDb250
ZXh0LmdldCgpOworICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJL
SVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQorICAgICAgICAmJiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dlYmds
Q29tcHJlc3NlZFRleHR1cmVBVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1
cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRoaXMp
OworICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOworICAg
IH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJl
c3NlZF90ZXh0dXJlX3B2cnRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9
IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOworICAgIH0K
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVy
ZV9zM3RjIikKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRl
ZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMpCisg
ICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3VuaXF1
ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7CisgICAgICAgIHJldHVybiBtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQorICAgICAgICAmJiBXZWJHTERl
cHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7CisgICAgICAgIGlm
ICghbV93ZWJnbERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsKKyAg
ICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVw
dGhUZXh0dXJlPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV93ZWJnbERlcHRo
VGV4dHVyZS5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKKyAgICAgICAg
aWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAgICAg
ICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1ZmZl
cnM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZlcnMu
Z2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykp
IHsKKyAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFu
Y2VkX2FycmF5cyIpOworICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0ZDo6
bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOworICAgIH0KKyAgICBpZiAo
YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgICAgICBtX3dlYmdsRGVi
dWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlckluZm8+
KHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5nZXQo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdM
X2RlYnVnX3NoYWRlcnMiKQorICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgeworICAg
ICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQorICAgICAgICAgICAgICAgIG1fd2Vi
Z2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0aGlz
KTsKKyAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCitXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0
ZXJzKCJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0YXJnZXQsIGF0dGFjaG1l
bnQpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgCisgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZl
ciBib3VuZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAor
ICAgIFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0
QXR0YWNobWVudE9iamVjdChhdHRhY2htZW50KTsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAg
ICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
T0JKRUNUX1RZUEUpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29u
dGV4dDNEOjpOT05FKTsKKyAgICAgICAgLy8gT3BlbkdMIEVTIDIuMCBzcGVjaWZpZXMgSU5WQUxJ
RF9FTlVNIGluIHRoaXMgY2FzZSwgd2hpbGUgZGVza3RvcCBHTAorICAgICAgICAvLyBzcGVjaWZp
ZXMgSU5WQUxJRF9PUEVSQVRJT04uCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorICAgIAorICAgIEFTU0VSVChvYmplY3QtPmlzVGV4dHVyZSgpIHx8IG9i
amVjdC0+aXNSZW5kZXJidWZmZXIoKSk7CisgICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkpIHsK
KyAgICAgICAgc3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRSk7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Cisg
ICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihy
ZWludGVycHJldF9jYXN0PFdlYkdMVGV4dHVyZSo+KG9iamVjdCkpKTsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RF
WFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAgICAgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7CisgICAgICAgICAgICBHQzNEaW50
IHZhbHVlID0gMDsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIpOworICAgICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKTsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4o
cmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCkpKTsKKyAgICAgICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdf
RVhUOiB7CisgICAgICAgICAgICBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyID0gcmVp
bnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCk7CisgICAgICAgICAgICBH
QzNEZW51bSByZW5kZXJCdWZmZXJGb3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9y
bWF0KCk7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lv
bnMzRDo6U1JHQl9FWFQgJiYgcmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lvbnMzRDo6U1JH
Ql9BTFBIQV9FWFQpOworICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlckZvcm1hdCA9PSBFeHRl
bnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9FWFQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhFeHRlbnNpb25zM0Q6OlNSR0JfRVhUKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIH0KKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsKKyAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgIH0KK30KKworV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgY29uc3QgaW50IGludFplcm8gPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKKyAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJH
TEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRB
cnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFf
QklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6CisgICAgICAgIHJldHVybiBnZXRC
b29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RF9DT0xPUjoKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgorICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9SR0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFV
QVRJT05fQUxQSEE6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgorICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RF9TUkNfUkdCOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMVUVfQklUUzoKKyAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQ0xFQVJfVkFMVUU6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoK
KyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oVWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5kYXRhKCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKKyAgICAgICAgcmV0dXJuIGdl
dEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNV
TExfRkFDRV9NT0RFOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50
UHJvZ3JhbSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6CisgICAg
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKKyAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oaW50WmVybyk7CisgICAgICAgIHJldHVybiBn
ZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NMRUFSX1ZBTFVFOgorICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0ZVTkM6CisgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6CisgICAg
ICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9XUklURU1BU0s6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAg
ICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBh
c3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9GQUNFOgorICAgICAgICByZXR1cm4gZ2V0VW5z
aWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdF
TkVSQVRFX01JUE1BUF9ISU5UOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CisgICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTkVfV0lEVEg6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6CisgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJC
VUZGRVJfU0laRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9URVhUVVJFX1NJWkU6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6Cisg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhU
VVJFX0lNQUdFX1VOSVRTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVM6CisgICAgICAgIHJldHVybiBnZXRXZWJHTElu
dEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1f
U0hBREVSX0JJTkFSWV9GT1JNQVRTOgorICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5
cyByZXR1cm4gMCBmb3IgdGhpcz8KKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9G
SUxMOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6CisgICAgICAgIHJldHVy
biBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVEX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVm
ZmVyQmluZGluZykpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IFdlYkdMIikpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9CVUZGRVJTOgorICAgICAgICByZXR1cm4gZ2V0
SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVf
Q09WRVJBR0VfSU5WRVJUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgor
ICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNBTVBMRVM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgICAgICBy
ZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFH
RV9WRVJTSU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEu
MCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xB
TkdVQUdFX1ZFUlNJT04pICsgIikiKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0JBQ0tfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKKyAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6CisgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9CQUNLX1JFRjoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6
CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JJVFM6CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgIW1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhpbnRaZXJvKTsKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKKyAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKKyAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9N
QVNLOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgorICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZykpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5p
dHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0ZMSVBfWV9XRUJHTDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZ
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFf
V0VCR0w6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05W
RVJTSU9OX1dFQkdMOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3Jz
cGFjZUNvbnZlcnNpb24pOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhTdHJpbmcoIldlYktpdCIpKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJX
ZWJHTCAxLjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVS
U0lPTikgKyAiKSIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgorICAg
ICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMKKyAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZl
cykKKyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25z
M0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90
IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2Vi
R0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6CisgICAgICAgIGlm
IChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3Jl
bmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OworICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdM
OgorICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6
VkVORE9SKSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VC
R0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5H
X09FUzogLy8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICAgICAgaWYgKG1fb2VzVmVydGV4
QXJyYXlPYmplY3QpIHsKKyAgICAgICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5pc0RlZmF1bHRPYmplY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0KSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0K
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2Fy
cmF5X29iamVjdCBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDog
Ly8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAgICAgIGlmIChtX2V4dFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYykKKyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmls
dGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDog
Ly8gRVhUX2RyYXdfYnVmZmVycyBCRUdJTgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJz
KQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRz
KCkpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2Ry
YXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgorICAgICAgICBp
ZiAobV93ZWJnbERyYXdCdWZmZXJzKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhn
ZXRNYXhEcmF3QnVmZmVycygpKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1
ZmZlcnMKKyAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIw
X0VYVAorICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5z
aW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKKyAgICAg
ICAgICAgIEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAg
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKKyAgICAgICAgICAgIGVs
c2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNr
RHJhd0J1ZmZlcjsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVT
RURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1QYXJhbWV0ZXIiLCBwcm9ncmFtKSkKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIAorICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAg
IHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RB
VFVTOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHByb2dyYW0tPmlzRGVsZXRlZCgpKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWQUxJREFURV9TVEFUVVM6CisgICAgICAgIG1f
Y29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUp
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUzoKKyAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFUVEFDSEVEX1NIQURFUlM6CisgICAgICAgIG1fY29udGV4dC0+Z2V0
UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFDVElWRV9BVFRSSUJVVEVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9V
TklGT1JNUzoKKyAgICAgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291
bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1QYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiAiIjsKKyAg
ICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVj
dE9yWmVybyhwcm9ncmFtKSkpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgaWYgKCFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgIm5vIHJlbmRlcmJ1ZmZlciBib3VuZCIpOwor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGlmIChtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1NURU5DSUwKKyAgICAgICAgJiYgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+aXNW
YWxpZCgpKSB7CisgICAgICAgIEFTU0VSVCghaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7Cisg
ICAgICAgIGludCB2YWx1ZSA9IDA7CisgICAgICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1dJRFRIOgorICAgICAgICAgICAg
dmFsdWUgPSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdI
VDoKKyAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9HUkVFTl9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfQkxVRV9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJf
REVQVEhfU0laRToKKyAgICAgICAgICAgIHZhbHVlID0gMjQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1NURU5DSUxfU0la
RToKKyAgICAgICAgICAgIHZhbHVlID0gODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgorICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldElu
dGVybmFsRm9ybWF0KCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lE
VEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgorICAgICAgICBtX2NvbnRleHQtPmdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworV2ViR0xH
ZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclBhcmFtZXRlcihXZWJH
TFNoYWRlciogc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJQYXJhbWV0ZXIiLCBzaGFkZXIpKQorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAg
c3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFTEVURV9TVEFU
VVM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc2hhZGVyLT5pc0RlbGV0ZWQoKSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVM6CisgICAgICAgIG1fY29u
dGV4dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIHBuYW1lLCAmdmFsdWUpOwor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBREVSX1RZUEU6CisgICAgICAgIG1fY29udGV4
dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIHBuYW1lLCAmdmFsdWUpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitTdHJp
bmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRl
ciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlckluZm9Mb2ciLCBzaGFk
ZXIpKQorICAgICAgICByZXR1cm4gIiI7CisgICAgcmV0dXJuIGVuc3VyZU5vdE51bGwobV9jb250
ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG9iamVjdE9yWmVybyhzaGFkZXIpKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51
bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01F
TlRfU0hBREVSOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJl
Y2lzaW9uRm9ybWF0IiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxPV19GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpN
RURJVU1fRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1FRElVTV9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9JTlQ6
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQiLCAiaW52YWxpZCBwcmVjaXNpb24gdHlwZSIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgCisgICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKKyAgICBHQzNEaW50
IHByZWNpc2lvbiA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQo
c2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOworICAgIHJldHVy
biBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwg
cHJlY2lzaW9uKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNo
YWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdl
dFNoYWRlclNvdXJjZSIsIHNoYWRlcikpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4g
ZW5zdXJlTm90TnVsbChzaGFkZXItPmdldFNvdXJjZSgpKTsKK30KKworVmVjdG9yPFN0cmluZz4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpCit7Cisg
ICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworICAgIAorICAgIGlmIChtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX2JsZW5kX21pbm1heCIpKQor
ICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRfYmxlbmRfbWlubWF4Iik7CisgICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NSR0IiKSkKKyAgICAgICAg
cmVzdWx0LmFwcGVuZCgiRVhUX3NSR0IiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfZnJhZ19kZXB0aCIpKQorICAgICAgICByZXN1bHQuYXBw
ZW5kKCJFWFRfZnJhZ19kZXB0aCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0IikpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoIk9FU190ZXh0dXJlX2Zsb2F0Iik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOworICAgIGlmIChtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQi
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAg
IGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJl
X2hhbGZfZmxvYXRfbGluZWFyIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJl
X2hhbGZfZmxvYXRfbGluZWFyIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAgIGlmIChtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB8
fCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FSQl9zaGFkZXJfdGV4
dHVyZV9sb2QiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJX
RUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgaWYgKG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qi
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAg
ICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVu
dF9pbmRleF91aW50IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU19lbGVtZW50X2luZGV4
X3VpbnQiKTsKKyAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9sb3NlX2NvbnRleHQiKTsKKyAgICBp
ZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpOworICAg
IGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIp
OworICAgIGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKHRoaXMpKQor
ICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpOwor
ICAgIGlmIChXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkp
KQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZXB0aF90ZXh0dXJlIik7CisgICAgaWYg
KHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZHJh
d19idWZmZXJzIik7CisgICAgaWYgKEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhp
cykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKKyAg
ICAKKyAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmICht
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRf
c2hhZGVyX3NvdXJjZSIpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdf
c2hhZGVycyIpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9p
bmZvIik7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1
cmVCaW5kaW5nKCJnZXRUZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRl
eCkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIEdDM0RpbnQgdmFsdWUgPSAw
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5f
RklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgorICAgICAgICBtX2NvbnRl
eHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKSk7CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOworICAgICAgICB9CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
IG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFt
KSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGlmICghdW5pZm9ybUxvY2F0
aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJvZ3JhbSgpICE9IHByb2dyYW0pIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
Z2V0VW5pZm9ybSIsICJubyB1bmlmb3JtbG9jYXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHBy
b2dyYW0iKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICBHQzNE
aW50IGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0aW9uLT5sb2NhdGlvbigpOworICAgIAorICAgIEdD
M0RlbnVtIGJhc2VUeXBlOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICBzd2l0Y2ggKHVuaWZv
cm1Mb2NhdGlvbi0+dHlwZSgpKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVu
Z3RoID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9P
TF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAg
ICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCT09MX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJP
T0w7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkJPT0xfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUM0OgorICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMjoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxl
bmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwor
ICAgICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVF9WRUM0OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDM6CisgICAgICAgIGJhc2VUeXBl
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA5OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQ0OgorICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0g
MTY7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJf
MkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFOgorICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIENhbid0IGhhbmRsZSB0aGlz
IHR5cGUKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVuaGFuZGxlZCB0eXBlIik7CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgc3dpdGNoIChiYXNlVHlwZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiB7CisgICAgICAgIEdDM0RmbG9hdCB2YWx1ZVsx
Nl0gPSB7MH07CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWZ2RVhUKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDE2ICogc2l6ZW9mKEdDM0RmbG9hdCksIHZhbHVl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtZnYob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3Ro
ID09IDEpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3Ro
KSk7CisgICAgfQorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDogeworICAgICAgICBH
QzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBw
b3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZv
cm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdDM0Rp
bnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5p
Zm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAg
aWYgKGxlbmd0aCA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZVsw
XSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVl
LCBsZW5ndGgpKTsKKyAgICB9CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDogewor
ICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5l
c3NFWFRTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
Z2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6
ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsK
KyAgICAgICAgaWYgKGxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIGJvb2wgYm9vbFZhbHVlWzE2
XSA9IHswfTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBsZW5ndGg7IGor
KykKKyAgICAgICAgICAgICAgICBib29sVmFsdWVbal0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1
ZVtqXSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGJvb2xWYWx1ZSwgbGVuZ3Ro
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJv
b2w+KHZhbHVlWzBdKSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGdldCBoZXJlLCBzb21ldGhpbmcgd2Vu
dCB3cm9uZyBpbiBvdXIgdW5mb3J0dW5hdGVseSBjb21wbGV4IGxvZ2ljIGFib3ZlCisgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlm
b3JtIiwgInVua25vd24gZXJyb3IiKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cit9CisK
K1Bhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBuYW1l
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiZ2V0
VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
IChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtTG9jYXRp
b24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CisgICAgaWYgKHVuaWZvcm1Mb2Nh
dGlvbiA9PSAtMSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgR0MzRGludCBh
Y3RpdmVVbmlmb3JtcyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3lt
Ym9sQ291bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZF
X1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9ybXMpOworICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8
IGFjdGl2ZVVuaWZvcm1zOyBpKyspIHsKKyAgICAgICAgQWN0aXZlSW5mbyBpbmZvOworICAgICAg
ICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSks
IGksIGluZm8pKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIC8vIFN0cmlw
ICJbMF0iIGZyb20gdGhlIG5hbWUgaWYgaXQncyBhbiBhcnJheS4KKyAgICAgICAgaWYgKGluZm8u
bmFtZS5lbmRzV2l0aCgiWzBdIikpCisgICAgICAgICAgICBpbmZvLm5hbWUgPSBpbmZvLm5hbWUu
bGVmdChpbmZvLm5hbWUubGVuZ3RoKCkgLSAzKTsKKyAgICAgICAgLy8gSWYgaXQncyBhbiBhcnJh
eSwgd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggZWFjaCBlbGVtZW50LCBhcHBlbmRpbmcgIltp
bmRleF0iIHRvIHRoZSBuYW1lLgorICAgICAgICBmb3IgKEdDM0RpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGluZm8uc2l6ZTsgKytpbmRleCkgeworICAgICAgICAgICAgU3RyaW5nIHVuaWZvcm1OYW1l
ID0gaW5mby5uYW1lICsgIlsiICsgU3RyaW5nOjpudW1iZXIoaW5kZXgpICsgIl0iOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAobmFtZSA9PSB1bmlmb3JtTmFtZSB8fCBuYW1lID09IGlu
Zm8ubmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNy
ZWF0ZShwcm9ncmFtLCB1bmlmb3JtTG9jYXRpb24sIGluZm8udHlwZSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIAor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICAKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiZ2V0VmVydGV4QXR0cmliIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGNvbnN0IFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgIAorICAgIGlmIChtX2Fu
Z2xlSW5zdGFuY2VkQXJyYXlzICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0RJVklTT1JfQU5HTEUpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
c3RhdGUuZGl2aXNvcik7CisgICAgCisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAg
ICAgIGlmICgoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiAhaW5kZXggJiYgbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKS5idWZmZXJCaW5kaW5nID09IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlcikKKyAgICAgICAgICAgIHx8ICFzdGF0ZS5idWZmZXJCaW5kaW5nCisg
ICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFz
c1JlZlB0cjxXZWJHTEJ1ZmZlcj4oc3RhdGUuYnVmZmVyQmluZGluZykpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5lbmFibGVkKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGUubm9ybWFsaXplZCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0
YXRlLnNpemUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJS
QVlfU1RSSURFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm9yaWdpbmFsU3Ry
aWRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZ
UEU6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUudHlwZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKG1fdmVydGV4QXR0cmliVmFsdWVbaW5k
ZXhdLnZhbHVlLCA0KSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFZlcnRleEF0dHJpYiIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAg
ICB9Cit9CisKK2xvbmcgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhB
dHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIEdDM0RzaXpl
aXB0ciByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5h
bWUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHJlc3VsdCk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOworICAgIHN3aXRjaCAodGFyZ2V0KSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAg
ICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcworICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKQorICAgICAg
ICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIWlz
VmFsaWQpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2NvbnRleHQtPmhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xl
YW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZl
cikKK3sKKyAgICBpZiAoIWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIGlmICghYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzQnVmZmVy
KGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmlzQ29udGV4dExvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRMb3N0OworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzQ29udGV4dExvc3RPclBlbmRpbmco
KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gJiYgIW1faGFzUmVxdWVz
dGVkUG9saWN5UmVzb2x1dGlvbikgeworICAgICAgICBMT0coV2ViR0wsICJDb250ZXh0IGlzIGJl
aW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgcG9saWN5LiIpOworICAgICAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgpOworICAg
ICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpOworICAgICAgICBpZiAocGFnZSAmJiAh
ZG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFt
ZSgpLmxvYWRlcigpLmNsaWVudCgpLnJlc29sdmVXZWJHTFBvbGljeUZvclVSTChkb2N1bWVudC51
cmwoKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkgZG8gYW55dGhpbmcg
d2l0aCB0aGUgcmVzdWx0IGZyb20gcmVzb2x1dGlvbi4gQSBtb3JlCisgICAgICAgIC8vIGNvbXBs
ZXRlIGltcGxlbWVudGF0aW9uIG1pZ2h0IHRyeSB0byBjb25zdHJ1Y3QgYSByZWFsIGNvbnRleHQs
IGV0YyBhbmQgcHJvY2VlZAorICAgICAgICAvLyB3aXRoIG5vcm1hbCBvcGVyYXRpb24uCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkxMjIKKyAg
ICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
OworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0VuYWJsZWQo
R0MzRGVudW0gY2FwKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlQ2FwYWJpbGl0eSgiaXNFbmFibGVkIiwgY2FwKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKQorICAgICAgICBy
ZXR1cm4gbV9zdGVuY2lsRW5hYmxlZDsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQo
Y2FwKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNGcmFt
ZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1l
YnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgaWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyLT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9n
cmFtIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKK30K
KworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNSZW5kZXJidWZmZXIo
V2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRlcmJ1ZmZl
ciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIGlmICghcmVuZGVyYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCisgICAgICAgIHJldHVy
biAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1
ZmZlci0+b2JqZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyIHx8
IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
cmV0dXJuIG1fY29udGV4dC0+aXNTaGFkZXIoc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK0dDM0Ri
b29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUq
IHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKCF0ZXh0dXJlLT5oYXNFdmVyQmVl
bkJvdW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQt
PmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5saW5l
V2lkdGgod2lkdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmxpbmtQ
cm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJsaW5rUHJvZ3JhbSIsIHByb2dyYW0pKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgV2ViR0xTaGFkZXIq
IHZlcnRleFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICAgICAgV2ViR0xTaGFkZXIqIGZyYWdtZW50U2hhZGVy
ID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5U
X1NIQURFUik7CisgICAgICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlz
VmFsaWQoKSB8fCAhZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc1ZhbGlkKCkg
fHwgIW1fY29udGV4dC0+cHJlY2lzaW9uc01hdGNoKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIp
LCBvYmplY3RPclplcm8oZnJhZ21lbnRTaGFkZXIpKSB8fCAhbV9jb250ZXh0LT5jaGVja1Zhcnlp
bmdzUGFja2luZyhvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdt
ZW50U2hhZGVyKSkpIHsKKyAgICAgICAgICAgIHByb2dyYW0tPnNldExpbmtTdGF0dXMoZmFsc2Up
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1fY29u
dGV4dC0+bGlua1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKKyAgICBwcm9ncmFtLT5p
bmNyZWFzZUxpbmtDb3VudCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBu
YW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoK
KyAgICAgICAgbV91bnBhY2tGbGlwWSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAg
ICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dF
QkdMOgorICAgICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVG
QVVMVF9XRUJHTCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICAgICAg
ICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4o
cGFyYW0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgZm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAy
IHx8IHBhcmFtID09IDQgfHwgcGFyYW0gPT0gOCkgeworICAgICAgICAgICAgaWYgKHBuYW1lID09
IEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKKyAgICAgICAgICAgICAgICBtX3Bh
Y2tBbGlnbm1lbnQgPSBwYXJhbTsKKyAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQ6CisgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQg
PSBwYXJhbTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFt
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgZm9yIGFsaWdubWVudCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNE
ZmxvYXQgdW5pdHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAvLyBEdWUgdG8gV2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMsIGl0
IGlzIG5vdCBwb3NzaWJsZSB0bworICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhlIFdl
YkdMIEFQSS4KKyAgICBBU1NFUlQoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOworICAgIC8vIFZh
bGlkYXRlIGlucHV0IHBhcmFtZXRlcnMuCisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFkUGl4
ZWxzIiwgIm5vIGRlc3RpbmF0aW9uIEFycmF5QnVmZmVyVmlldyIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJy
ZWFkUGl4ZWxzIiwgImludmFsaWQgZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEgfHwgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZWFkUGl4ZWxzIiwgImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJR05F
RF9CWVRFIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gVmFsaWRhdGUgYXJyYXkg
dHlwZSBhZ2FpbnN0IHBpeGVsIHR5cGUuCisgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpT
Qzo6VHlwZVVpbnQ4KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5v
dCBVaW50OEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciog
cmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4
dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
ICJyZWFkUGl4ZWxzIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBD
YWxjdWxhdGUgYXJyYXkgc2l6ZSwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FM
SUdOTUVOVC4KKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzUmVxdWlyZWQgPSAwOworICAgIHVuc2ln
bmVkIHBhZGRpbmcgPSAwOworICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsK
KyAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxC
eXRlc1JlcXVpcmVkLCAmcGFkZGluZyk7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9y
LCAicmVhZFBpeGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5
dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3
IG5vdCBsYXJnZSBlbm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIHZv
aWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CisgICAgCisgICAgeworICAgICAgICBT
Y29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhU
U3VwcG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlYWRu
UGl4ZWxzRVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5ieXRl
TGVuZ3RoKCksIGRhdGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPnJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICB9
CisgICAgCisjaWYgT1MoREFSV0lOKQorICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRl
ZCkgLy8gd2UgaGF2ZW4ndCBjb21wdXRlZCBwYWRkaW5nCisgICAgICAgIG1fY29udGV4dC0+Y29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tB
bGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICAvLyBGSVhNRTog
cmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xF
UyBkcml2ZXIgYnVnCisgICAgLy8gb24gUUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMg
b2ZmLCByZWFkUGl4ZWxzIHNob3VsZAorICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBv
ZiAwLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKTsKKyAgICAgICAgZm9yIChH
QzNEc2l6ZWkgaXkgPSAwOyBpeSA8IGhlaWdodDsgKytpeSkgeworICAgICAgICAgICAgZm9yIChH
QzNEc2l6ZWkgaXggPSAwOyBpeCA8IHdpZHRoOyArK2l4KSB7CisgICAgICAgICAgICAgICAgcGl4
ZWxzWzNdID0gMjU1OworICAgICAgICAgICAgICAgIHBpeGVscyArPSA0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcGl4ZWxzICs9IHBhZGRpbmc7CisgICAgICAgIH0KKyAgICB9CisjZW5k
aWYKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPnJlbGVhc2VTaGFkZXJDb21waWxlcigpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9y
ZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZW5kZXJidWZmZXJTdG9y
YWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghdmFsaWRhdGVTaXplKCJyZW5kZXJidWZmZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdo
dCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9B
MToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0I4
X0FMUEhBOF9FWFQ6CisgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6
OlNSR0I4X0FMUEhBOF9FWFQgJiYgIW1fZXh0c1JHQikgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0
b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgIG1fcmVu
ZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0cnVlKTsKKyAgICAgICAgbV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgICAgICBpZiAoaXNEZXB0
aFN0ZW5jaWxTdXBwb3J0ZWQoKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVy
U3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMzRDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhl
aWdodCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKGlzRGVwdGhT
dGVuY2lsU3VwcG9ydGVkKCkpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElu
dGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFs
dWUsIEdDM0Rib29sZWFuIGludmVydCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSh2YWx1
ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzY2lzc29y
KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghdmFsaWRhdGVTaXplKCJzY2lzc29yIiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2hhZGVyU291cmNlKFdlYkdMU2hh
ZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInNoYWRlclNvdXJjZSIsIHNoYWRlcikpCisgICAgICAg
IHJldHVybjsKKyAgICBTdHJpbmcgc3RyaW5nV2l0aG91dENvbW1lbnRzID0gU3RyaXBDb21tZW50
cyhzdHJpbmcpLnJlc3VsdCgpOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoInNoYWRlclNvdXJj
ZSIsIHN0cmluZ1dpdGhvdXRDb21tZW50cykpCisgICAgICAgIHJldHVybjsKKyAgICBzaGFkZXIt
PnNldFNvdXJjZShzdHJpbmcpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG9iamVjdE9y
WmVybyhzaGFkZXIpLCBzdHJpbmdXaXRob3V0Q29tbWVudHMpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVm
LCBHQzNEdWludCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5j
IiwgZnVuYykpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwor
ICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0g
bWFzazsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAgIG1fY29udGV4dC0+
c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1
bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1
bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3
aXRjaCAoZmFjZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0FORF9CQUNL
OgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOworICAgICAgICBtX3N0ZW5jaWxGdW5j
UmVmQmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOworICAgICAg
ICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJl
ZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVm
QmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCAiaW52YWxp
ZCBmYWNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zdGVuY2ls
RnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9zdGVuY2ls
TWFzayA9IG1hc2s7CisgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOworICAgIG1fY29udGV4
dC0+c3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBz
d2l0Y2ggKGZhY2UpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFD
SzoKKyAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7CisgICAgICAgIG1fc3RlbmNpbE1hc2tC
YWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJPTlQ6CisgICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAgICAgICBtX3N0ZW5jaWxNYXNrQmFj
ayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1Nl
cGFyYXRlIiwgImludmFsaWQgZmFjZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
Y29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0g
emZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWlsLCB6ZmFp
bCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxP
cFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBH
QzNEZW51bSB6cGFzcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWls
LCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUg
YW55IGVycm9ycyByZXR1cm5lZC4KKyAgICBlYyA9IDA7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAg
ICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSkpOworICAgIEFTU0VSVCh0ZXgpOworICAgIEFTU0VSVCghbGV2
ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKTsKKyAgICBpZiAoIXBp
eGVscykgeworICAgICAgICAvLyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5HTCBpbXBsZW1lbnRhdGlv
biBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMgdGhlcmVmb3JlIHRydWUu
CisgICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGlmIHRoZXkgYXJlIHVzaW5n
IEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVzCisgICAgICAgIC8vIGNh
biBub3QgYmUgY2xlYXJlZCB3aXRoIHRleEltYWdlMkQgYW5kIG11c3QgYmUgY2xlYXJlZCBieSBi
aW5kaW5nIHRvIGFuIGZibyBhbmQgY2FsbGluZworICAgICAgICAvLyBjbGVhci4KKyAgICAgICAg
aWYgKGlzUmVzb3VyY2VTYWZlKCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCBudWxscHRyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBib29sIHN1
Y2NlZWQgPSBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgICAgIGlmICghc3VjY2VlZCkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSk7
CisgICAgICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Cisg
ICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgICAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3Jz
VG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAgICAgLy8gVGhlIHRleEltYWdlMkQg
ZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQgZG9lc24ndCBoYXZlIHRo
ZSBkYXRhIGZvciB0aGlzIGxldmVsLgorICAgICAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJn
ZXQsIGxldmVsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICB0
ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgdHlwZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZ
LCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0g
MDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlB
bHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9ORSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGlt
YWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNv
bnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEo
KTsKKyAgICAKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9O
b3RoaW5nICYmICFmbGlwWSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBl
bHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdl
UGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0
LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0
KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleEltYWdlMkQiLCAicGFja0ltYWdlIGVycm9yIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50
ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBmb3Jt
YXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwg
ZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQt
PnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFj
a0FsaWdubWVudCk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5j
dGlvblR5cGUgZnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNl
VHlwZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCkKK3sKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25O
YW1lLCBmdW5jdGlvblR5cGUsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGZ1
bmN0aW9uTmFtZSwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vdFRleFN1YkltYWdl
MkQpIHsKKyAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBo
ZWlnaHQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAy
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gRm9y
IFNvdXJjZUFycmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVUZXhGdW5jRGF0YSgpIHdv
dWxkIGhhbmRsZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJsZVRleEZvcm1hdAorICAg
ICAgICAvLyBieSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3IGlzIG51bGwgb3Igbm90
LgorICAgICAgICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZpZXcpIHsKKyAg
ICAgICAgICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZv
cm1hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFt
ZSwgZm9ybWF0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCF2YWxp
ZGF0ZVNpemUoZnVuY3Rpb25OYW1lLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSBy
YW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KKyAgICAgICAgaWYgKHhvZmZz
ZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJiYWQgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0
YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRh
cmdldCwgbGV2ZWwpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2Yg
cmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8
IHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFn
ZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsQWxs
b3dlZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBwaXhlbHMtPmJhc2VBZGRyZXNz
KCkgOiAwOworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5nZVVu
cGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZIHx8
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4
dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhID0gdGVtcERh
dGEuZGF0YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0K
KyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhJ
bWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLAorICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOworICAg
IGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9y
ZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8
fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNl
SW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgp
LCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAgICByZXR1
cm47CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9
IHRydWU7CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1h
dCBSR0JBOC4KKyAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBm
b3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJl
bXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghbV91bnBhY2tGbGlwWSAm
JiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKQorICAg
ICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1f
Y29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFn
ZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwor
ICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMt
PndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsKKyAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwor
fQorCitQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1h
Z2VJbnRvQnVmZmVyKEltYWdlKiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGV2
aWNlU2NhbGVGYWN0b3IpCit7CisgICAgSW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQpOworICAg
IHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIEltYWdlQnVmZmVyKiBidWYgPSBt
X2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFidWYpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1P
UlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1h
Z2UtPnNpemUoKSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7
CisgICAgYnVmLT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJH
QiwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShJbWFnZUJ1
ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdl
MkQiLCBpbWFnZSwgZWMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPEltYWdl
PiBpbWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVy
KGltYWdlLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2Uo
KSkKKyAgICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9y
UmVuZGVyLmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKKyAgICAK
KyAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQi
LCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVy
LT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERv
bUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVIVE1MQ2FudmFzRWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFz
RWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwg
Y2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIC8vIElmIHBvc3NpYmxlLCBjb3B5
IGZyb20gdGhlIGNhbnZhcyBlbGVtZW50IGRpcmVjdGx5IHRvIHRoZSB0ZXh0dXJlCisgICAgLy8g
dmlhIHRoZSBHUFUsIHdpdGhvdXQgYSByZWFkLWJhY2sgdG8gc3lzdGVtIG1lbW9yeS4KKyAgICAv
LworICAgIC8vIEZJWE1FOiByZXN0cmljdGlvbiBvZiAoUkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZ
VEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCisgICAgLy8gSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRm
b3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZ1bGx5IGZ1bmN0aW9uYWwuCisgICAgaWYg
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEID09IHRhcmdldCAmJiB0ZXh0dXJlICYmIHR5
cGUgPT0gdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKQorICAgICAgICAmJiAoZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Cisg
ICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworICAgICAgICBp
ZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0
KCksIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJ
bmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZh
cy0+aGVpZ2h0KCksIHR5cGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1h
Z2VEYXRhKCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgdGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVj
KTsKKyAgICBlbHNlCisgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQorUGFzc1JlZlB0cjxJbWFnZT4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxl
bWVudCogdmlkZW8sIEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9u
Q29kZSYpCit7CisgICAgSW50U2l6ZSBzaXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52
aWRlb0hlaWdodCgpKTsKKyAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNh
Y2hlLmltYWdlQnVmZmVyKHNpemUpOworICAgIGlmICghYnVmKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIs
ICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBJ
bnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAg
Ly8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBv
ZiBDUFUgcmVhZGJhY2suCisgICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1
Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tp
bmdTdG9yZUNvcHkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhJbWFnZTJEIiwgdmlkZW8sIGVj
KQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1h
Z2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQs
IHR5cGUsIDAsIDApKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gR28gdGhyb3VnaCB0
aGUgZmFzdCBwYXRoIGRvaW5nIGEgR1BVLUdQVSB0ZXh0dXJlcyBjb3B5IHdpdGhvdXQgYSByZWFk
YmFjayB0byBzeXN0ZW0gbWVtb3J5IGlmIHBvc3NpYmxlLgorICAgIC8vIE90aGVyd2lzZSwgaXQg
d2lsbCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBTVyBwYXRoLgorICAgIC8vIEZJWE1FOiBUaGUg
Y3VycmVudCByZXN0cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZvcm1hdCBzaG91ZCBiZSBSR0Igb3Ig
UkdCQSwKKyAgICAvLyB0eXBlIHNob3VsZCBiZSBVTlNJR05FRF9CWVRFIGFuZCBsZXZlbCBzaG91
bGQgYmUgMC4gSXQgbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlLgorICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQs
IHRydWUpOworICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQg
JiYgdGV4dHVyZQorICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0Ig
fHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKQorICAgICAgICAmJiB0eXBlID09
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICYmICh0ZXh0dXJlLT5n
ZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
IHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKQorICAgICAgICAmJiAhbGV2ZWwp
IHsKKyAgICAgICAgaWYgKHZpZGVvLT5jb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUo
bV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwgbGV2ZWwsIHR5cGUsIGludGVybmFs
Zm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCB0eXBlKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBOb3JtYWwg
cHVyZSBTVyBwYXRoLgorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBpZiAo
IWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBw
YXJhbWYsIEdDM0RpbnQgcGFyYW1pLCBib29sIGlzRmxvYXQpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBmYWxzZSk7
CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Q6CisgICAgICAgIGlmICgoaXNGbG9hdCAmJiBw
YXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1mICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSRVBFQVQpCisgICAgICAgICAgICB8fCAoIWlzRmxvYXQgJiYgcGFyYW1pICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQ
RUFUKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmls
dGVyX2FuaXNvdHJvcGljCisgICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIsIEVYVF90ZXh0
dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChpc0Zsb2F0KSB7CisgICAgICAgIHRleC0+c2V0UGFyYW1ldGVyZihwbmFtZSwgcGFy
YW1mKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHBh
cmFtZik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJpKHBuYW1lLCBw
YXJhbWkpOworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwg
cGFyYW1pKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFy
YW0pCit7CisgICAgdGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIHBhcmFtLCAwLCB0cnVlKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXJpKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgdGV4UGFy
YW1ldGVyKHRhcmdldCwgcG5hbWUsIDAsIHBhcmFtLCBmYWxzZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6
IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKKyAgICBlYyA9IDA7CisgICAg
QVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJh
bWV0ZXJzKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodmFsaWRh
dGVTaXplKCJ0ZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkpOworICAgIEFTU0VSVCh2
YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0KSk7CisgICAg
V2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJE
IiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoKHhvZmZzZXQgKyB3
aWR0aCkgPj0gMCk7CisgICAgQVNTRVJUKCh5b2Zmc2V0ICsgaGVpZ2h0KSA+PSAwKTsKKyAgICBB
U1NFUlQodGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSA+PSAoeG9mZnNldCArIHdpZHRoKSk7
CisgICAgQVNTRVJUKHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpID49ICh5b2Zmc2V0ICsg
aGVpZ2h0KSk7CisgICAgQVNTRVJUKHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCkgPT0gZm9ybWF0KTsKKyAgICBBU1NFUlQodGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09
IHR5cGUpOworICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRy
YWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwg
bV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7
ICAKKyAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0
cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNvbnN0IHZv
aWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKKyAg
ICAKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5n
ICYmICFmbGlwWSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxE
YXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFn
ZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGlt
YWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkK
KyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgMSk7CisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgZm9ybWF0LCB0
eXBlLCAgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7
CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1
YkltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51
bGxOb3RBbGxvd2VkKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJE
IiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkp
CisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygp
OworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5nZVVucGFja0Fs
aWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RU
ZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhID0gdGVtcERhdGEuZGF0
YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKyAgICBp
ZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhTdWJJbWFn
ZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQor
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4
RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUltYWdlRGF0YSwgdGFy
Z2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAw
LCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRy
dWU7CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBS
R0JBOC4KKyAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3Jt
YXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVs
dGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSAmJiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKQorICAgICAg
ICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29u
dGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFn
ZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwor
ICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHBp
eGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVy
c2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSwgZWMpOworICAgIGlm
IChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFn
ZSwgZWMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZv
clJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5y
ZW5kZXJlcigpKTsKKyAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKKyAgICAg
ICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVyLmdl
dCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKKyAgICAKKyAgICBpZiAo
IWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhT
dWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQs
IGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZv
cm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERv
bUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZh
cywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhT
dWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0
LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9m
ZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURh
dGEpCisgICAgICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAg
IHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1h
dCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERv
bUNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9
CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhT
dWJJbWFnZTJEIiwgdmlkZW8sIGVjKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhT
dWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0
LCBsZXZlbCwgZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQo
KSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywg
SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm47CisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
LCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCAxKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
bGVuZ3RoKCksIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ1bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dy
YW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoKGxvY2F0aW9uLT50
eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUo
KSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKSAmJiB4ID49IChpbnQpbV90ZXh0
dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpIiwgImludmFsaWQgdGV4dHVyZSB1bml0
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3Jt
MWkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgMSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1Q
TEVSX0NVQkUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHYtPmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2LT5kYXRhKClbaV0gPj0gc3RhdGljX2Nhc3Q8aW50
PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7CisgICAgICAgICAgICAgICAgTE9HKFdlYkdMLCAi
VGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4gTG9jYXRpb24gdHlwZSA9ICUwNFguIiwg
bV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRhKClbaV0sIGxvY2F0aW9uLT50eXBlKCkp
OworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxl
bmd0aCgpLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50
KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U0FNUExFUl9DVUJFKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7ICsraSkgeworICAgICAgICAgICAgaWYgKCgoR0Mz
RGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7
CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSwg
dik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtMmYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB2LT5sZW5ndGgoKSAvIDIsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCBz
aXplLCAyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTJm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRp
b24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxv
Y2F0aW9uLCB2LCAyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtMml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8g
Miwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3Vy
cmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3Vy
cmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250
ZXh0LT51bmlmb3JtM2YobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2
LCAzKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0z
ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2koY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGlu
dCB6LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJ1bmlmb3JtM2kiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0z
aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdi0+bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3Jt
M2l2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZs
b2F0IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3Jh
bSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9y
bTRmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgNCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24t
PmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9j
YXRpb24sIHYsIHNpemUsIDQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0
LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0Mz
RGludCB3LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dy
YW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2LCA0KSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRp
b24sIHYsIHNpemUsIDQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51
bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwg
R0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRp
b24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB0cmFu
c3Bvc2UsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1N
YXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRp
b24sIHRyYW5zcG9zZSwgdiwgOSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gOSwgdHJh
bnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5p
Zm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gOSwgdHJhbnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5p
Zm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDE2KSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgdi0+bGVuZ3RoKCkgLyAxNiwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIHYsIHNpemUsIDE2KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIHYp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVzZVByb2dyYW0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJ1
c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
ZGVsZXRlZCkKKyAgICAgICAgcHJvZ3JhbSA9IDA7CisgICAgaWYgKHByb2dyYW0gJiYgIXByb2dy
YW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1c2VQcm9ncmFtIiwgInByb2dyYW0gbm90
IHZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fY3VycmVudFByb2dy
YW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAg
ICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Cisg
ICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOworICAgICAgICBtX2NvbnRleHQtPnVz
ZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKKyAgICAgICAgaWYgKHByb2dyYW0pCisg
ICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFjaGVkKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dy
YW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgidmFsaWRh
dGVQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnZh
bGlkYXRlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgdjApCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjFmIiwgaW5kZXgs
IDEsIHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikK
K3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCAx
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVy
dGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwgdiwgc2l6ZSwgMSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMmYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQoreworICAgIHZlcnRleEF0dHJp
YmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIsIGluZGV4LCAyLCB2MCwgdjEsIDAuMGYsIDEuMGYpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgi
dmVydGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJp
YjJmdiIsIGluZGV4LCB2LCBzaXplLCAyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNE
ZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4
QXR0cmliM2YiLCBpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHYpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYi
LCBpbmRleCwgdiwgMyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVy
dGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYs
IHNpemUsIDMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0
dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZs
b2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0
dHJpYjRmIiwgaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJB
cnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGlu
ZGV4LCB2LCA0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhB
dHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7
CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgdiwgc2l6
ZSwgNCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmli
UG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNE
Ym9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hP
UlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2
ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUgPCAwIHx8
IHN0cmlkZSA+IDI1NSB8fCBvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIs
ICJiYWQgc2l6ZSwgc3RyaWRlIG9yIG9mZnNldCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50
ZXIiLCAibm8gYm91bmQgQVJSQVlfQlVGRkVSIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBj
YW4gaG9sZCwgZ2l2ZW4gdGhlIG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCisgICAgdW5z
aWduZWQgdHlwZVNpemUgPSBzaXplSW5CeXRlcyh0eXBlKTsKKyAgICBpZiAoIXR5cGVTaXplKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmICgoc3RyaWRlICUgdHlwZVNpemUpIHx8IChzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpICUgdHlwZVNpemUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBv
aW50ZXIiLCAic3RyaWRlIG9yIG9mZnNldCBub3QgdmFsaWQgZm9yIHR5cGUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBHQzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5
cGVTaXplOworICAgIAorICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0
cmliU3RhdGUoaW5kZXgsIGJ5dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwg
c3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJyYXlCdWZm
ZXIpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlw
ZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWV3cG9ydChHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZh
bGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFk
eSBsb3N0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0R3Jv
dXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Okxvc3RD
b250ZXh0TW9kZSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICBtX2NvbnRleHRMb3N0
TW9kZSA9IG1vZGU7CisgICAgCisgICAgaWYgKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSB7Cisg
ICAgICAgIC8vIEluZm9ybSB0aGUgZW1iZWRkZXIgdGhhdCBhIGxvc3QgY29udGV4dCB3YXMgcmVj
ZWl2ZWQuIEluIHJlc3BvbnNlLCB0aGUgZW1iZWRkZXIgbWlnaHQKKyAgICAgICAgLy8gZGVjaWRl
IHRvIHRha2UgYWN0aW9uIHN1Y2ggYXMgYXNraW5nIHRoZSB1c2VyIGZvciBwZXJtaXNzaW9uIHRv
IHVzZSBXZWJHTCBhZ2Fpbi4KKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5k
b2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCku
ZGlkTG9zZVdlYkdMQ29udGV4dChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhp
Y3NSZXNldFN0YXR1c0FSQigpKTsKKyAgICB9CisgICAgCisgICAgZGV0YWNoQW5kUmVtb3ZlQWxs
T2JqZWN0cygpOworICAgIAorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8g
TWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UgZG8gbm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRl
ZCB0ZXh0dXJlIG9yIGZyYW1lYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRl
eHR1cmUyREJpbmRpbmcoMCk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZm
ZXJCaW5kaW5nKDApOworICAgIH0KKyAgICAKKyAgICAvLyBUaGVyZSBpcyBubyBkaXJlY3Qgd2F5
IHRvIGNsZWFyIGVycm9ycyBmcm9tIGEgR0wgaW1wbGVtZW50YXRpb24gYW5kCisgICAgLy8gbG9v
cGluZyB1bnRpbCBnZXRFcnJvcigpIGJlY29tZXMgTk9fRVJST1IgbWlnaHQgY2F1c2UgYW4gaW5m
aW5pdGUgbG9vcCBpZgorICAgIC8vIHRoZSBkcml2ZXIgb3IgY29udGV4dCBpbXBsZW1lbnRhdGlv
biBoYWQgYSBidWcuIFNvLCBsb29wIGEgcmVhc29uYWJseQorICAgIC8vIGxhcmdlIG51bWJlciBv
ZiB0aW1lcyB0byBjbGVhciBhbnkgZXhpc3RpbmcgZXJyb3JzLgorICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlIGRpc3BsYXkgPSAobW9kZSA9PSBSZWFsTG9zdENv
bnRleHQpID8gRGlzcGxheUluQ29uc29sZTogRG9udERpc3BsYXlJbkNvbnNvbGU7CisgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTCwgImxv
c2VDb250ZXh0IiwgImNvbnRleHQgbG9zdCIsIGRpc3BsYXkpOworICAgIAorICAgIC8vIERvbid0
IGFsbG93IHJlc3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0IGV2ZW50IGhhcyBib3Ro
IGJlZW4KKyAgICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBwcmV2ZW50
ZWQuCisgICAgbV9yZXN0b3JlQWxsb3dlZCA9IGZhbHNlOworICAgIAorICAgIC8vIEFsd2F5cyBk
ZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGNvbnRleHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50
CisgICAgLy8gdGhlIHNwZWMgYmVoYXZpb3Igb2YgcXVldWVpbmcgYSB0YXNrLgorICAgIG1fZGlz
cGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZvcmNlUmVzdG9yZUNvbnRleHQoKQoreworICAgIGlm
ICghaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0Iiwg
ImNvbnRleHQgbm90IGxvc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoIW1fcmVzdG9yZUFsbG93ZWQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09
IFN5bnRoZXRpY0xvc3RDb250ZXh0KQorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29u
dGV4dCByZXN0b3JhdGlvbiBub3QgYWxsb3dlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmICghbV9yZXN0b3JlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZXN0
b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitQbGF0Zm9ybUxheWVyKiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCFp
c0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgPyBtX2NvbnRl
eHQtPnBsYXRmb3JtTGF5ZXIoKSA6IDA7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOworICAgIG1f
Y29udGV4dEdyb3VwLT5hZGRPYmplY3Qob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBtX2NvbnRleHRPYmplY3RzLnJlbW92ZShvYmplY3QpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZENvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsK
KyAgICBtX2NvbnRleHRPYmplY3RzLmFkZChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKQoreworICAgIGlmICht
X2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB3
aGlsZSAobV9jb250ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7CisgICAgICAgIEhhc2hTZXQ8V2Vi
R0xDb250ZXh0T2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdpbigp
OworICAgICAgICAoKml0KS0+ZGV0YWNoQ29udGV4dCgpOworICAgIH0KK30KKworYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdG9w
KCkKK3sKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uKSB7CisgICAgICAgIGZvcmNlTG9zdENvbnRleHQoU3ludGhldGljTG9zdENvbnRleHQp
OworICAgICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB9Cit9CisKK1dlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb29sZWFuUGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQoreworICAgIEdDM0Rib29sZWFuIHZhbHVlID0gMDsKKyAgICBtX2NvbnRl
eHQtPmdldEJvb2xlYW52KHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8o
c3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkK
K3sKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSykg
eworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KDAsIDApOworICAgIH0KKyAgICBHQzNEYm9vbGVhbiB2YWx1ZVs0XSA9IHswfTsKKyAgICBtX2Nv
bnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CisgICAgYm9vbCBib29sVmFsdWVbNF07
CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDQ7ICsraWkpCisgICAgICAgIGJvb2xWYWx1ZVtp
aV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtpaV0pOworICAgIHJldHVybiBXZWJHTEdldElu
Zm8oYm9vbFZhbHVlLCA0KTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmdldEZsb2F0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RmbG9h
dCB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsICZ2YWx1ZSk7Cisg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwg
JnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKK30KKworV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpKTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFt
ZSkKK3sKKyAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5nZXRG
bG9hdHYocG5hbWUsIHZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJ
WkVfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRI
X1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAgICAg
ICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORF9DT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9W
QUxVRToKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cit9CisKK1dlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7
CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
SUVXUE9SVF9ESU1TOgorICAgICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpWSUVXUE9SVDoKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRvRHJhdykKK3sKKyAgICBib29s
IHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVu
c2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4
dGVuc2lvbkZsYWc+KChtX29lc1RleHR1cmVGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4
dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFyRW5hYmxlZCA6IDApIHwgKG1fb2VzVGV4dHVyZUhhbGZG
bG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkhhbGZGbG9hdExpbmVh
ckVuYWJsZWQgOiAwKSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90
ZXh0dXJlVW5pdHMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNb
aWldLnRleHR1cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRp
bmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKKyAgICAgICAgICAgIHx8ICht
X3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRz
W2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNp
b25zKSkpIHsKKyAgICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7Cisg
ICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKKyAgICAgICAgICAg
ICAgICByZXNldEFjdGl2ZVVuaXQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNl
dEFjdGl2ZVVuaXQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUo
aWkpOworICAgICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXgyRDsKKyAgICAgICAgICAgIFdlYkdM
VGV4dHVyZSogdGV4Q3ViZU1hcDsKKyAgICAgICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7Cisg
ICAgICAgICAgICAgICAgU3RyaW5nIG1zZyhTdHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVy
ZSB1bml0ICIpICsgU3RyaW5nOjpudW1iZXIoaWkpCisgICAgICAgICAgICAgICAgICAgICsgIiBp
cyBub3QgcmVuZGVyYWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21w
YXRpYmxlIHRleHR1cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgor
ICAgICAgICAgICAgICAgICAgICArICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUg
d2l0aCBsaW5lYXIgZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxm
LWZsb2F0IGxpbmVhciBleHRlbnNpb24gZW5hYmxlZC4iKTsKKyAgICAgICAgICAgICAgICBwcmlu
dEdMV2FybmluZ1RvQ29uc29sZShmdW5jdGlvbk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgICAgICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7CisgICAgICAgICAg
ICAgICAgdGV4Q3ViZU1hcCA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0u
dGV4dHVyZTJEQmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90
ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAm
JiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0
dXJlKGV4dGVuc2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOworICAg
ICAgICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYg
bV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tU
ZXh0dXJlKGV4dGVuc2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhD
dWJlTWFwKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKKyAg
ICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0
dXJlczF4MSgpCit7CisgICAgdW5zaWduZWQgY2hhciBibGFja1tdID0gezAsIDAsIDAsIDI1NX07
CisgICAgbV9ibGFja1RleHR1cmUyRCA9IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2JsYWNrVGV4dHVy
ZTJELT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisgICAgbV9ibGFja1RleHR1
cmVDdWJlTWFwID0gY3JlYXRlVGV4dHVyZSgpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG1fYmxhY2tUZXh0dXJlQ3ViZU1h
cC0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxh
Y2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50
ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1os
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVAsIDApOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4SW50ZXJu
YWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJuYWxG
b3JtYXQsIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0KQoreworICAgIHVuc2lnbmVkIG5lZWQg
PSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdCh0ZXhJbnRlcm5hbEZv
cm1hdCk7CisgICAgdW5zaWduZWQgaGF2ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVs
Qml0c0J5Rm9ybWF0KGNvbG9yQnVmZmVyRm9ybWF0KTsKKyAgICByZXR1cm4gKG5lZWQgJiBoYXZl
KSA9PSBuZWVkOworfQorCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRC
b3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKQoreworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKKyAgICBpZiAobV9h
dHRyaWJ1dGVzLmFscGhhKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7
CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Cit9CisKK2ludCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQoreworICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisg
ICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgp
OworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53
aWR0aCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7
Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVy
SGVpZ2h0KCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmct
PmdldENvbG9yQnVmZmVySGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1f
ZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOworfQorCitXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQorewor
ICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IG51bGxwdHI7CisgICAgc3dpdGNoICh0YXJnZXQp
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGlmICghdXNlU2l4RW51bXNG
b3JDdWJlTWFwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0
Iik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBC
aW5kaW5nLmdldCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQOgorICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBp
ZiAoIXRleHR1cmUpCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOworICAgIHJl
dHVybiB0ZXh0dXJlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlTG9jYXRpb25MZW5ndGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0g
MjU2OworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEaW50IHgsIEdDM0RpbnQgeSkKK3sKKyAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgInNpemUgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIGlmICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgInN0cmluZyBub3QgQVNDSUkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50
IGxldmVsKQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlm
IChtX3dlYmdsRGVwdGhUZXh0dXJlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUOgorICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoKGZvcm1h
dCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUIHx8IGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNS
R0JfQUxQSEFfRVhUKQorICAgICAgICAgICAgJiYgbV9leHRzUkdCKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGlmIChtX29lc1RleHR1cmVGbG9hdCkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9B
VF9PRVM6CisgICAgICAgIGlmIChtX29lc1RleHR1cmVIYWxmRmxvYXQpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfODoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgaWYgKG1fd2ViZ2xE
ZXB0aFRleHR1cmUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9m
IGZvcm1hdCBhbmQgdHlwZSBpcyBzdXBwb3J0ZWQuCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FM
UEhBOgorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAg
ICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgZm9ybWF0Iik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VY
VDoKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUK
KyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNl81CisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAor
ICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0IgZm9ybWF0
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6U1JHQl9BTFBIQV9FWFQ6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF80XzRfNF80CisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xCisgICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB0eXBlIGZvciBSR0JBIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBl
bmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCisgICAgICAgICAg
ICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxl
dmVsID4gMCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAgZm9y
IERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9TVEVOQ0lMOgorICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lMIG5vdCBlbmFibGVkIik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGV2ZWwgPiAw
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhf
U1RFTkNJTCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsIDwg
MCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2ZWwp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAg
ICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQgZG9u
J3QKKyAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwuCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4RnVu
Y1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSkKK3sKKyAgICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUg
dGhlIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2UyRCBl
bnRyeSBwb2ludHMgdGFraW5nIEhUTUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAvLyB0
ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxl
Z2FsLgorICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUs
IGZvcm1hdCwgdHlwZSwgbGV2ZWwpIHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5h
bWUsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYg
KHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo
ZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR0Mz
RGludCBtYXhUZXh0dXJlU2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwg
LSAxIC0gbGV2ZWwpOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVG
b3JMZXZlbCB8fCBoZWlnaHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBp
ZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIE5vIG5lZWQgdG8g
Y2hlY2sgaGVpZ2h0IGhlcmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQuCisgICAgICAg
IC8vIEZvciB0ZXhTdWJJbWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5nIHlv
ZmZzZXQgKyBoZWlnaHQgaXMgaW4gcmFuZ2UuCisgICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1
cmVTaXplRm9yTGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQg
b3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIGlmIChib3JkZXIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJvcmRlciAhPSAw
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRGF0
YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcq
IHBpeGVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOdWxsRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pCit7CisgICAgaWYgKCFwaXhlbHMpIHsK
KyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IE51bGxBbGxvd2VkKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5
cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZv
cm1hdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBpZiAo
cGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAidHlwZSBVTlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4
QXJyYXkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAg
IGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5v
dCBVaW50MTZBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNf
dGV4dHVyZV9mbG9hdAorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBl
RmxvYXQzMikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJh
eUJ1ZmZlclZpZXcgbm90IEZsb2F0MzJBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgIC8vIEFz
IHBlciB0aGUgc3BlY2lmaWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdo
ZW4KKyAgICAgICAgLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgorICAgICAg
ICBpZiAocGl4ZWxzKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9B
VF9PRVMgYnV0IEFycmF5QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCB0b3Rh
bEJ5dGVzUmVxdWlyZWQ7CisgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJ
bWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGln
bm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsIDApOworICAgIGlmIChlcnJvciAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3Is
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxC
eXRlc1JlcXVpcmVkKSB7CisgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7Cisg
ICAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9y
bWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKKyAg
ICAgICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA9PSB0b3RhbEJ5dGVzUmVxdWlyZWQp
IHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmln
IGVub3VnaCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElHTk1FTlQgPiAxIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9y
bWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICByZXR1cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZv
cm1hdHMuY29udGFpbnMoZm9ybWF0KTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKK3sKKyAgICBpZiAoIXBpeGVscykg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgYnl0ZXNSZXF1aXJlZCA9IDA7CisgICAgCisgICAgc3dpdGNo
IChmb3JtYXQpIHsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQl9BTUQ6Cisg
ICAgICAgIHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OworICAgICAgICBjb25z
dCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0g
NDsKKyAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9zcyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0g
MSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsg
a0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tIZWlnaHQ7CisgICAgICAgIGJ5dGVzUmVxdWlyZWQg
PSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDVfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JB
X0VYUExJQ0lUX0FMUEhBX0FNRDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9B
VENfUkdCQV9JTlRFUlBPTEFURURfQUxQSEFfQU1EOgorICAgICAgICB7CisgICAgICAgIGNvbnN0
IGludCBrQmxvY2tTaXplID0gMTY7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7
CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OworICAgICAgICBpbnQgbnVtQmxv
Y2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOworICAg
ICAgICBpbnQgbnVtQmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAvIGtC
bG9ja0hlaWdodDsKKyAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51
bUJsb2Nrc0Rvd24gKiBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAg
ICAgICAgeworICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CisgICAgICAgIGNvbnN0
IGludCBrQmxvY2tXaWR0aCA9IDg7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA4
OworICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRoLCBrQmxvY2tXaWR0aCkg
KiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiA0ICsgNykgLyBrQmxvY2tTaXplOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICAgICAgeworICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrU2l6ZSA9IDg7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDE2OworICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKKyAgICAgICAgYnl0ZXNSZXF1aXJlZCA9
IChzdGQ6Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tI
ZWlnaHQpICogMiArIDcpIC8ga0Jsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgo
KSAhPSBieXRlc1JlcXVpcmVkKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlC
dWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZvciBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAg
c3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0VYVDogeworICAgICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0OworICAg
ICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrSGVpZ2h0ID0gNDsKKyAgICAgICAgY29uc3QgR0Mz
RGludCBtYXhUZXh0dXJlU2l6ZSA9IHRhcmdldCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21heEN1
YmVNYXBUZXh0dXJlU2l6ZTsKKyAgICAgICAgY29uc3QgR0MzRHNpemVpIG1heENvbXByZXNzZWRE
aW1lbnNpb24gPSBtYXhUZXh0dXJlU2l6ZSA+PiBsZXZlbDsKKyAgICAgICAgYm9vbCB3aWR0aFZh
bGlkID0gKGxldmVsICYmIHdpZHRoID09IDEpIHx8IChsZXZlbCAmJiB3aWR0aCA9PSAyKSB8fCAo
ISh3aWR0aCAlIGtCbG9ja1dpZHRoKSAmJiB3aWR0aCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9u
KTsKKyAgICAgICAgYm9vbCBoZWlnaHRWYWxpZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0gMSkgfHwg
KGxldmVsICYmIGhlaWdodCA9PSAyKSB8fCAoIShoZWlnaHQgJSBrQmxvY2tIZWlnaHQpICYmIGhl
aWdodCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKKyAgICAgICAgaWYgKCF3aWR0aFZhbGlk
IHx8ICFoZWlnaHRWYWxpZCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo
ZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICAgICAgLy8gSGVpZ2h0
IGFuZCB3aWR0aCBtdXN0IGJlIHBvd2VycyBvZiAyLgorICAgICAgICBpZiAoKHdpZHRoICYgKHdp
ZHRoIC0gMSkpIHx8IChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIFdlYkdMVGV4dHVyZSogdGV4KQor
eworICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0g
NDsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgIGlmICgoeG9m
ZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdodCkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBsZSBvZiA0
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdp
ZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAgICAgICAgICAg
IHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWxpZGF0
ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0KTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzogeworICAgICAgICBpZiAoeG9mZnNldCB8fCB5
b2Zmc2V0KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlvZmZzZXQg
bXVzdCBiZSB6ZXJvIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAgICAgICAg
ICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3RpbmcgbGV2ZWwi
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVEcmF3TW9kZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1v
ZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9JTlRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfU1RSSVA6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZHJhdyBtb2RlIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIGlm
IChtX3N0ZW5jaWxNYXNrICE9IG1fc3RlbmNpbE1hc2tCYWNrIHx8IG1fc3RlbmNpbEZ1bmNSZWYg
IT0gbV9zdGVuY2lsRnVuY1JlZkJhY2sgfHwgbV9zdGVuY2lsRnVuY01hc2sgIT0gbV9zdGVuY2ls
RnVuY01hc2tCYWNrKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3Rl
bmNpbHMgc2V0dGluZ3MgZG8gbm90IG1hdGNoIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IGZ1bmMpCit7CisgICAgc3dpdGNoIChmdW5jKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TkVWRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JF
QVRFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFV
QUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cHJpbnRHTEVycm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBpZiAoIW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLS1tX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKKyAgICBwcmlu
dFdhcm5pbmdUb0NvbnNvbGUobWVzc2FnZSk7CisgICAgCisgICAgaWYgKCFtX251bUdMRXJyb3Jz
VG9Db25zb2xlQWxsb3dlZCkKKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDog
dG9vIG1hbnkgZXJyb3JzLCBubyBtb3JlIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBj
b25zb2xlIGZvciB0aGlzIGNvbnRleHQuIik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6cHJpbnRXYXJuaW5nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sK
KyAgICBpZiAoIWNhbnZhcygpKQorICAgICAgICByZXR1cm47CisgICAgY2FudmFzKCktPmRvY3Vt
ZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdl
TGV2ZWw6Oldhcm5pbmcsIG1lc3NhZ2UpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCkKK3sKKyAgICBp
ZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHN3aXRjaCAoYXR0YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0FUVEFDSE1FTlQwOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFD
SE1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVy
cworICAgICAgICAgICAgJiYgYXR0YWNobWVudCA+IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMAorICAgICAgICAgICAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0Rl
bnVtPihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0
dGFjaG1lbnRzKCkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgYXR0YWNobWVudCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQmxl
bmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCit7Cisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19TVUJUUkFDVDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6Ok1JTl9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQ6CisgICAgICAg
IGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQgfHwgbW9kZSA9PSBFeHRlbnNpb25z
M0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWluTWF4KSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCbGVuZEZ1bmNG
YWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBk
c3QpCit7CisgICAgaWYgKCgoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xP
UiB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikK
KyAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwg
ZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKQorICAg
ICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCisgICAgICAg
ICYmIChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBH
cmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSBjYXApCit7CisgICAgc3dpdGNoIChjYXApIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdP
Tl9PRkZTRVRfRklMTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQUxQSEFf
VE9fQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgY2FwYWJpbGl0eSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgR0Mz
RHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwg
ZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBp
ZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
ZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJl
cXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdD
M0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYsIHNpemUsIHJl
cXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAgaWYg
KCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1
bmN0aW9uTmFtZSwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwg
cmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIHZvaWQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQor
eworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobG9j
YXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAibG9jYXRpb24gaXMgbm90IGZyb20gY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBh
cnJheSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh0cmFuc3Bvc2Up
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRyYW5zcG9zZSBub3QgRkFMU0UiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc2l6ZSA8IHJlcXVpcmVkTWluU2l6ZSB8fCAoc2l6
ZSAlIHJlcXVpcmVkTWluU2l6ZSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitX
ZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRh
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gdXNhZ2UpCit7CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7CisgICAgc3dpdGNo
ICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUjoKKyAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKS5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlC
dWZmZXIuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICBpZiAoIWJ1ZmZlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgc3dpdGNoICh1c2FnZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNUQVRJQ19EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNf
RFJBVzoKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB1c2FnZSIpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibm8gaW1hZ2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjb25zdCBV
UkwmIHVybCA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5yZXNwb25zZSgpLnVybCgpOworICAgIGlm
ICh1cmwuaXNOdWxsKCkgfHwgdXJsLmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBpbWFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGltYWdlKSkgeworICAgICAgICBlYyA9IFNF
Q1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxDYW52
YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+
YnVmZmVyKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGNhbnZhcyIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGNhbnZhcykpIHsKKyAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9I
ZWlnaHQoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKKyAgICAg
ICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGlu
ZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwg
R0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0
dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0
cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAg
ICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIy
ZihpbmRleCwgdjAsIHYxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFs
dWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XTsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVsw
XSA9IHYwOworICAgIGF0dHJpYlZhbHVlLnZhbHVlWzFdID0gdjE7CisgICAgYXR0cmliVmFsdWUu
dmFsdWVbMl0gPSB2MjsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVszXSA9IHYzOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXpl
aSBleHBlY3RlZFNpemUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoZnVuY3Rp
b25OYW1lLCBpbmRleCwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgZXhwZWN0ZWRTaXplKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2KSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChz
aXplIDwgZXhwZWN0ZWRTaXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRy
aWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJp
YjAgdmFsdWVzLgorICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAg
ICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
bV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2
KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmRleCwgdik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRy
aWI0ZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtp
bmRleF07CisgICAgYXR0cmliVmFsdWUuaW5pdFZhbHVlKCk7CisgICAgZm9yIChpbnQgaWkgPSAw
OyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytpaSkKKyAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWld
ID0gdltpaV07Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aW5pdFZlcnRl
eEF0dHJpYjAoKQoreworICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJp
YlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmli
U3RhdGUoMCk7CisgICAgCisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gY3JlYXRlQnVmZmVy
KCk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+
YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50
ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgc3Rh
dGUuYnVmZmVyQmluZGluZyA9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsKKyAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCk7CisgICAgbV9j
b250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJTaXplID0gMDsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IDAuMGY7
CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0gPSAwLjBmOworICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVszXSA9IDEuMGY7CisgICAgbV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwgPSBmYWxzZTsK
KyAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gZmFsc2U7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1W
ZXJ0ZXgpCit7CisgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0
cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRy
aWJTdGF0ZSgwKTsKKyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBt
X3ZlcnRleEF0dHJpYlZhbHVlWzBdOworICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgdXNpbmdWZXJ0ZXhBdHRyaWIwID0gbV9jdXJyZW50
UHJvZ3JhbS0+aXNVc2luZ1ZlcnRleEF0dHJpYjAoKTsKKyAgICBpZiAodXNpbmdWZXJ0ZXhBdHRy
aWIwKQorICAgICAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKKyAgICBpZiAo
c3RhdGUuZW5hYmxlZCAmJiB1c2luZ1ZlcnRleEF0dHJpYjApCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIXVzaW5nVmVydGV4QXR0cmliMCAmJiAhbV92ZXJ0ZXhBdHRyaWIwVXNlZEJl
Zm9yZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmUgPSB0cnVlOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBHQzNE
c2l6ZWlwdHIgYnVmZmVyRGF0YVNpemUgPSAobnVtVmVydGV4ICsgMSkgKiA0ICogc2l6ZW9mKEdD
M0RmbG9hdCk7CisgICAgaWYgKGJ1ZmZlckRhdGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
U2l6ZSkgeworICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgYnVmZmVyRGF0YVNpemUsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5B
TUlDX0RSQVcpOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gYnVmZmVyRGF0
YVNpemU7CisgICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMAorICAgICAgICAmJiAobV9mb3JjZUF0dHJpYjBC
dWZmZXJSZWZpbGwKKyAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzBdICE9IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdCisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1
ZVsxXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXQorICAgICAgICAgICAgfHwgYXR0
cmliVmFsdWUudmFsdWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KKyAgICAg
ICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzNdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzNdKSkgeworICAgICAgICAgICAgYXV0byBidWZmZXJEYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7CisgICAgICAgICAgICBmb3IgKEdD
M0RzaXplaSBpaSA9IDA7IGlpIDwgbnVtVmVydGV4ICsgMTsgKytpaSkgeworICAgICAgICAgICAg
ICAgIGJ1ZmZlckRhdGFbaWkgKiA0XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAgICAg
ICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsxXTsKKyAg
ICAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNCArIDJdID0gYXR0cmliVmFsdWUudmFsdWVb
Ml07CisgICAgICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAzXSA9IGF0dHJpYlZhbHVl
LnZhbHVlWzNdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyVmFsdWVbMF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVswXTsKKyAgICAgICAgICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gYXR0cmliVmFsdWUudmFsdWVbMV07CisgICAgICAgICAg
ICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwor
ICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSBhdHRyaWJWYWx1ZS52
YWx1ZVszXTsKKyAgICAgICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7
CisgICAgICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOworICAg
ICAgICB9CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCwgMCwgMCwgMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmli
MFNpbXVsYXRpb24oKQoreworICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVy
dGV4QXR0cmliU3RhdGUoMCk7CisgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8oc3RhdGUuYnVmZmVyQmluZGlu
Zy5nZXQoKSkpOworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3Rh
dGUuc2l6ZSwgc3RhdGUudHlwZSwgc3RhdGUubm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJp
ZGUsIHN0YXRlLm9mZnNldCk7CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8obV9ib3VuZEFycmF5QnVm
ZmVyLmdldCgpKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KCkKK3sKKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2
ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0
bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOworICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50
KGV2ZW50KTsKKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKKyAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExvc3RDb250ZXh0ICYmIG1fcmVz
dG9yZUFsbG93ZWQpCisgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXliZVJlc3RvcmVDb250ZXh0KCkK
K3sKKyAgICBBU1NFUlQobV9jb250ZXh0TG9zdCk7CisgICAgaWYgKCFtX2NvbnRleHRMb3N0KQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5v
dCByZXN0b3JlZCB1bmxlc3MgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlCisgICAgLy8gd2Vi
Z2xjb250ZXh0bG9zdCBldmVudCB3YXMgcHJldmVudGVkIGVhcmxpZXIuCisgICAgLy8KKyAgICAv
LyBCZWNhdXNlIG9mIHRoZSB3YXkgbV9yZXN0b3JlVGltZXIgaXMgc2V0IHVwIGZvciByZWFsIHZz
LiBzeW50aGV0aWMgbG9zdAorICAgIC8vIGNvbnRleHQgZXZlbnRzLCB3ZSBkb24ndCBoYXZlIHRv
IHdvcnJ5IGFib3V0IHRoaXMgdGVzdCBzaG9ydC1jaXJjdWl0aW5nCisgICAgLy8gdGhlIHJldHJ5
IGxvb3AgZm9yIHJlYWwgY29udGV4dCBsb3N0IGV2ZW50cy4KKyAgICBpZiAoIW1fcmVzdG9yZUFs
bG93ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgY29udGV4dExvc3RSZWFzb24g
PSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
OworICAgIAorICAgIHN3aXRjaCAoY29udGV4dExvc3RSZWFzb24pIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUjoKKyAgICAgICAgLy8gVGhlIEdyYXBoaWNzQ29udGV4dDNE
IGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBmdWxseQorICAgICAgICAvLyBzdXBwb3J0IEdMX0FS
Ql9yb2J1c3RuZXNzIHNlbWFudGljcyB5ZXQuIEFsdGVybmF0aXZlbHksIHRoZQorICAgICAgICAv
LyBXRUJHTF9sb3NlX2NvbnRleHQgZXh0ZW5zaW9uIG1pZ2h0IGhhdmUgYmVlbiB1c2VkIHRvIGZv
cmNlCisgICAgICAgIC8vIGEgbG9zdCBjb250ZXh0LgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6R1VJTFRZX0NPTlRFWFRfUkVTRVRfQVJCOgorICAgICAgICAvLyBUaGUg
cmVuZGVyaW5nIGNvbnRleHQgaXMgbm90IHJlc3RvcmVkIGlmIHRoaXMgY29udGV4dCB3YXMKKyAg
ICAgICAgLy8gZ3VpbHR5IG9mIGNhdXNpbmcgdGhlIGdyYXBoaWNzIHJlc2V0LgorICAgICAgICBw
cmludFdhcm5pbmdUb0NvbnNvbGUoIldBUk5JTkc6IFdlYkdMIGNvbnRlbnQgb24gdGhlIHBhZ2Ug
Y2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0OyBub3QgcmVzdG9yaW5nIHRoZSBjb250
ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6SU5OT0NFTlRf
Q09OVEVYVF9SRVNFVF9BUkI6CisgICAgICAgIC8vIEFsd2F5cyBhbGxvdyB0aGUgY29udGV4dCB0
byBiZSByZXN0b3JlZC4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlVO
S05PV05fQ09OVEVYVF9SRVNFVF9BUkI6CisgICAgICAgIC8vIFdhcm4uIElkZWFsbHksIHByb21w
dCB0aGUgdXNlciB0ZWxsaW5nIHRoZW0gdGhhdCBXZWJHTAorICAgICAgICAvLyBjb250ZW50IG9u
IHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvCisgICAgICAg
IC8vIHJlc2V0IGFuZCBhc2sgdGhlbSB3aGV0aGVyIHRoZXkgd2FudCB0byBjb250aW51ZSBydW5u
aW5nCisgICAgICAgIC8vIHRoZSBjb250ZW50LiBPbmx5IGlmIHRoZXkgc2F5ICJ5ZXMiIHNob3Vs
ZCB3ZSBzdGFydAorICAgICAgICAvLyBhdHRlbXB0aW5nIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQu
CisgICAgICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBv
biB0aGUgcGFnZSBtaWdodCBoYXZlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0byByZXNldCIp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgRnJhbWUqIGZyYW1lID0gY2FudmFz
KCktPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFt
ZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAg
ICAgcmV0dXJuOworICAgIFNjcm9sbFZpZXcqIHJvb3QgPSB2aWV3LT5yb290KCk7CisgICAgaWYg
KCFyb290KQorICAgICAgICByZXR1cm47CisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IHJv
b3QtPmhvc3RXaW5kb3coKTsKKyAgICBpZiAoIWhvc3RXaW5kb3cpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZShtX2F0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKKyAgICBpZiAoIWNvbnRl
eHQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29udGV4dCkK
KyAgICAgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdChzZWNvbmRzQmV0d2VlblJl
c3RvcmVBdHRlbXB0cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIFRoaXMgbGlrZWx5
IHNob3VsZG4ndCBoYXBwZW4gYnV0IGlzIHRoZSBiZXN0IHdheSB0byByZXBvcnQgaXQgdG8gdGhl
IFdlYkdMIGFwcC4KKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgIiIsICJlcnJvciByZXN0b3JpbmcgY29udGV4dCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3
aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1fZHJh
d2luZ0J1ZmZlcikgeworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMo
KTsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZl
ID0gbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlBy
ZXNlcnZlIDogRHJhd2luZ0J1ZmZlcjo6RGlzY2FyZDsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6
QWxwaGFSZXF1aXJlbWVudCBhbHBoYSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZm
ZXI6OkFscGhhIDogRHJhd2luZ0J1ZmZlcjo6T3BhcXVlOworICAgICAgICBtX2RyYXdpbmdCdWZm
ZXIgPSBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVy
LT5zaXplKCksIHByZXNlcnZlLCBhbHBoYSk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Ymlu
ZCgpOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fY29udGV4
dExvc3QgPSBmYWxzZTsKKyAgICBzZXR1cEZsYWdzKCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRl
eHQoKTsKKyAgICBjYW52YXMoKS0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRyZXN0b3JlZEV2ZW50LCBmYWxzZSwgdHJ1ZSwg
IiIpKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuc3VyZU5vdE51
bGwoY29uc3QgU3RyaW5nJiB0ZXh0KSBjb25zdAoreworICAgIGlmICh0ZXh0LmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gV1RGOjplbXB0eVN0cmluZygpOworICAgIHJldHVybiB0ZXh0OworfQor
CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFn
ZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKKyAgICA6IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5p
cXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5bXT4oY2FwYWNpdHkpKQorICAgICwgbV9j
YXBhY2l0eShjYXBhY2l0eSkKK3sKK30KKworSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG1fY2FwYWNpdHk7ICsr
aSkgeworICAgICAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9idWZmZXJzW2ldLmdldCgpOworICAg
ICAgICBpZiAoIWJ1ZikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoYnVmLT5sb2dp
Y2FsU2l6ZSgpICE9IHNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYnViYmxl
VG9Gcm9udChpKTsKKyAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICB9CisgICAgCisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAx
KTsKKyAgICBpZiAoIXRlbXApCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGkgPSBzdGQ6
Om1pbihtX2NhcGFjaXR5IC0gMSwgaSk7CisgICAgbV9idWZmZXJzW2ldID0gV1RGOjptb3ZlKHRl
bXApOworICAgIAorICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7Cisg
ICAgYnViYmxlVG9Gcm9udChpKTsKKyAgICByZXR1cm4gYnVmOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmJ1YmJsZVRvRnJvbnQoaW50
IGlkeCkKK3sKKyAgICBmb3IgKGludCBpID0gaWR4OyBpID4gMDsgLS1pKQorICAgICAgICBtX2J1
ZmZlcnNbaV0uc3dhcChtX2J1ZmZlcnNbaS0xXSk7Cit9CisKK25hbWVzcGFjZSB7CisgICAgCisg
ICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdDM0RlbnVtIGVycm9yKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChlcnJvcikgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU06CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfRU5VTSI7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU6CisgICAgICAgICAgICByZXR1cm4gIklO
VkFMSURfVkFMVUUiOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTjoKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9PUEVSQVRJT04iOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZOgorICAgICAgICAgICAgcmV0
dXJuICJPVVRfT0ZfTUVNT1JZIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09OVEVYVF9MT1NUX1dFQkdMOgorICAgICAgICAgICAgcmV0dXJuICJDT05URVhUX0xPU1RfV0VC
R0wiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCJXZWJHTCBFUlJPUiglMDR4KSIsIGVycm9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK30g
Ly8gbmFtZXNwYWNlIGFub255bW91cworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgZGlz
cGxheSkKK3sKKyAgICBpZiAobV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSAmJiBkaXNwbGF5
ID09IERpc3BsYXlJbkNvbnNvbGUpIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2Vi
R0w6ICIpICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25O
YW1lKSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOworICAgICAgICBwcmludEdMRXJyb3JU
b0NvbnNvbGUoc3RyKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihl
cnJvcik7Cit9CisKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwcmludEdMV2Fy
bmluZ1RvQ29uc29sZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2Ny
aXB0aW9uKQoreworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7CisgICAg
ICAgIFN0cmluZyBzdHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUp
ICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICAgIHByaW50R0xFcnJvclRvQ29u
c29sZShzdHIpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
cHBseVN0ZW5jaWxUZXN0KCkKK3sKKyAgICBib29sIGhhdmVTdGVuY2lsQnVmZmVyID0gZmFsc2U7
CisgICAgCisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBoYXZlU3RlbmNp
bEJ1ZmZlciA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5oYXNTdGVuY2lsQnVmZmVyKCk7CisgICAg
ZWxzZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVz
ID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBh
dHRyaWJ1dGVzLT5zdGVuY2lsKCk7CisgICAgfQorICAgIGVuYWJsZU9yRGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9URVNULAorICAgICAgICAgICAgICAgICAgICBtX3N0ZW5jaWxF
bmFibGVkICYmIGhhdmVTdGVuY2lsQnVmZmVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjplbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFi
bGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJp
bGl0eSk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7
Cit9CisKK0ludFNpemUgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xhbXBlZENhbnZhc1Np
emUoKQoreworICAgIHJldHVybiBJbnRTaXplKGNsYW1wKGNhbnZhcygpLT53aWR0aCgpLCAxLCBt
X21heFZpZXdwb3J0RGltc1swXSksCisgICAgICAgICAgICAgICAgICAgY2xhbXAoY2FudmFzKCkt
PmhlaWdodCgpLCAxLCBtX21heFZpZXdwb3J0RGltc1sxXSkpOworfQorCitHQzNEaW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldE1heERyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIXN1
cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heERy
YXdCdWZmZXJzKQorICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6
TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICBpZiAoIW1fbWF4
Q29sb3JBdHRhY2htZW50cykKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNp
b25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMp
OworICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVO
VFMgPj0gTUFYX0RSQVdfQlVGRkVSUy4KKyAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVm
ZmVycywgbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKK3sKKyAgICBpZiAoIXN1cHBv
cnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heENvbG9y
QXR0YWNobWVudHMpCisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNE
OjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAg
ICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnNldEJhY2tEcmF3QnVmZmVyKEdDM0RlbnVtIGJ1ZikKK3sKKyAgICBtX2Jh
Y2tEcmF3QnVmZmVyID0gYnVmOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7Cisg
ICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcuZ2V0KCksIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCit7CisgICAgRXhjZXB0aW9uQ29kZSBl
YzsKKyAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSwgZWMp
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN1cHBvcnRzRHJhd0J1ZmZl
cnMoKQoreworICAgIGlmICghbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCkg
eworICAgICAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkID0gdHJ1ZTsK
KyAgICAgICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZCA9IFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZCh0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5c0luc3RhbmNlZChH
QzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBw
cmltY291bnQpCit7CisgICAgaWYgKCFwcmltY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCF2YWxpZGF0
ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHBy
aW1jb3VudCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OworICAgIAorICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0Fy
cmF5c0luc3RhbmNlZCIsIHRydWUpOworICAgIAorICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0lu
c3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisgICAgCisgICAgaWYgKCFp
c0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgcmVz
dG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0Fy
cmF5c0luc3RhbmNlZCIsIGZhbHNlKTsKKyAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zm
c2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGlmICghcHJpbWNvdW50KSB7CisgICAg
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1l
bnRzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBu
dW1FbGVtZW50cywgcHJpbWNvdW50KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNsZWFy
SWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
ZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgaWYgKCFudW1F
bGVtZW50cykKKyAgICAgICAgICAgIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5
cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51bUVsZW1lbnRzKTsKKyAgICAg
ICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVt
ZW50cyk7CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hl
Y2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCB0cnVlKTsKKyAg
ICAKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlw
ZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgcHJpbWNvdW50KTsKKyAgICAKKyAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAg
ICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2Vk
KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliRGl2
aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGluZGV4
ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlzb3IiLCAiaW5k
ZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZp
c29yKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3Ip
OworfQorCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZV9oCisjZGVmaW5lIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2VfaAorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisj
aW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZm
ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXZWJHTEdldEluZm8uaCIKKyNp
bmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXkuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBTkdMRUluc3RhbmNlZEFycmF5czsK
K2NsYXNzIEVYVEJsZW5kTWluTWF4OworY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
OworY2xhc3MgRVhUU2hhZGVyVGV4dHVyZUxPRDsKK2NsYXNzIEVYVHNSR0I7CitjbGFzcyBFWFRG
cmFnRGVwdGg7CitjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OworY2xhc3MgSFRNTFZpZGVvRWxlbWVu
dDsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRhOworY2xhc3MgSW50U2l6ZTsK
K2NsYXNzIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM7CitjbGFzcyBPRVNUZXh0dXJlRmxvYXQ7Citj
bGFzcyBPRVNUZXh0dXJlRmxvYXRMaW5lYXI7CitjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0Owor
Y2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKK2NsYXNzIE9FU1ZlcnRleEFycmF5T2Jq
ZWN0OworY2xhc3MgT0VTRWxlbWVudEluZGV4VWludDsKK2NsYXNzIFdlYkdMQWN0aXZlSW5mbzsK
K2NsYXNzIFdlYkdMQnVmZmVyOworY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7CitjbGFzcyBXZWJH
TENvbnRleHRPYmplY3Q7CitjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOworY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOworY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVMzVEM7CitjbGFzcyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOworY2xhc3MgV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mbzsKK2NsYXNzIFdlYkdMRGVidWdTaGFkZXJzOworY2xhc3MgV2ViR0xEZXB0aFRl
eHR1cmU7CitjbGFzcyBXZWJHTERyYXdCdWZmZXJzOworY2xhc3MgV2ViR0xFeHRlbnNpb247Citj
bGFzcyBXZWJHTEZyYW1lYnVmZmVyOworY2xhc3MgV2ViR0xMb3NlQ29udGV4dDsKK2NsYXNzIFdl
YkdMT2JqZWN0OworY2xhc3MgV2ViR0xQcm9ncmFtOworY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7
CitjbGFzcyBXZWJHTFNoYWRlcjsKK2NsYXNzIFdlYkdMU2hhcmVkT2JqZWN0OworY2xhc3MgV2Vi
R0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ7CitjbGFzcyBXZWJHTFRleHR1cmU7CitjbGFzcyBXZWJH
TFVuaWZvcm1Mb2NhdGlvbjsKK2NsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CisKK3R5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlPiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENvbnRleHRBdHRyaWJ1
dGVzKiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSgpOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQorI2lmIFBMQVRGT1JNKFdJTikKKy8vIEZJWE1FOiBJbXBsZW1lbnQgYWNj
ZWxlcmF0ZWQgM2QgY2FudmFzIG9uIFdpbmRvd3MuCit2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRl
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisjZWxzZQordmlydHVhbCBib29s
IGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYK
KworaW50IGRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0OworaW50IGRyYXdpbmdCdWZmZXJIZWln
aHQoKSBjb25zdDsKKwordm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2Vw
dGlvbkNvZGUmKTsKK3ZvaWQgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVy
KiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwor
dm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqLCBFeGNlcHRpb25D
b2RlJik7Cit2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVi
dWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgYmluZFRl
eHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBFeGNlcHRpb25Db2RlJik7Cit2
b2lkIGJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQg
Ymx1ZSwgR0MzRGZsb2F0IGFscGhhKTsKK3ZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2Rl
KTsKK3ZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVt
IG1vZGVBbHBoYSk7Cit2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBk
ZmFjdG9yKTsKK3ZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51
bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7CisKK3ZvaWQg
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2Fn
ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJy
YXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0RlbnVt
IHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYp
Owordm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwg
QXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CisKK0dDM0RlbnVtIGNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsKK3ZvaWQgY2xlYXIoR0MzRGJpdGZp
ZWxkIG1hc2spOwordm9pZCBjbGVhckNvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVl
biwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSk7Cit2b2lkIGNsZWFyRGVwdGgoR0Mz
RGZsb2F0KTsKK3ZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQpOwordm9pZCBjb2xvck1hc2soR0Mz
RGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJv
b2xlYW4gYWxwaGEpOwordm9pZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9u
Q29kZSYpOworCit2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
IEFycmF5QnVmZmVyVmlldyogZGF0YSk7Cit2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwor
Cit2b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKTsKK3ZvaWQgY29weVRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCk7CisKK1Bhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZUJ1ZmZlcigp
OworUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBjcmVhdGVGcmFtZWJ1ZmZlcigpOworUGFz
c1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsKK1Bhc3NSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworUGFzc1JlZlB0cjxXZWJHTFNoYWRl
cj4gY3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NSZWZQ
dHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CisKK3ZvaWQgY3VsbEZhY2UoR0MzRGVu
dW0gbW9kZSk7CisKK3ZvaWQgZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKik7Cit2b2lkIGRlbGV0
ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKK3ZvaWQgZGVsZXRlUHJvZ3JhbShXZWJH
TFByb2dyYW0qKTsKK3ZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7
Cit2b2lkIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciopOwordm9pZCBkZWxldGVUZXh0dXJlKFdl
YkdMVGV4dHVyZSopOworCit2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSk7Cit2b2lkIGRlcHRoTWFz
ayhHQzNEYm9vbGVhbik7Cit2b2lkIGRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxv
YXQgekZhcik7Cit2b2lkIGRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlcios
IEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApOwordm9pZCBkaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKK3Zv
aWQgZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291
bnQsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYpOworCit2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOwordm9pZCBlbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBmaW5pc2go
KTsKK3ZvaWQgZmx1c2goKTsKK3ZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYpOwor
dm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSk7Cit2b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0Rl
bnVtIHRhcmdldCk7CisKK1Bhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVBdHRy
aWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NS
ZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIEdD
M0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Citib29sIGdldEF0dGFjaGVkU2hhZGVycyhX
ZWJHTFByb2dyYW0qLCBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4mLCBFeGNlcHRpb25Db2Rl
Jik7CitHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CitXZWJHTEdldEluZm8gZ2V0QnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NSZWZQdHI8V2ViR0xDb250
ZXh0QXR0cmlidXRlcz4gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKK0dDM0RlbnVtIGdldEVycm9y
KCk7CitXZWJHTEV4dGVuc2lvbiogZ2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7CitX
ZWJHTEdldEluZm8gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKK1dlYkdMR2V0SW5mbyBnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKK1dlYkdMR2V0SW5mbyBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSosIEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CitTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2co
V2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworV2ViR0xHZXRJbmZvIGdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJik7CitXZWJHTEdldEluZm8gZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiwgR0Mz
RGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKK1N0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNp
c2lvbkZvcm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUs
IEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKK1N0cmluZyBnZXRTaGFk
ZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CitWZWN0b3I8U3RyaW5nPiBn
ZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CitXZWJHTEdldEluZm8gZ2V0VGV4UGFyYW1ldGVyKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKK1dlYkdMR2V0
SW5mbyBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiwgRXhjZXB0aW9uQ29kZSYpOworUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gZ2V0
VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmKTsKK1dlYkdMR2V0SW5mbyBnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0Rl
bnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Citsb25nIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSk7CisKK3ZvaWQgaGludChHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpOworR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZm
ZXIqKTsKK2Jvb2wgaXNDb250ZXh0TG9zdCgpIGNvbnN0OworR0MzRGJvb2xlYW4gaXNFbmFibGVk
KEdDM0RlbnVtIGNhcCk7CitHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZm
ZXIqKTsKK0dDM0Rib29sZWFuIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKK0dDM0Rib29sZWFu
IGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7CitHQzNEYm9vbGVhbiBpc1NoYWRl
cihXZWJHTFNoYWRlciopOworR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFdlYkdMVGV4dHVyZSopOwor
Cit2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpOwordm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dy
YW0qLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50IHBhcmFtKTsKK3ZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNE
ZmxvYXQgdW5pdHMpOwordm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgcmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCk7Cit2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KTsKK3ZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9v
bGVhbiBpbnZlcnQpOwordm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwordm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xTaGFk
ZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHN0ZW5jaWxGdW5jKEdD
M0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKK3ZvaWQgc3RlbmNpbEZ1
bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0Mz
RHVpbnQgbWFzayk7Cit2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50KTsKK3ZvaWQgc3RlbmNpbE1h
c2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKTsKK3ZvaWQgc3RlbmNpbE9w
KEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7Cit2b2lkIHN0
ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpm
YWlsLCBHQzNEZW51bSB6cGFzcyk7CisKK3ZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAg
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCisgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZp
ZXcqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSosIEV4Y2VwdGlvbkNvZGUm
KTsKK3ZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAorICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFZJREVPKQor
dm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKK3Zv
aWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxv
YXQgcGFyYW0pOwordm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQgcGFyYW0pOworCit2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZl
clZpZXcqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0
YSosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxl
bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZh
c0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFZJREVPKQordm9pZCB0ZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlm
CisKK3ZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYpOwordm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1
bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5p
Zm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0yZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwg
RXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVu
aWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0yaShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBF
eGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZv
cm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtM2YoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdD
M0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
KTsKK3ZvaWQgdW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5p
Zm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtM2l2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKK3Zv
aWQgdW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNv
ZGUmKTsKK3ZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtNGZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBH
QzNEaW50IHcsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsK
K3ZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm1N
YXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQg
dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxv
YXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3Jt
TWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lk
IHVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7CisKK3ZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRp
b25Db2RlJik7Cit2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25D
b2RlJik7CisKK3ZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4
KTsKK3ZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZh
bHVlcyk7Cit2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKK3ZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSk7Cit2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwordm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Cit2b2lk
IHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHks
IEdDM0RmbG9hdCB6KTsKK3ZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHZhbHVlcyk7Cit2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKK3ZvaWQgdmVydGV4QXR0cmliNGYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdD
M0RmbG9hdCB3KTsKK3ZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMy
QXJyYXkqIHZhbHVlcyk7Cit2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKK3ZvaWQgdmVydGV4QXR0cmliUG9pbnRl
cihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVh
biBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzdHJpZGUs
IGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKwordm9pZCB2aWV3cG9ydChHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKwor
Ly8gV0VCS0lUX2xvc2VfY29udGV4dCBzdXBwb3J0CitlbnVtIExvc3RDb250ZXh0TW9kZSB7Cisg
ICAgLy8gTG9zdCBjb250ZXh0IG9jY3VycmVkIGF0IHRoZSBncmFwaGljcyBzeXN0ZW0gbGV2ZWwu
CisgICAgUmVhbExvc3RDb250ZXh0LAorICAgIAorICAgIC8vIExvc3QgY29udGV4dCBwcm92b2tl
ZCBieSBXRUJLSVRfbG9zZV9jb250ZXh0LgorICAgIFN5bnRoZXRpY0xvc3RDb250ZXh0Cit9Owor
dm9pZCBmb3JjZUxvc3RDb250ZXh0KExvc3RDb250ZXh0TW9kZSk7Cit2b2lkIGZvcmNlUmVzdG9y
ZUNvbnRleHQoKTsKK3ZvaWQgbG9zZUNvbnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7CisKK0dy
YXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dC5nZXQoKTsgfQorV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRHcm91cCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9Cit2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKKwordm9pZCByZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCk7CisKK3ZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwordmlydHVhbCB2b2lk
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgb3ZlcnJpZGU7CitQYXNzUmVmUHRyPElt
YWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKwordm9pZCByZW1v
dmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKK3ZvaWQgcmVtb3ZlQ29udGV4dE9i
amVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKKwordW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmli
cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VmVydGV4QXR0cmliczsgfQorCisvLyBBTkdMRV9pbnN0
YW5jZWRfYXJyYXlzIGV4dGVuc2lvbiBmdW5jdGlvbnMuCit2b2lkIGRyYXdBcnJheXNJbnN0YW5j
ZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6
ZWkgcHJpbWNvdW50KTsKK3ZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUs
IEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNp
emVpIHByaW1jb3VudCk7Cit2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgs
IEdDM0R1aW50IGRpdmlzb3IpOworCitwcm90ZWN0ZWQ6CitXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKEhUTUxDYW52YXNFbGVtZW50KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOwor
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CisKK3By
aXZhdGU6CitmcmllbmQgY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsKK2ZyaWVuZCBjbGFzcyBXZWJH
TEZyYW1lYnVmZmVyOworZnJpZW5kIGNsYXNzIFdlYkdMT2JqZWN0OworZnJpZW5kIGNsYXNzIE9F
U1ZlcnRleEFycmF5T2JqZWN0OworZnJpZW5kIGNsYXNzIFdlYkdMRGVidWdTaGFkZXJzOworZnJp
ZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM7CitmcmllbmQgY2xhc3MgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDOworZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOworZnJpZW5kIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNh
bGxiYWNrOworZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CisKK3ZvaWQg
aW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKK3ZvaWQgc2V0dXBGbGFncygpOworCisvLyBBY3RpdmVE
T01PYmplY3QKK3ZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlk
ZTsKK3ZpcnR1YWwgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Cit2aXJ0dWFsIGNvbnN0IGNoYXIqIGFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0IjsgfQorCit2b2lkIGFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCop
Owordm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOwordm9pZCBkZXRh
Y2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisKK3ZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNE
KCk7Cit2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworCisvLyBRdWVyeSB3aGV0aGVyIGl0IGlz
IGJ1aWx0IG9uIHRvcCBvZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRpb24uCitib29sIGlz
R0xFUzJDb21wbGlhbnQoKSB7IHJldHVybiBtX2lzR0xFUzJDb21wbGlhbnQ7IH0KKy8vIFF1ZXJ5
IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KK2Jvb2wgaXNHTEVTMk5Q
T1RTdHJpY3QoKSB7IHJldHVybiBtX2lzR0xFUzJOUE9UU3RyaWN0OyB9CisvLyBRdWVyeSBpZiB0
aGUgR0wgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVzIGVycm9ycyBvbiBvdXQtb2YtYm91bmRzIGJ1
ZmZlciBhY2Nlc3Nlcy4KK2Jvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
cygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlczsgfQor
Ly8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGluaXRpYWxpemVzIHRleHR1cmVzL3Jl
bmRlcmJ1ZmZlcnMgdG8gMC4KK2Jvb2wgaXNSZXNvdXJjZVNhZmUoKSB7IHJldHVybiBtX2lzUmVz
b3VyY2VTYWZlOyB9CisvLyBRdWVyeSBpZiBkZXB0aF9zdGVuY2lsIGJ1ZmZlciBpcyBzdXBwb3J0
ZWQuCitib29sIGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkgeyByZXR1cm4gbV9pc0RlcHRoU3Rl
bmNpbFN1cHBvcnRlZDsgfQorCisvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVz
IG9mIE9wZW5HTCBkYXRhIHR5cGVzCisvLyBsaWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KK3Vu
c2lnbmVkIHNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpOworCisvLyBCYXNpYyB2YWxpZGF0aW9u
IG9mIGNvdW50IGFuZCBvZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVu
dCBhcnJheSBidWZmZXIKK2Jvb2wgdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpOworCisvLyBDb25zZXJ2YXRp
dmUgYnV0IHF1aWNrIGluZGV4IHZhbGlkYXRpb24KK2Jvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29u
c2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsK
KworLy8gUHJlY2lzZSBidXQgc2xvdyBpbmRleCB2YWxpZGF0aW9uIC0tIG9ubHkgZG9uZSBpZiBj
b25zZXJ2YXRpdmUgY2hlY2tzIGZhaWwKK2Jvb2wgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCB1bnNpZ25l
ZCYgbnVtRWxlbWVudHNSZXF1aXJlZCk7Citib29sIHZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1
bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50ID0gMCk7CisKK2Jv
b2wgdmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBjaGFyKiwgV2ViR0xPYmplY3QqKTsKKworYm9v
bCB2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBt
b2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQp
OworYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9m
ZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKKworLy8g
QWRkcyBhIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQuCit2b2lkIGFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEdDM0RlbnVtKTsKKworUGFzc1JlZlB0cjxJbWFnZT4gZHJhd0ltYWdlSW50b0J1
ZmZlcihJbWFnZSosIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRldmljZVNjYWxlRmFjdG9y
KTsKKworI2lmIEVOQUJMRShWSURFTykKK1Bhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0lt
YWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBCYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJik7
CisjZW5kaWYKKworUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CitSZWZQdHI8
V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4dEdyb3VwOworCisvLyBPcHRpb25hbCBzdHJ1Y3R1
cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQgb2YgZGlyZWN0bHkK
Ky8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRleHQuCitSZWZQdHI8RHJhd2luZ0J1ZmZl
cj4gbV9kcmF3aW5nQnVmZmVyOworCisvLyBEaXNwYXRjaGVzIGEgY29udGV4dCBsb3N0IGV2ZW50
IG9uY2UgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IG9uZSBpcyBuZWVkZWQuCisvLyBUaGlzIGlzIHVz
ZWQgYm90aCBmb3Igc3ludGhldGljIGFuZCByZWFsIGNvbnRleHQgbG9zc2VzLiBGb3IgcmVhbCBv
bmVzLCBpdCdzCisvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0
YWNrLCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKKy8vIG9uIGhvdyBleGFjdGx5IHRoZSBw
bGF0Zm9ybSBkaXNjb3ZlcnMgdGhhdCB0aGUgY29udGV4dCB3YXMgbG9zdC4gRm9yIGJldHRlcgor
Ly8gcG9ydGFiaWxpdHkgd2UgYWx3YXlzIGRlZmVyIHRoZSBkaXNwYXRjaCBvZiB0aGUgZXZlbnQu
CitUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOworYm9vbCBtX3Jlc3RvcmVB
bGxvd2VkOworVGltZXIgbV9yZXN0b3JlVGltZXI7CisKK2Jvb2wgbV9uZWVkc1VwZGF0ZTsKK2Jv
b2wgbV9tYXJrZWRDYW52YXNEaXJ0eTsKK0hhc2hTZXQ8V2ViR0xDb250ZXh0T2JqZWN0Kj4gbV9j
b250ZXh0T2JqZWN0czsKKworLy8gTGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFp
biBpbmZvIGFib3V0IHNpemVzIGZvciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9y
IEVMRU1FTlRfQVJSQVlfQlVGRkVSCitSZWZQdHI8V2ViR0xCdWZmZXI+IG1fYm91bmRBcnJheUJ1
ZmZlcjsKKworUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZlcnRl
eEFycmF5T2JqZWN0OworUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdDsKK3ZvaWQgc2V0Qm91bmRWZXJ0ZXhBcnJheU9iamVjdChQYXNzUmVm
UHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IGFycmF5T2JqZWN0KQoreworICAgIGlmIChh
cnJheU9iamVjdCkKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gYXJyYXlPYmpl
Y3Q7CisgICAgZWxzZQorICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1
bHRWZXJ0ZXhBcnJheU9iamVjdDsKK30KKworY2xhc3MgVmVydGV4QXR0cmliVmFsdWUgeworcHVi
bGljOgorICAgIFZlcnRleEF0dHJpYlZhbHVlKCkKKyAgICB7CisgICAgICAgIGluaXRWYWx1ZSgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRWYWx1ZSgpCisgICAgeworICAgICAgICB2YWx1
ZVswXSA9IDAuMGY7CisgICAgICAgIHZhbHVlWzFdID0gMC4wZjsKKyAgICAgICAgdmFsdWVbMl0g
PSAwLjBmOworICAgICAgICB2YWx1ZVszXSA9IDEuMGY7CisgICAgfQorICAgIAorICAgIEdDM0Rm
bG9hdCB2YWx1ZVs0XTsKK307CitWZWN0b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0
cmliVmFsdWU7Cit1bnNpZ25lZCBtX21heFZlcnRleEF0dHJpYnM7CitSZWZQdHI8V2ViR0xCdWZm
ZXI+IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsKK2xvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6
ZTsKK0dDM0RmbG9hdCBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVs0XTsKK2Jvb2wgbV9mb3Jj
ZUF0dHJpYjBCdWZmZXJSZWZpbGw7Citib29sIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmU7CisK
K1JlZlB0cjxXZWJHTFByb2dyYW0+IG1fY3VycmVudFByb2dyYW07CitSZWZQdHI8V2ViR0xGcmFt
ZWJ1ZmZlcj4gbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CitSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+
IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKK3N0cnVjdCBUZXh0dXJlVW5pdFN0YXRlIHsKKyAgICBS
ZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXh0dXJlMkRCaW5kaW5nOworICAgIFJlZlB0cjxXZWJHTFRl
eHR1cmU+IHRleHR1cmVDdWJlTWFwQmluZGluZzsKK307CitWZWN0b3I8VGV4dHVyZVVuaXRTdGF0
ZT4gbV90ZXh0dXJlVW5pdHM7Cit1bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7CisK
K1JlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxhY2tUZXh0dXJlMkQ7CitSZWZQdHI8V2ViR0xUZXh0
dXJlPiBtX2JsYWNrVGV4dHVyZUN1YmVNYXA7CisKK1ZlY3RvcjxHQzNEZW51bT4gbV9jb21wcmVz
c2VkVGV4dHVyZUZvcm1hdHM7CisKKy8vIEZpeGVkLXNpemUgY2FjaGUgb2YgcmV1c2FibGUgaW1h
Z2UgYnVmZmVycyBmb3IgdmlkZW8gdGV4SW1hZ2UyRCBjYWxscy4KK2NsYXNzIExSVUltYWdlQnVm
ZmVyQ2FjaGUgeworcHVibGljOgorICAgIExSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5
KTsKKyAgICAvLyBUaGUgcG9pbnRlciByZXR1cm5lZCBpcyBvd25lZCBieSB0aGUgaW1hZ2UgYnVm
ZmVyIG1hcC4KKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZSk7Citwcml2YXRlOgorICAgIHZvaWQgYnViYmxlVG9Gcm9udChpbnQgaWR4KTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7Cisg
ICAgaW50IG1fY2FwYWNpdHk7Cit9OworTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZElt
YWdlQ2FjaGU7CisKK0dDM0RpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKK0dDM0RpbnQgbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemU7CitHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKK0dDM0RpbnQg
bV9tYXhWaWV3cG9ydERpbXNbMl07CitHQzNEaW50IG1fbWF4VGV4dHVyZUxldmVsOworR0MzRGlu
dCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisKK0dDM0RpbnQgbV9tYXhEcmF3QnVmZmVyczsK
K0dDM0RpbnQgbV9tYXhDb2xvckF0dGFjaG1lbnRzOworR0MzRGVudW0gbV9iYWNrRHJhd0J1ZmZl
cjsKK2Jvb2wgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZDsKK2Jvb2wgbV9k
cmF3QnVmZmVyc1N1cHBvcnRlZDsKKworR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7CitHQzNEaW50
IG1fdW5wYWNrQWxpZ25tZW50OworYm9vbCBtX3VucGFja0ZsaXBZOworYm9vbCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGE7CitHQzNEZW51bSBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uOwor
Ym9vbCBtX2NvbnRleHRMb3N0OworTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RNb2RlOwor
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworCitib29sIG1fbGF5
ZXJDbGVhcmVkOworR0MzRGZsb2F0IG1fY2xlYXJDb2xvcls0XTsKK2Jvb2wgbV9zY2lzc29yRW5h
YmxlZDsKK0dDM0RmbG9hdCBtX2NsZWFyRGVwdGg7CitHQzNEaW50IG1fY2xlYXJTdGVuY2lsOwor
R0MzRGJvb2xlYW4gbV9jb2xvck1hc2tbNF07CitHQzNEYm9vbGVhbiBtX2RlcHRoTWFzazsKKwor
Ym9vbCBtX3N0ZW5jaWxFbmFibGVkOworR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywgbV9zdGVuY2ls
TWFza0JhY2s7CitHQzNEaW50IG1fc3RlbmNpbEZ1bmNSZWYsIG1fc3RlbmNpbEZ1bmNSZWZCYWNr
OyAvLyBOb3RlIHRoYXQgdGhlc2UgYXJlIHRoZSB1c2VyIHNwZWNpZmllZCB2YWx1ZXMsIG5vdCB0
aGUgaW50ZXJuYWwgY2xhbXBlZCB2YWx1ZS4KK0dDM0R1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBt
X3N0ZW5jaWxGdW5jTWFza0JhY2s7CisKK2Jvb2wgbV9pc0dMRVMyQ29tcGxpYW50OworYm9vbCBt
X2lzR0xFUzJOUE9UU3RyaWN0OworYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXM7Citib29sIG1faXNSZXNvdXJjZVNhZmU7Citib29sIG1faXNEZXB0aFN0ZW5jaWxT
dXBwb3J0ZWQ7Citib29sIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkOworCitib29sIG1fc3lu
dGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGU7CitpbnQgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93
ZWQ7CisKKy8vIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0IGNhbiBiZSBjcmVhdGVkIGluIGEgc3Rh
dGUgd2hlcmUgaXQgYXBwZWFycyBhcworLy8gYSB2YWxpZCBhbmQgYWN0aXZlIGNvbnRleHQsIGJ1
dCB3aWxsIG5vdCBleGVjdXRlIGFueSBpbXBvcnRhbnQgb3BlcmF0aW9ucworLy8gdW50aWwgaXRz
IGxvYWQgcG9saWN5IGlzIGNvbXBsZXRlbHkgcmVzb2x2ZWQuCitib29sIG1faXNQZW5kaW5nUG9s
aWN5UmVzb2x1dGlvbjsKK2Jvb2wgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uOworYm9v
bCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCk7CisKKy8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVj
dHMuCitzdGQ6OnVuaXF1ZV9wdHI8RVhURnJhZ0RlcHRoPiBtX2V4dEZyYWdEZXB0aDsKK3N0ZDo6
dW5pcXVlX3B0cjxFWFRCbGVuZE1pbk1heD4gbV9leHRCbGVuZE1pbk1heDsKK3N0ZDo6dW5pcXVl
X3B0cjxFWFRzUkdCPiBtX2V4dHNSR0I7CitzdGQ6OnVuaXF1ZV9wdHI8RVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljPiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzsKK3N0ZDo6dW5pcXVl
X3B0cjxFWFRTaGFkZXJUZXh0dXJlTE9EPiBtX2V4dFNoYWRlclRleHR1cmVMT0Q7CitzdGQ6OnVu
aXF1ZV9wdHI8T0VTVGV4dHVyZUZsb2F0PiBtX29lc1RleHR1cmVGbG9hdDsKK3N0ZDo6dW5pcXVl
X3B0cjxPRVNUZXh0dXJlRmxvYXRMaW5lYXI+IG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyOworc3Rk
Ojp1bmlxdWVfcHRyPE9FU1RleHR1cmVIYWxmRmxvYXQ+IG1fb2VzVGV4dHVyZUhhbGZGbG9hdDsK
K3N0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVI
YWxmRmxvYXRMaW5lYXI7CitzdGQ6OnVuaXF1ZV9wdHI8T0VTU3RhbmRhcmREZXJpdmF0aXZlcz4g
bV9vZXNTdGFuZGFyZERlcml2YXRpdmVzOworc3RkOjp1bmlxdWVfcHRyPE9FU1ZlcnRleEFycmF5
T2JqZWN0PiBtX29lc1ZlcnRleEFycmF5T2JqZWN0Oworc3RkOjp1bmlxdWVfcHRyPE9FU0VsZW1l
bnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKK3N0ZDo6dW5pcXVlX3B0cjxXZWJH
TExvc2VDb250ZXh0PiBtX3dlYmdsTG9zZUNvbnRleHQ7CitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mbz4gbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvOworc3RkOjp1bmlxdWVf
cHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFkZXJzOworc3RkOjp1bmlxdWVf
cHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFU
QzsKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM+IG1fd2ViZ2xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDOworc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDOworc3RkOjp1bmlxdWVfcHRy
PFdlYkdMRGVwdGhUZXh0dXJlPiBtX3dlYmdsRGVwdGhUZXh0dXJlOworc3RkOjp1bmlxdWVfcHRy
PFdlYkdMRHJhd0J1ZmZlcnM+IG1fd2ViZ2xEcmF3QnVmZmVyczsKK3N0ZDo6dW5pcXVlX3B0cjxB
TkdMRUluc3RhbmNlZEFycmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKKworLy8gSGVscGVy
cyBmb3IgZ2V0UGFyYW1ldGVyIGFuZCBvdGhlcnMKK1dlYkdMR2V0SW5mbyBnZXRCb29sZWFuUGFy
YW1ldGVyKEdDM0RlbnVtKTsKK1dlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIo
R0MzRGVudW0pOworV2ViR0xHZXRJbmZvIGdldEZsb2F0UGFyYW1ldGVyKEdDM0RlbnVtKTsKK1dl
YkdMR2V0SW5mbyBnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0pOworV2ViR0xHZXRJbmZvIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKK1dlYkdMR2V0SW5mbyBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0pOworV2ViR0xHZXRJbmZvIGdldFdlYkdMSW50QXJyYXlQ
YXJhbWV0ZXIoR0MzRGVudW0pOworCisvLyBDbGVhciB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMg
Y29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVyYXRpb24uCisvLyBjbGVhck1hc2sgaXMgc2V0
IHRvIHRoZSBiaXRmaWVsZCBvZiBhbnkgY2xlYXIgdGhhdCB3b3VsZCBoYXBwZW4gYW55d2F5IGF0
IHRoaXMgdGltZQorLy8gYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhhdCBjbGVh
ciBpcyBub3cgdW5uZWNlc3NhcnkuCitib29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVs
ZCBjbGVhck1hc2sgPSAwKTsKKworLy8gSGVscGVyIHRvIHJlc3RvcmUgc3RhdGUgdGhhdCBjbGVh
cmluZyB0aGUgZnJhbWVidWZmZXIgbWF5IGRlc3Ryb3kuCit2b2lkIHJlc3RvcmVTdGF0ZUFmdGVy
Q2xlYXIoKTsKKwordm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB0ZXhJbWFnZTJESW1w
bChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4U3ViSW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSos
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworCit2b2lkIGNoZWNrVGV4dHVyZUNv
bXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7CisKK3ZvaWQgY3JlYXRlRmFsbGJhY2tCbGFj
a1RleHR1cmVzMXgxKCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29weVRleHtTdWJ9SW1h
Z2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0CisvLyBhbmQgdGhlIGNvbG9yIGJ1
ZmZlciBmb3JtYXQgb2YgdGhlIGN1cnJlbnQgYm91bmQgZnJhbWVidWZmZXIgY29tYmluYXRpb24K
Ky8vIGlzIHZhbGlkLgorYm9vbCBpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5h
dGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LEdDM0RlbnVtIGNvbG9yQnVmZmVy
Rm9ybWF0KTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZm
ZXIncyBjb2xvciBidWZmZXIgZm9ybWF0LgorR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNv
bG9yRm9ybWF0KCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1l
YnVmZmVyJ3Mgd2lkdGguCitpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCk7CisKKy8vIEhl
bHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgoraW50
IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZl
cmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aCBvZiB1bmlmb3JtIGFuZCBhdHRyaWJ1dGUgbG9jYXRp
b25zLgorYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgU3RyaW5nJik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBzaXpl
IGlzIG5vbi1uZWdhdGl2ZS4KKy8vIEdlbmVyYXRlIEdMIGVycm9yIGFuZCByZXR1cm4gZmFsc2Ug
Zm9yIG5lZ2F0aXZlIGlucHV0czsgb3RoZXJ3aXNlLCByZXR1cm4gdHJ1ZS4KK2Jvb2wgdmFsaWRh
dGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpOwor
CisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0
cmluZyBiZWxvbmcgdG8gdGhlCisvLyBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbiBHTFNMIEVT
IDEuMCBzcGVjIHNlY3Rpb24gMy4xLgorYm9vbCB2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hl
Y2sgdGFyZ2V0IGFuZCB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQuCisvLyBHZW5lcmF0ZSBH
TCBlcnJvcnMgYW5kIHJldHVybiAwIGlmIHRhcmdldCBpcyBpbnZhbGlkIG9yIHRleHR1cmUgYm91
bmQgaXMKKy8vIG51bGwuICBPdGhlcndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0
aGUgdGFyZ2V0LgorV2ViR0xUZXh0dXJlKiB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3Vi
ZU1hcCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBmb3JtYXQvdHlwZSBm
b3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCisvLyBHZW5lcmF0ZXMgR0wgZXJyb3Ig
YW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KK2Jvb2wgdmFsaWRh
dGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZlbCk7CisKKy8vIEhlbHBlciBmdW5j
dGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1h
Z2UuCisvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwgaXMg
aW52YWxpZC4KK2Jvb2wgdmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpOworCitlbnVtIFRleEZ1bmNWYWxp
ZGF0aW9uRnVuY3Rpb25UeXBlIHsKKyAgICBOb3RUZXhTdWJJbWFnZTJELAorICAgIFRleFN1Yklt
YWdlMkQsCit9OworCitlbnVtIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSB7CisgICAgU291
cmNlQXJyYXlCdWZmZXJWaWV3LAorICAgIFNvdXJjZUltYWdlRGF0YSwKKyAgICBTb3VyY2VIVE1M
SW1hZ2VFbGVtZW50LAorICAgIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LAorICAgIFNvdXJjZUhU
TUxWaWRlb0VsZW1lbnQsCit9OworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1h
Z2UyRCB0byBjaGVjayBpZiB0aGUgaW5wdXQgZm9ybWF0L3R5cGUvbGV2ZWwvdGFyZ2V0L3dpZHRo
L2hlaWdodC9ib3JkZXIveG9mZnNldC95b2Zmc2V0IGFyZSB2YWxpZC4KKy8vIE90aGVyd2lzZSwg
aXQgd291bGQgcmV0dXJuIHF1aWNrbHkgd2l0aG91dCBkb2luZyBvdGhlciB3b3JrLgorYm9vbCB2
YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlv
bkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0
ZXJzIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKy8vIEdlbmVyYXRlcyBHTCBl
cnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorYm9vbCB2
YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpOworCitlbnVtIE51bGxEaXNw
b3NpdGlvbiB7CisgICAgTnVsbEFsbG93ZWQsCisgICAgTnVsbE5vdEFsbG93ZWQKK307CisKKy8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZp
ZXcKKy8vIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUgYW5kIGNvbnRhaW5zIGVub3VnaCBkYXRhIGZv
ciB0aGUgdGV4SW1hZ2UgY2FsbC4KKy8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBm
YWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRh
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIE51bGxEaXNwb3NpdGlvbik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxp
ZGF0ZSBhIGdpdmVuIHRleHR1cmUgZm9ybWF0IGlzIHNldHRhYmxlIGFzIGluCisvLyB5b3UgY2Fu
IHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9yIGNhbGwgdGV4SW1hZ2UyRCwgY29weVRleElt
YWdlMkQgYW5kCisvLyBjb3B5VGV4U3ViSW1hZ2UyRC4KKy8vIEdlbmVyYXRlcyBHTCBlcnJvciBh
bmQgcmV0dXJucyBmYWxzZSBpZiB0aGUgZm9ybWF0IGlzIG5vdCBzZXR0YWJsZS4KK2Jvb2wgdmFs
aWRhdGVTZXR0YWJsZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IGZvcm1hdCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRl
eHR1cmUgZGF0YSBpcyBjb3JyZWN0IHNpemUKKy8vIGZvciB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCBk
aW1lbnNpb25zLgorYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscyk7CisKKy8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0
cy4KK2Jvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCk7CisK
Ky8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1cmUgZGltZW5z
aW9ucyBhcmUgdmFsaWQgZm9yCisvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorYm9vbCB2YWxpZGF0ZUNv
bXByZXNzZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RlbnVtIGZvcm1hdCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21w
cmVzc2VkIHRleHR1cmUgZGltZW5zaW9ucyBhcmUgdmFsaWQgZm9yCisvLyB0aGUgZ2l2ZW4gZm9y
bWF0LgorYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgV2ViR0xUZXh0dXJlKik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2Rl
IGZvciBkcmF3e0FycmF5cy9FbGVtZW50c30uCitib29sIHZhbGlkYXRlRHJhd01vZGUoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2
YWxpZGF0ZSBpZiBmcm9udC9iYWNrIHN0ZW5jaWxNYXNrIGFuZCBzdGVuY2lsRnVuYyBzZXR0aW5n
cyBhcmUgdGhlIHNhbWUuCitib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBzdGVuY2ls
IGZ1bmMuCitib29sIHZhbGlkYXRlU3RlbmNpbEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBhbmQg
dGV4UGFyYW1ldGVyaS4KK3ZvaWQgdGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbWksIEdDM0RpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQp
OworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJpbnQgR0wgZXJyb3JzIHRvIGNvbnNvbGUuCit2
b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcmKTsKK3ZvaWQgcHJpbnRHTFdh
cm5pbmdUb0NvbnNvbGUoY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIHJlYXNvbik7
CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCB3YXJuaW5ncyB0byBjb25zb2xlLiBDdXJy
ZW50bHkKKy8vIHVzZWQgb25seSB0byB3YXJuIGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlv
bnMuCit2b2lkIHByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmKTsKKworLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZyYW1lYnVmZmVy
IGZ1bmN0aW9ucy4KKy8vIEdlbmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVn
YWwuCitib29sIHZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCk7CisKKy8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBlcXVhdGlvbiBtb2RlLgorYm9vbCB2
YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7
CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBmdW5jIGZhY3RvcnMuCiti
b29sIHZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlk
YXRlIGEgR0wgY2FwYWJpbGl0eS4KK2Jvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRh
dGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdW5pZm9ybSBmdW5jdGlvbnMuCitib29sIHZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOworYm9vbCB2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qLCBJbnQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Citib29sIHZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiosIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBtb2QpOwor
Ym9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOworYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0Rz
aXplaSBtb2QpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgcGFyYW1ldGVycyBm
b3IgYnVmZmVyRGF0YS4KKy8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFy
Z2V0LCBvciAwIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCitXZWJHTEJ1ZmZlciogdmFsaWRh
dGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtT
dWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkgYW5kIHdvdWxkbid0IHRhaW50
IE9yaWdpbi4KK2Jvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworLy8gSGVscGVy
IGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIGNhbnZhcyBpcyByZWFk
eSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgorYm9vbCB2YWxpZGF0ZUhUTUxDYW52YXNFbGVt
ZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRp
b25Db2RlJik7CisKKyNpZiBFTkFCTEUoVklERU8pCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRl
eHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVhZHkgd291bGRuJ3QgdGFpbnQg
T3JpZ2luLgorYm9vbCB2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKy8v
IEhlbHBlciBmdW5jdGlvbnMgZm9yIHZlcnRleEF0dHJpYk5me3Z9Lgordm9pZCB2ZXJ0ZXhBdHRy
aWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6
ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxv
YXQpOwordm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Cit2
b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwor
CisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJv
Z3JhbSwgZXRjKSBmdW5jdGlvbnMuCisvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCBy
ZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCitib29sIGRlbGV0ZU9iamVjdChXZWJH
TE9iamVjdCopOworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBi
aW5kVGV4dHVyZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KKy8vIElmIHRoZSBvYmplY3QgaGFzIGFs
cmVhZHkgYmVlbiBkZWxldGVkLCBzZXQgZGVsZXRlZCB0byB0cnVlIHVwb24gcmV0dXJuLgorLy8g
UmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVydGhlciBwcm9j
ZXNzaW5nLgorYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7CisKKy8vIEhlbHBlcnMgZm9yIHNpbXVs
YXRpbmcgdmVydGV4QXR0cmliMAordm9pZCBpbml0VmVydGV4QXR0cmliMCgpOworYm9vbCBzaW11
bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCk7Cit2b2lkIHJlc3RvcmVTdGF0
ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisKK3ZvaWQgZGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50KCk7CisvLyBIZWxwZXIgZm9yIHJlc3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9z
dC4KK3ZvaWQgbWF5YmVSZXN0b3JlQ29udGV4dCgpOworCisvLyBEZXRlcm1pbmUgaWYgd2UgYXJl
IHJ1bm5pbmcgcHJpdmlsZWdlZCBjb2RlIGluIHRoZSBicm93c2VyLCBmb3IgZXhhbXBsZSwKKy8v
IGEgU2FmYXJpIG9yIENocm9tZSBleHRlbnNpb24uCitib29sIGFsbG93UHJpdmlsZWdlZEV4dGVu
c2lvbnMoKSBjb25zdDsKKworZW51bSBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgeworICAgIERp
c3BsYXlJbkNvbnNvbGUsCisgICAgRG9udERpc3BsYXlJbkNvbnNvbGUKK307CisKKy8vIFdyYXBw
ZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0aGF0IHNlbmRzIGEg
bWVzc2FnZQorLy8gdG8gdGhlIEphdmFTY3JpcHQgY29uc29sZS4KK3ZvaWQgc3ludGhlc2l6ZUdM
RXJyb3IoR0MzRGVudW0sIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVz
Y3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSA9IERpc3BsYXlJbkNvbnNvbGUpOwor
CitTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBjb25zdDsKKworLy8gRW5hYmxl
IG9yIGRpc2FibGUgc3RlbmNpbCB0ZXN0IGJhc2VkIG9uIHVzZXIgc2V0dGluZyBhbmQKKy8vIHdo
ZXRoZXIgdGhlIGN1cnJlbnQgRkJPIGhhcyBhIHN0ZW5jaWwgYnVmZmVyLgordm9pZCBhcHBseVN0
ZW5jaWxUZXN0KCk7CisKKy8vIEhlbHBlciBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEgY2Fw
YWJpbGl0eS4KK3ZvaWQgZW5hYmxlT3JEaXNhYmxlKEdDM0RlbnVtIGNhcGFiaWxpdHksIGJvb2wg
ZW5hYmxlKTsKKworLy8gQ2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQ
T1JUX0RJTVMuCitJbnRTaXplIGNsYW1wZWRDYW52YXNTaXplKCk7CisKKy8vIEZpcnN0IHRpbWUg
Y2FsbGVkLCBpZiBFWFRfZHJhd19idWZmZXJzIGlzIHN1cHBvcnRlZCwgcXVlcnkgdGhlIHZhbHVl
OyBvdGhlcndpc2UgcmV0dXJuIDAuCisvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUu
CitHQzNEaW50IGdldE1heERyYXdCdWZmZXJzKCk7CitHQzNEaW50IGdldE1heENvbG9yQXR0YWNo
bWVudHMoKTsKKwordm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7CisKK3ZvaWQgcmVz
dG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcigpOwordm9pZCByZXN0b3JlQ3VycmVudFRleHR1cmUyRCgp
OworCisvLyBDaGVjayBpZiBFWFRfZHJhd19idWZmZXJzIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQg
YW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wgcmVxdWlyZW1lbnRzLgorYm9vbCBzdXBwb3J0
c0RyYXdCdWZmZXJzKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5pZGwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY3NyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0Ogor
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorKi8KKwordHlwZWRlZiB1bnNpZ25lZCBs
b25nICBHTGVudW07Cit0eXBlZGVmIGJvb2xlYW4gICAgICAgIEdMYm9vbGVhbjsKK3R5cGVkZWYg
dW5zaWduZWQgbG9uZyAgR0xiaXRmaWVsZDsKK3R5cGVkZWYgYnl0ZSAgICAgICAgICAgR0xieXRl
OyAgICAgICAgIC8qICdieXRlJyBzaG91bGQgYmUgYSBzaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5
cGVkZWYgc2hvcnQgICAgICAgICAgR0xzaG9ydDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgR0xp
bnQ7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgIEdMc2l6ZWk7Cit0eXBlZGVmIGxvbmcgbG9uZyAg
ICAgIEdMaW50cHRyOwordHlwZWRlZiBsb25nIGxvbmcgICAgICBHTHNpemVpcHRyOwordHlwZWRl
ZiBvY3RldCAgICAgICAgICBHTHVieXRlOyAgICAgICAgLyogJ29jdGV0JyBzaG91bGQgYmUgYW4g
dW5zaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgR0x1c2hvcnQ7
Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMdWludDsKK3R5cGVkZWYgdW5yZXN0cmljdGVkIGZs
b2F0IEdMZmxvYXQ7Cit0eXBlZGVmIHVucmVzdHJpY3RlZCBmbG9hdCBHTGNsYW1wZjsKKworWwor
Q29uZGl0aW9uYWw9V0VCR0wsCitKU0N1c3RvbU1hcmtGdW5jdGlvbiwKK0RvTm90Q2hlY2tDb25z
dGFudHMsCitdIGludGVyZmFjZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIDogQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCB7CisKKy8qIENsZWFyQnVmZmVyTWFzayAqLworY29uc3QgR0xlbnVtIERF
UFRIX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7Citjb25zdCBHTGVudW0g
U1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgID0gMHgwMDAwMDQwMDsKK2NvbnN0IEdMZW51
bSBDT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAgPSAweDAwMDA0MDAwOworCisvKiBCZWdp
bk1vZGUgKi8KK2NvbnN0IEdMZW51bSBQT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDA7Citjb25zdCBHTGVudW0gTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MDAxOworY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAw
MjsKK2NvbnN0IEdMZW51bSBMSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDM7
Citjb25zdCBHTGVudW0gVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA0Owor
Y29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICA9IDB4MDAwNTsKK2Nv
bnN0IEdMZW51bSBUUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgPSAweDAwMDY7CisKKy8q
IEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi8KKy8qICAgICAgTkVWRVIg
Ki8KKy8qICAgICAgTEVTUyAqLworLyogICAgICBFUVVBTCAqLworLyogICAgICBMRVFVQUwgKi8K
Ky8qICAgICAgR1JFQVRFUiAqLworLyogICAgICBOT1RFUVVBTCAqLworLyogICAgICBHRVFVQUwg
Ki8KKy8qICAgICAgQUxXQVlTICovCisKKy8qIEJsZW5kaW5nRmFjdG9yRGVzdCAqLworY29uc3Qg
R0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Citjb25zdCBHTGVudW0g
T05FICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTsKK2NvbnN0IEdMZW51bSBTUkNfQ09M
T1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDA7Citjb25zdCBHTGVudW0gT05FX01JTlVT
X1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOworY29uc3QgR0xlbnVtIFNSQ19BTFBIQSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMjsKK2NvbnN0IEdMZW51bSBPTkVfTUlOVVNfU1JD
X0FMUEhBICAgICAgICAgICAgPSAweDAzMDM7Citjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwMzA0OworY29uc3QgR0xlbnVtIE9ORV9NSU5VU19EU1RfQUxQ
SEEgICAgICAgICAgICA9IDB4MDMwNTsKKworLyogQmxlbmRpbmdGYWN0b3JTcmMgKi8KKy8qICAg
ICAgWkVSTyAqLworLyogICAgICBPTkUgKi8KK2NvbnN0IEdMZW51bSBEU1RfQ09MT1IgICAgICAg
ICAgICAgICAgICAgICAgPSAweDAzMDY7Citjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xP
UiAgICAgICAgICAgID0gMHgwMzA3OworY29uc3QgR0xlbnVtIFNSQ19BTFBIQV9TQVRVUkFURSAg
ICAgICAgICAgICA9IDB4MDMwODsKKy8qICAgICAgU1JDX0FMUEhBICovCisvKiAgICAgIE9ORV9N
SU5VU19TUkNfQUxQSEEgKi8KKy8qICAgICAgRFNUX0FMUEhBICovCisvKiAgICAgIE9ORV9NSU5V
U19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovCitjb25zdCBHTGVu
dW0gRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA2OworY29uc3QgR0xlbnVt
IEJMRU5EX0VRVUFUSU9OICAgICAgICAgICAgICAgICA9IDB4ODAwOTsKK2NvbnN0IEdMZW51bSBC
TEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVO
RF9FUVVBVElPTiAqLworY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAg
ICA9IDB4ODgzRDsKKworLyogQmxlbmRTdWJ0cmFjdCAqLworY29uc3QgR0xlbnVtIEZVTkNfU1VC
VFJBQ1QgICAgICAgICAgICAgICAgICA9IDB4ODAwQTsKK2NvbnN0IEdMZW51bSBGVU5DX1JFVkVS
U0VfU1VCVFJBQ1QgICAgICAgICAgPSAweDgwMEI7CisKKy8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0
aW9ucyAqLworY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9IDB4
ODBDODsKK2NvbnN0IEdMZW51bSBCTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgPSAweDgw
Qzk7Citjb25zdCBHTGVudW0gQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgID0gMHg4MENB
OworY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAgICAgICA9IDB4ODBDQjsK
K2NvbnN0IEdMZW51bSBDT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgPSAweDgwMDE7Citj
b25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgID0gMHg4MDAyOworY29u
c3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAgICAgICAgICAgICA9IDB4ODAwMzsKK2NvbnN0
IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgPSAweDgwMDQ7Citjb25zdCBH
TGVudW0gQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgID0gMHg4MDA1OworCisvKiBCdWZm
ZXIgT2JqZWN0cyAqLworY29uc3QgR0xlbnVtIEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAg
ICA9IDB4ODg5MjsKK2NvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAg
PSAweDg4OTM7Citjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0g
MHg4ODk0OworY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA9IDB4
ODg5NTsKKworY29uc3QgR0xlbnVtIFNUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAgICA9IDB4
ODhFMDsKK2NvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgPSAweDg4
RTQ7Citjb25zdCBHTGVudW0gRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgID0gMHg4OEU4
OworCitjb25zdCBHTGVudW0gQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgID0gMHg4NzY0
OworY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICA9IDB4ODc2NTsK
KworY29uc3QgR0xlbnVtIENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA9IDB4ODYyNjsK
KworLyogQ3VsbEZhY2VNb2RlICovCitjb25zdCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgwNDA0OworY29uc3QgR0xlbnVtIEJBQ0sgICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDQwNTsKK2NvbnN0IEdMZW51bSBGUk9OVF9BTkRfQkFDSyAgICAgICAgICAg
ICAgICAgPSAweDA0MDg7CisKKy8qIERlcHRoRnVuY3Rpb24gKi8KKy8qICAgICAgTkVWRVIgKi8K
Ky8qICAgICAgTEVTUyAqLworLyogICAgICBFUVVBTCAqLworLyogICAgICBMRVFVQUwgKi8KKy8q
ICAgICAgR1JFQVRFUiAqLworLyogICAgICBOT1RFUVVBTCAqLworLyogICAgICBHRVFVQUwgKi8K
Ky8qICAgICAgQUxXQVlTICovCisKKy8qIEVuYWJsZUNhcCAqLworY29uc3QgR0xlbnVtIFRFWFRV
UkVfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4MERFMTsKK2NvbnN0IEdMZW51bSBDVUxMX0ZB
Q0UgICAgICAgICAgICAgICAgICAgICAgPSAweDBCNDQ7Citjb25zdCBHTGVudW0gQkxFTkQgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkUyOworY29uc3QgR0xlbnVtIERJVEhFUiAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MEJEMDsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX1RFU1Qg
ICAgICAgICAgICAgICAgICAgPSAweDBCOTA7Citjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAg
ICAgICAgICAgICAgICAgID0gMHgwQjcxOworY29uc3QgR0xlbnVtIFNDSVNTT1JfVEVTVCAgICAg
ICAgICAgICAgICAgICA9IDB4MEMxMTsKK2NvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9GSUxM
ICAgICAgICAgICAgPSAweDgwMzc7Citjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFICAgICAgID0gMHg4MDlFOworY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRSAgICAgICAg
ICAgICAgICA9IDB4ODBBMDsKKworLyogRXJyb3JDb2RlICovCitjb25zdCBHTGVudW0gTk9fRVJS
T1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKK2NvbnN0IEdMZW51bSBJTlZBTElEX0VOVU0g
ICAgICAgICAgICAgICAgICAgPSAweDA1MDA7Citjb25zdCBHTGVudW0gSU5WQUxJRF9WQUxVRSAg
ICAgICAgICAgICAgICAgID0gMHgwNTAxOworY29uc3QgR0xlbnVtIElOVkFMSURfT1BFUkFUSU9O
ICAgICAgICAgICAgICA9IDB4MDUwMjsKK2NvbnN0IEdMZW51bSBPVVRfT0ZfTUVNT1JZICAgICAg
ICAgICAgICAgICAgPSAweDA1MDU7CisKKy8qIEZyb250RmFjZURpcmVjdGlvbiAqLworY29uc3Qg
R0xlbnVtIENXICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKK2NvbnN0IEdM
ZW51bSBDQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA5MDE7CisKKy8qIEdldFBO
YW1lICovCitjb25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgw
QjIxOworY29uc3QgR0xlbnVtIEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA9IDB4ODQ2
RDsKK2NvbnN0IEdMZW51bSBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgPSAweDg0NkU7
Citjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1Owor
Y29uc3QgR0xlbnVtIEZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICA9IDB4MEI0NjsKK2Nv
bnN0IEdMZW51bSBERVBUSF9SQU5HRSAgICAgICAgICAgICAgICAgICAgPSAweDBCNzA7Citjb25z
dCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0gMHgwQjcyOworY29uc3Qg
R0xlbnVtIERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4MEI3MzsKK2NvbnN0IEdM
ZW51bSBERVBUSF9GVU5DICAgICAgICAgICAgICAgICAgICAgPSAweDBCNzQ7Citjb25zdCBHTGVu
dW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgID0gMHgwQjkxOworY29uc3QgR0xlbnVt
IFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA9IDB4MEI5MjsKK2NvbnN0IEdMZW51bSBT
VEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgPSAweDBCOTQ7Citjb25zdCBHTGVudW0gU1RF
TkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgID0gMHgwQjk1OworY29uc3QgR0xlbnVtIFNURU5D
SUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA9IDB4MEI5NjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lM
X1JFRiAgICAgICAgICAgICAgICAgICAgPSAweDBCOTc7Citjb25zdCBHTGVudW0gU1RFTkNJTF9W
QUxVRV9NQVNLICAgICAgICAgICAgID0gMHgwQjkzOworY29uc3QgR0xlbnVtIFNURU5DSUxfV1JJ
VEVNQVNLICAgICAgICAgICAgICA9IDB4MEI5ODsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tf
RlVOQyAgICAgICAgICAgICAgPSAweDg4MDA7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZB
SUwgICAgICAgICAgICAgID0gMHg4ODAxOworY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19QQVNT
X0RFUFRIX0ZBSUwgICA9IDB4ODgwMjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19E
RVBUSF9QQVNTICAgPSAweDg4MDM7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1JFRiAgICAg
ICAgICAgICAgID0gMHg4Q0EzOworY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19WQUxVRV9NQVNL
ICAgICAgICA9IDB4OENBNDsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAg
ICAgICAgPSAweDhDQTU7Citjb25zdCBHTGVudW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwQkEyOworY29uc3QgR0xlbnVtIFNDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAg
ICA9IDB4MEMxMDsKKy8qICAgICAgU0NJU1NPUl9URVNUICovCitjb25zdCBHTGVudW0gQ09MT1Jf
Q0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQzIyOworY29uc3QgR0xlbnVtIENPTE9SX1dS
SVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEMyMzsKK2NvbnN0IEdMZW51bSBVTlBBQ0tfQUxJ
R05NRU5UICAgICAgICAgICAgICAgPSAweDBDRjU7Citjb25zdCBHTGVudW0gUEFDS19BTElHTk1F
TlQgICAgICAgICAgICAgICAgID0gMHgwRDA1OworY29uc3QgR0xlbnVtIE1BWF9URVhUVVJFX1NJ
WkUgICAgICAgICAgICAgICA9IDB4MEQzMzsKK2NvbnN0IEdMZW51bSBNQVhfVklFV1BPUlRfRElN
UyAgICAgICAgICAgICAgPSAweDBEM0E7Citjb25zdCBHTGVudW0gU1VCUElYRUxfQklUUyAgICAg
ICAgICAgICAgICAgID0gMHgwRDUwOworY29uc3QgR0xlbnVtIFJFRF9CSVRTICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEQ1MjsKK2NvbnN0IEdMZW51bSBHUkVFTl9CSVRTICAgICAgICAgICAg
ICAgICAgICAgPSAweDBENTM7Citjb25zdCBHTGVudW0gQkxVRV9CSVRTICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwRDU0OworY29uc3QgR0xlbnVtIEFMUEhBX0JJVFMgICAgICAgICAgICAgICAg
ICAgICA9IDB4MEQ1NTsKK2NvbnN0IEdMZW51bSBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAg
ICAgPSAweDBENTY7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAg
ID0gMHgwRDU3OworY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICA9
IDB4MkEwMDsKKy8qICAgICAgUE9MWUdPTl9PRkZTRVRfRklMTCAqLworY29uc3QgR0xlbnVtIFBP
TFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKK2NvbnN0IEdMZW51bSBURVhU
VVJFX0JJTkRJTkdfMkQgICAgICAgICAgICAgPSAweDgwNjk7Citjb25zdCBHTGVudW0gU0FNUExF
X0JVRkZFUlMgICAgICAgICAgICAgICAgID0gMHg4MEE4OworY29uc3QgR0xlbnVtIFNBTVBMRVMg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKK2NvbnN0IEdMZW51bSBTQU1QTEVfQ09W
RVJBR0VfVkFMVUUgICAgICAgICAgPSAweDgwQUE7Citjb25zdCBHTGVudW0gU0FNUExFX0NPVkVS
QUdFX0lOVkVSVCAgICAgICAgID0gMHg4MEFCOworCisvKiBHZXRUZXh0dXJlUGFyYW1ldGVyICov
CisvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqLworLyogICAgICBURVhUVVJFX01JTl9GSUxU
RVIgKi8KKy8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8KKy8qICAgICAgVEVYVFVSRV9XUkFQX1Qg
Ki8KKworY29uc3QgR0xlbnVtIENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA9IDB4ODZB
MzsKKworLyogSGludE1vZGUgKi8KK2NvbnN0IEdMZW51bSBET05UX0NBUkUgICAgICAgICAgICAg
ICAgICAgICAgPSAweDExMDA7Citjb25zdCBHTGVudW0gRkFTVEVTVCAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxMTAxOworY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTEwMjsKKworLyogSGludFRhcmdldCAqLworY29uc3QgR0xlbnVtIEdFTkVSQVRF
X01JUE1BUF9ISU5UICAgICAgICAgICAgPSAweDgxOTI7CisKKy8qIERhdGFUeXBlICovCitjb25z
dCBHTGVudW0gQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAwOworY29uc3Qg
R0xlbnVtIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA9IDB4MTQwMTsKK2NvbnN0IEdM
ZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDI7Citjb25zdCBHTGVu
dW0gVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgID0gMHgxNDAzOworY29uc3QgR0xlbnVt
IElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwNDsKK2NvbnN0IEdMZW51bSBV
TlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgPSAweDE0MDU7Citjb25zdCBHTGVudW0gRkxP
QVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA2OworCisvKiBQaXhlbEZvcm1hdCAq
LworY29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsK
K2NvbnN0IEdMZW51bSBBTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDY7Citj
b25zdCBHTGVudW0gUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA3OworY29u
c3QgR0xlbnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKK2NvbnN0
IEdMZW51bSBMVU1JTkFOQ0UgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDk7Citjb25zdCBH
TGVudW0gTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAgICAgID0gMHgxOTBBOworCisvKiBQaXhl
bFR5cGUgKi8KKy8qICAgICAgVU5TSUdORURfQllURSAqLworY29uc3QgR0xlbnVtIFVOU0lHTkVE
X1NIT1JUXzRfNF80XzQgICAgICAgICA9IDB4ODAzMzsKK2NvbnN0IEdMZW51bSBVTlNJR05FRF9T
SE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7Citjb25zdCBHTGVudW0gVU5TSUdORURfU0hP
UlRfNV82XzUgICAgICAgICAgID0gMHg4MzYzOworCisvKiBTaGFkZXJzICovCitjb25zdCBHTGVu
dW0gRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAgICAgPSAweDhCMzA7Citjb25zdCBHTGVu
dW0gVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAgICAgPSAweDhCMzE7Citjb25zdCBHTGVu
dW0gTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAgICAgPSAweDg4Njk7Citjb25zdCBHTGVu
dW0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7Citjb25zdCBHTGVu
dW0gTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAgICAgPSAweDhERkM7Citjb25zdCBHTGVu
dW0gTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDhCNEQ7Citjb25zdCBHTGVu
dW0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7Citjb25zdCBHTGVu
dW0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgPSAweDg4NzI7Citjb25zdCBHTGVu
dW0gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgPSAweDhERkQ7Citjb25zdCBHTGVu
dW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7Citjb25zdCBHTGVu
dW0gREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgPSAweDhCODA7Citjb25zdCBHTGVu
dW0gTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCODI7Citjb25zdCBHTGVu
dW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgPSAweDhCODM7Citjb25zdCBHTGVu
dW0gQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgPSAweDhCODU7Citjb25zdCBHTGVu
dW0gQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgICAgPSAweDhCODY7Citjb25zdCBHTGVu
dW0gQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgICAgPSAweDhCODk7Citjb25zdCBHTGVu
dW0gU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgPSAweDhCOEM7Citjb25zdCBHTGVu
dW0gQ1VSUkVOVF9QUk9HUkFNICAgICAgICAgICAgICAgICAgPSAweDhCOEQ7CisKKy8qIFN0ZW5j
aWxGdW5jdGlvbiAqLworY29uc3QgR0xlbnVtIE5FVkVSICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwMDsKK2NvbnN0IEdMZW51bSBMRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDAyMDE7Citjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMjAyOworY29uc3QgR0xlbnVtIExFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDIwMzsKK2NvbnN0IEdMZW51bSBHUkVBVEVSICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAy
MDQ7Citjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjA1
OworY29uc3QgR0xlbnVtIEdFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNjsK
K2NvbnN0IEdMZW51bSBBTFdBWVMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDc7CisK
Ky8qIFN0ZW5jaWxPcCAqLworLyogICAgICBaRVJPICovCitjb25zdCBHTGVudW0gS0VFUCAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAwOworY29uc3QgR0xlbnVtIFJFUExBQ0UgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMTsKK2NvbnN0IEdMZW51bSBJTkNSICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDFFMDI7Citjb25zdCBHTGVudW0gREVDUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgxRTAzOworY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MTUwQTsKK2NvbnN0IEdMZW51bSBJTkNSX1dSQVAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg1MDc7Citjb25zdCBHTGVudW0gREVDUl9XUkFQICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NTA4OworCisvKiBTdHJpbmdOYW1lICovCitjb25zdCBHTGVudW0gVkVO
RE9SICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAwOworY29uc3QgR0xlbnVtIFJFTkRF
UkVSICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMTsKK2NvbnN0IEdMZW51bSBWRVJTSU9O
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7CisKKy8qIFRleHR1cmVNYWdGaWx0ZXIg
Ki8KK2NvbnN0IEdMZW51bSBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI2MDA7
Citjb25zdCBHTGVudW0gTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNjAxOwor
CisvKiBUZXh0dXJlTWluRmlsdGVyICovCisvKiAgICAgIE5FQVJFU1QgKi8KKy8qICAgICAgTElO
RUFSICovCitjb25zdCBHTGVudW0gTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgID0gMHgy
NzAwOworY29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICA9IDB4Mjcw
MTsKK2NvbnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7
Citjb25zdCBHTGVudW0gTElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgID0gMHgyNzAzOwor
CisvKiBUZXh0dXJlUGFyYW1ldGVyTmFtZSAqLworY29uc3QgR0xlbnVtIFRFWFRVUkVfTUFHX0ZJ
TFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKK2NvbnN0IEdMZW51bSBURVhUVVJFX01JTl9GSUxU
RVIgICAgICAgICAgICAgPSAweDI4MDE7Citjb25zdCBHTGVudW0gVEVYVFVSRV9XUkFQX1MgICAg
ICAgICAgICAgICAgID0gMHgyODAyOworY29uc3QgR0xlbnVtIFRFWFRVUkVfV1JBUF9UICAgICAg
ICAgICAgICAgICA9IDB4MjgwMzsKKworLyogVGV4dHVyZVRhcmdldCAqLworLyogICAgICBURVhU
VVJFXzJEICovCitjb25zdCBHTGVudW0gVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxNzAyOworCitjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUCAgICAgICAgICAgICAgID0g
MHg4NTEzOworY29uc3QgR0xlbnVtIFRFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICA9IDB4
ODUxNDsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1
MTU7Citjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YICAgID0gMHg4NTE2
OworY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICA9IDB4ODUxNzsK
K2NvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7Citj
b25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgID0gMHg4NTE5OworY29u
c3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA9IDB4ODUxQTsKK2NvbnN0
IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7CisKKy8qIFRl
eHR1cmVVbml0ICovCitjb25zdCBHTGVudW0gVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEMwOworY29uc3QgR0xlbnVtIFRFWFRVUkUxICAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODRDMTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0QzI7Citjb25zdCBHTGVudW0gVEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEMzOworY29uc3QgR0xlbnVtIFRFWFRVUkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRD
NDsKK2NvbnN0IEdMZW51bSBURVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzU7
Citjb25zdCBHTGVudW0gVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM2Owor
Y29uc3QgR0xlbnVtIFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKK2Nv
bnN0IEdMZW51bSBURVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzg7Citjb25z
dCBHTGVudW0gVEVYVFVSRTkgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM5OworY29uc3Qg
R0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKK2NvbnN0IEdM
ZW51bSBURVhUVVJFMTEgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0I7Citjb25zdCBHTGVu
dW0gVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENDOworY29uc3QgR0xlbnVt
IFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRDsKK2NvbnN0IEdMZW51bSBU
RVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0U7Citjb25zdCBHTGVudW0gVEVY
VFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENGOworY29uc3QgR0xlbnVtIFRFWFRV
UkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMDsKK2NvbnN0IEdMZW51bSBURVhUVVJF
MTcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDE7Citjb25zdCBHTGVudW0gVEVYVFVSRTE4
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQyOworY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODREMzsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0RDQ7Citjb25zdCBHTGVudW0gVEVYVFVSRTIxICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NEQ1OworY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODRENjsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjMgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0RDc7Citjb25zdCBHTGVudW0gVEVYVFVSRTI0ICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NEQ4OworY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAgICAg
ICAgICAgICA9IDB4ODREOTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjYgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0REE7Citjb25zdCBHTGVudW0gVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NERCOworY29uc3QgR0xlbnVtIFRFWFRVUkUyOCAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODREQzsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0REQ7Citjb25zdCBHTGVudW0gVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NERFOworY29uc3QgR0xlbnVtIFRFWFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODRERjsKK2NvbnN0IEdMZW51bSBBQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAgPSAweDg0
RTA7CisKKy8qIFRleHR1cmVXcmFwTW9kZSAqLworY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MjkwMTsKK2NvbnN0IEdMZW51bSBDTEFNUF9UT19FREdFICAg
ICAgICAgICAgICAgICAgPSAweDgxMkY7Citjb25zdCBHTGVudW0gTUlSUk9SRURfUkVQRUFUICAg
ICAgICAgICAgICAgID0gMHg4MzcwOworCisvKiBVbmlmb3JtIFR5cGVzICovCitjb25zdCBHTGVu
dW0gRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUwOworY29uc3QgR0xlbnVt
IEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MTsKK2NvbnN0IEdMZW51bSBG
TE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7Citjb25zdCBHTGVudW0gSU5U
X1ZFQzIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUzOworY29uc3QgR0xlbnVtIElOVF9W
RUMzICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NDsKK2NvbnN0IEdMZW51bSBJTlRfVkVD
NCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7Citjb25zdCBHTGVudW0gQk9PTCAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU2OworY29uc3QgR0xlbnVtIEJPT0xfVkVDMiAg
ICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NzsKK2NvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhCNTg7Citjb25zdCBHTGVudW0gQk9PTF9WRUM0ICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4QjU5OworY29uc3QgR0xlbnVtIEZMT0FUX01BVDIgICAgICAg
ICAgICAgICAgICAgICA9IDB4OEI1QTsKK2NvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAg
ICAgICAgICAgICAgPSAweDhCNUI7Citjb25zdCBHTGVudW0gRkxPQVRfTUFUNCAgICAgICAgICAg
ICAgICAgICAgID0gMHg4QjVDOworY29uc3QgR0xlbnVtIFNBTVBMRVJfMkQgICAgICAgICAgICAg
ICAgICAgICA9IDB4OEI1RTsKK2NvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAg
ICAgICAgPSAweDhCNjA7CisKKy8qIFZlcnRleCBBcnJheXMgKi8KK2NvbnN0IEdMZW51bSBWRVJU
RVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgID0gMHg4NjIyOworY29uc3QgR0xlbnVtIFZF
UlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2MjM7Citjb25zdCBHTGVudW0g
VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICA9IDB4ODYyNDsKK2NvbnN0IEdMZW51
bSBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgID0gMHg4NjI1OworY29uc3QgR0xl
bnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCAgICAgPSAweDg4NkE7Citjb25zdCBH
TGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICA9IDB4ODY0NTsKK2NvbnN0
IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HID0gMHg4ODlGOworCisv
KiBTaGFkZXIgU291cmNlICovCitjb25zdCBHTGVudW0gQ09NUElMRV9TVEFUVVMgICAgICAgICAg
ICAgICAgID0gMHg4QjgxOworCisvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAq
LworY29uc3QgR0xlbnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsK
K2NvbnN0IEdMZW51bSBNRURJVU1fRkxPQVQgICAgICAgICAgICAgICAgICAgPSAweDhERjE7Citj
b25zdCBHTGVudW0gSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REYyOworY29u
c3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKK2NvbnN0
IEdMZW51bSBNRURJVU1fSU5UICAgICAgICAgICAgICAgICAgICAgPSAweDhERjQ7Citjb25zdCBH
TGVudW0gSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REY1OworCisvKiBGcmFt
ZWJ1ZmZlciBPYmplY3QuICovCitjb25zdCBHTGVudW0gRlJBTUVCVUZGRVIgICAgICAgICAgICAg
ICAgICAgID0gMHg4RDQwOworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAg
ICAgICA9IDB4OEQ0MTsKKworY29uc3QgR0xlbnVtIFJHQkE0ICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODA1NjsKK2NvbnN0IEdMZW51bSBSR0I1X0ExICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDgwNTc7Citjb25zdCBHTGVudW0gUkdCNTY1ICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4RDYyOworY29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9
IDB4ODFBNTsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0lOREVYICAgICAgICAgICAgICAgICAgPSAw
eDE5MDE7Citjb25zdCBHTGVudW0gU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAgICAgID0gMHg4
RDQ4OworY29uc3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRG
OTsKKworY29uc3QgR0xlbnVtIFNSR0JfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4QzQwOworY29uc3QgR0xlbnVtIFNSR0JfQUxQSEFfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4QzQyOworY29uc3QgR0xlbnVtIFNSR0I4X0FMUEhBOF9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQzOworY29uc3QgR0xlbnVtIEZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUICAgID0gMHg4MjEwOworCitj
b25zdCBHTGVudW0gTUlOX0VYVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA3OworY29u
c3QgR0xlbnVtIE1BWF9FWFQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODAwODsKKworY29u
c3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICA9IDB4OEQ0MjsKK2NvbnN0
IEdMZW51bSBSRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgPSAweDhENDM7Citjb25zdCBH
TGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgID0gMHg4RDQ0OworY29uc3QgR0xl
bnVtIFJFTkRFUkJVRkZFUl9SRURfU0laRSAgICAgICAgICA9IDB4OEQ1MDsKK2NvbnN0IEdMZW51
bSBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgPSAweDhENTE7Citjb25zdCBHTGVudW0g
UkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgID0gMHg4RDUyOworY29uc3QgR0xlbnVtIFJF
TkRFUkJVRkZFUl9BTFBIQV9TSVpFICAgICAgICA9IDB4OEQ1MzsKK2NvbnN0IEdMZW51bSBSRU5E
RVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgPSAweDhENTQ7Citjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSX1NURU5DSUxfU0laRSAgICAgID0gMHg4RDU1OworCitjb25zdCBHTGVudW0gRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgPSAweDhDRDA7Citjb25zdCBH
TGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgPSAweDhD
RDE7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAg
ICAgICAgPSAweDhDRDI7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhU
VVJFX0NVQkVfTUFQX0ZBQ0UgPSAweDhDRDM7CisKK2NvbnN0IEdMZW51bSBDT0xPUl9BVFRBQ0hN
RU5UMCAgICAgICAgICAgICAgPSAweDhDRTA7Citjb25zdCBHTGVudW0gREVQVEhfQVRUQUNITUVO
VCAgICAgICAgICAgICAgID0gMHg4RDAwOworY29uc3QgR0xlbnVtIFNURU5DSUxfQVRUQUNITUVO
VCAgICAgICAgICAgICA9IDB4OEQyMDsKK2NvbnN0IEdMZW51bSBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQgICAgICAgPSAweDgyMUE7CisKK2NvbnN0IEdMZW51bSBOT05FICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAwOworCitjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQ09NUExFVEUgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhDRDU7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgPSAweDhDRDY7Citjb25zdCBHTGVudW0gRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7Citjb25zdCBHTGVu
dW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TICAgICAgICAgPSAweDhDRDk7Citj
b25zdCBHTGVudW0gRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAw
eDhDREQ7CisKK2NvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAw
eDhDQTY7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4
Q0E3OworY29uc3QgR0xlbnVtIE1BWF9SRU5ERVJCVUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRF
ODsKKworY29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUw
NjsKKworLyogV2ViR0wtc3BlY2lmaWMgZW51bXMgKi8KK2NvbnN0IEdMZW51bSBVTlBBQ0tfRkxJ
UF9ZX1dFQkdMICAgICAgICAgICAgICAgID0gMHg5MjQwOworY29uc3QgR0xlbnVtIFVOUEFDS19Q
UkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7Citjb25zdCBHTGVudW0gQ09OVEVY
VF9MT1NUX1dFQkdMICAgICAgICAgICAgICAgICA9IDB4OTI0MjsKK2NvbnN0IEdMZW51bSBVTlBB
Q0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzOworY29uc3QgR0xlbnVtIEJS
T1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICAgICAgPSAweDkyNDQ7CisKK3JlYWRvbmx5IGF0
dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJXaWR0aDsKK3JlYWRvbmx5IGF0dHJpYnV0ZSBH
THNpemVpIGRyYXdpbmdCdWZmZXJIZWlnaHQ7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYXR0YWNo
U2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOworW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEF0dHJpYkxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIERPTVN0cmluZyBuYW1l
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJp
bmRCdWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihH
TGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdM
ZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBibGVuZENvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdM
Y2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICBibGVuZEVxdWF0aW9uKEdMZW51bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51
bSBtb2RlQWxwaGEpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVu
YyhHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpOworW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGJsZW5kRnVuY1NlcGFyYXRlKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RS
R0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdl
dCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdMZW51bSB1c2FnZSk7CitbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJEYXRhKEdMZW51bSB0YXJnZXQs
IEFycmF5QnVmZmVyVmlldz8gZGF0YSwgR0xlbnVtIHVzYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNhZ2UpOworW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0
LCBHTGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVyPyBkYXRhKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRh
cmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEpOworCitbU3RyaWN0
VHlwZUNoZWNraW5nXSBHTGVudW0gICAgICAgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0g
dGFyZ2V0KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZp
ZWxkIG1hc2spOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyQ29sb3Io
R0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxw
aGEpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoR0xjbGFt
cGYgZGVwdGgpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNp
bChHTGludCBzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb2xvck1hc2so
R0xib29sZWFuIHJlZCwgR0xib29sZWFuIGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFu
IGFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKKworW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCitHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7CitbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCitHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3IGRh
dGEpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29weVRleEltYWdlMkQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7
CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29weVRleFN1YkltYWdlMkQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworW1N0cmlj
dFR5cGVDaGVja2luZ10gV2ViR0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSBXZWJHTEZyYW1lYnVmZmVyIGNyZWF0ZUZyYW1lYnVmZmVyKCk7CitbU3RyaWN0VHlw
ZUNoZWNraW5nXSBXZWJHTFByb2dyYW0gY3JlYXRlUHJvZ3JhbSgpOworW1N0cmljdFR5cGVDaGVj
a2luZ10gV2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CitbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyIGNyZWF0ZVNoYWRlcihHTGVu
dW0gdHlwZSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVy
ZSgpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2UoR0xlbnVt
IG1vZGUpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVy
KFdlYkdMQnVmZmVyIGJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CitbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJv
Z3JhbSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUmVuZGVyYnVm
ZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7CitbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4
dHVyZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZXB0aEZ1bmMoR0xl
bnVtIGZ1bmMpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoTWFzayhH
TGJvb2xlYW4gZmxhZyk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhS
YW5nZShHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcik7CitbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFt
IHByb2dyYW0sIFdlYkdMU2hhZGVyIHNoYWRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgZGlzYWJsZShHTGVudW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQg
aW5kZXgpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0Vs
ZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgR0xpbnRwdHIg
b2Zmc2V0KTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGVuYWJsZShHTGVu
dW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZmluaXNoKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgZmx1c2goKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMZW51
bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZl
ciByZW5kZXJidWZmZXIpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0
dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlLCBHTGludCBs
ZXZlbCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51
bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBnZW5lcmF0ZU1pcG1h
cChHTGVudW0gdGFyZ2V0KTsKKworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBH
THVpbnQgaW5kZXgpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJH
TEFjdGl2ZUluZm8gZ2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50
IGluZGV4KTsKKworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKworW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bV0gYW55IGdldEJ1ZmZlclBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOwor
CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGdldENvbnRleHRB
dHRyaWJ1dGVzKCk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSBnZXRFcnJvcigpOwor
CisvLyBvYmplY3QgZ2V0RXh0ZW5zaW9uKERPTVN0cmluZyBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbV0gYW55IGdldEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7CisKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBH
TGVudW0gcG5hbWUpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIGFueSBnZXRQYXJhbWV0ZXIoR0xlbnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFBy
b2dyYW0gcHJvZ3JhbSwgR0xlbnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0
UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtIHByb2dyYW0pOworW1N0cmljdFR5cGVDaGVja2lu
ZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyIHNo
YWRlciwgR0xlbnVtIHBuYW1lKTsKKworW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5l
ZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFk
ZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQgZ2V0U2hhZGVyUHJlY2lz
aW9uRm9ybWF0KEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSk7CisKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2Vz
RXhjZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRl
cik7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5nPiBn
ZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwg
UmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VGV4UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51
bSBwbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSBhbnkgZ2V0VW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24pOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3Jh
bSwgRE9NU3RyaW5nIG5hbWUpOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gYW55IGdldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFt
ZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGhpbnQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworW1N0cmljdFR5
cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzQnVmZmVyKFdlYkdMQnVmZmVyIGJ1ZmZlcik7Citb
U3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNDb250ZXh0TG9zdCgpOworW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZm
ZXIgZnJhbWVidWZmZXIpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzUHJv
Z3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xl
YW4gICAgaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc1NoYWRlcihXZWJHTFNoYWRlciBzaGFk
ZXIpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzVGV4dHVyZShXZWJHTFRl
eHR1cmUgdGV4dHVyZSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgbGluZVdp
ZHRoKEdMZmxvYXQgd2lkdGgpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBpeGVsU3RvcmVpKEdMZW51bSBwbmFtZSwgR0xp
bnQgcGFyYW0pOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZz
ZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOworCitbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgQXJyYXlCdWZmZXJWaWV3IHBpeGVscyk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBH
TGJvb2xlYW4gaW52ZXJ0KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lz
c29yKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHNoYWRlclNv
dXJjZShXZWJHTFNoYWRlciBzaGFkZXIsIERPTVN0cmluZyBzdHJpbmcpOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYs
IEdMdWludCBtYXNrKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2ls
RnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQg
bWFzayk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE1hc2soR0x1
aW50IG1hc2spOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNr
U2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVt
IHpwYXNzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3BTZXBh
cmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNz
KTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmYoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSwgR0xpbnQgcGFyYW0pOworCisvLyBTdXBwb3J0ZWQgZm9ybXM6CitbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCAKK0dMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBJbWFnZURhdGE/IHBpeGVscyk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsCitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTElt
YWdlRWxlbWVudD8gaW1hZ2UpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsZm9ybWF0LAorR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52
YXNFbGVtZW50PyBjYW52YXMpOworI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVf
VklERU8KK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRl
byk7CisjZW5kaWYKKworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
CitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7
CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhT
dWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LAorR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/
IGltYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsCitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZh
c0VsZW1lbnQ/IGNhbnZhcyk7CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9W
SURFTworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
dGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVt
ZW50PyB2aWRlbyk7CisjZW5kaWYKKworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkIHVuaWZvcm0xZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9h
dCB4KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWko
V2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgpOworW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFpdihXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9j
YXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24g
bG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdM
aW50IHgsIEdMaW50IHkpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50
MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1
bmlmb3JtM2YoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9h
dCB5LCBHTGZsb2F0IHopOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5IHYpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IHVuaWZvcm0zaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xpbnQgeik7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCB1bmlmb3JtM2l2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFy
cmF5IHYpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm00ZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHks
IEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCB1bmlmb3JtNGkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgs
IEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1N
YXRyaXgzZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIEZsb2F0MzJBcnJheSBhcnJheSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4NGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworCitb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9n
cmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3Jh
bSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihH
THVpbnQgaW5keCwgR0xmbG9hdCB4KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9p
ZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjJmKEdMdWludCBpbmR4
LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZv
aWQgdmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CitbU3RyaWN0VHlwZUNoZWNraW5n
LCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkg
dmFsdWVzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0
ZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1
aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5k
eCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCAKK0dMc2l6
ZWkgc3RyaWRlLCBHTGludHB0ciBvZmZzZXQpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE2IEBACiAjaW5j
bHVkZSAiV2ViR0xTaGFkZXIuaCIKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0j
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2Vi
R0xTaGFkZXI+IFdlYkdMU2hhZGVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgs
IEdDM0RlbnVtIHR5cGUpCitQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFNoYWRlcjo6Y3Jl
YXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCwgR0MzRGVudW0gdHlwZSkKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMU2hhZGVyKGN0eCwgdHlwZSkpOwogfQogCi1XZWJH
TFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIEdDM0RlbnVt
IHR5cGUpCitXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY3R4LCBHQzNEZW51bSB0eXBlKQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAg
ICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3NvdXJjZSgiIikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNyBAQCBjbGFzcyBXZWJHTFNoYWRlciBmaW5hbCA6IHB1YmxpYyBXZWJHTFNoCiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+V2ViR0xTaGFkZXIoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgR0MzRGVudW0pOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSosIEdDM0RlbnVtKTsKIAogICAgIEdDM0RlbnVtIGdldFR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBTdHJpbmcmIGdldFNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlOyB9CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZh
bGlkKGJvb2wgdmFsaWQpIHsgbV9pc1ZhbGlkID0gdmFsaWQ7IH0KIAogcHJpdmF0ZToKLSAgICBX
ZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBHQzNEZW51bSk7CisgICAgV2ViR0xT
aGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSosIEdDM0RlbnVtKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2hhcmVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFNoYXJlZE9iamVjdC5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTEgKzMwLDExIEBACiAjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogI2luY2x1
ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVdlYkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTFNoYXJlZE9iamVjdDo6V2ViR0xTaGFyZWRP
YmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMT2Jq
ZWN0KGNvbnRleHQpLAogICAgICAgbV9jb250ZXh0R3JvdXAoY29udGV4dC0+Y29udGV4dEdyb3Vw
KCkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVk
T2JqZWN0LmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhcmVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkdM
Q29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTsKIAogLy8gV2ViR0xTaGFyZWRPYmplY3QgdGhlIGJhc2UgY2xh
c3MgZm9yIG9iamVjdHMgdGhhdCBjYW4gYmUgc2hhcmVkIGJ5IG11bHRpcGxlCiAvLyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRzLgpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzU2hhZGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB2
YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwLCBjb25zdCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKSBjb25zdCBvdmVycmlkZQorICAgIHZpcnR1YWwgYm9vbCB2YWxp
ZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwLCBjb25zdCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKikgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVy
biBjb250ZXh0R3JvdXAgPT0gbV9jb250ZXh0R3JvdXA7CiAgICAgfQpAQCAtNTYsNyArNTYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2hDb250ZXh0R3JvdXAoKTsKIAogcHJvdGVjdGVkOgot
ICAgIFdlYkdMU2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdM
U2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBoYXNHcm91cE9yQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiAxNzgz
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwxNiArMzEsMTYgQEAKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdy
b3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xU
ZXh0dXJlOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdl
YkdMVGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY3R4KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xUZXh0dXJlKGN0eCkpOwog
fQogCi1XZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKK1dlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
IGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1fdGFyZ2V0KDApCiAg
ICAgLCBtX21pbkZpbHRlcihHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFS
KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHJldmlz
aW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
fldlYkdMVGV4dHVyZSgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBj
cmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
R0xUZXh0dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdm9p
ZCBzZXRUYXJnZXQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IG1heExldmVsKTsKICAgICB2b2lk
IHNldFBhcmFtZXRlcmkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwpAQCAtODIsNyAr
ODIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEdDM0RpbnQgY29tcHV0ZUxldmVsQ291bnQoR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKIAogcHJpdmF0ZToKLSAgICBXZWJHTFRl
eHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgV2ViR0xUZXh0dXJlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBs
KEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMuY3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgog
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4
LCBWYW9UeXBlIHR5cGUpCitQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KiBjdHgsIFZhb1R5cGUgdHlwZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMoY3R4LCB0eXBlKSk7CiB9CiAKLVdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
dHgsIFZhb1R5cGUgdHlwZSkKK1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4LCBWYW9UeXBlIHR5
cGUpCiAgICAgOiBXZWJHTENvbnRleHRPYmplY3QoY3R4KQogICAgICwgbV90eXBlKHR5cGUpCiAg
ICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCShyZXZpc2lv
biAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgfldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKTsKIAotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHQqLCBWYW9UeXBlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSosIFZhb1R5
cGUpOwogICAgIAogICAgIC8vIENhY2hlZCB2YWx1ZXMgZm9yIHZlcnRleCBhdHRyaWIgcmFuZ2Ug
Y2hlY2tzCiAgICAgc3RydWN0IFZlcnRleEF0dHJpYlN0YXRlIHsKQEAgLTg5LDcgKzg5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwg
R0MzRHVpbnQgZGl2aXNvcik7CiAKIHByaXZhdGU6Ci0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBWYW9UeXBlKTsKKyAgICBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqLCBWYW9UeXBlKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZv
cm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244538</attachid>
            <date>2015-01-13 13:44:55 -0800</date>
            <delta_ts>2015-01-16 15:06:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126408-20150113134500.patch</filename>
            <type>text/plain</type>
            <size>1575736</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAxNS0wMS0xMyAgUm9nZXIg
Rm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkdMMjogU3VwcG9ydCB3
ZWJnbDIgY29udGV4dCBjcmVhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjQwOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUwMDIxNzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMg
Y292ZXJlZCBieSBleGlzdGluZyBLaHJvbm9zIHRlc3RzIGZvciBXZWJHTCAxLjAgY29uZm9ybWFu
Y2UuCisKKyAgICAgICAgQ3JlYXRlIGEgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSBjbGFzcyB0
aGF0IGV4dGVuZHMgdG8gYSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0IGFuZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LgorICAgICAgICBSZXBsYWNlIGFsbCBwcmV2aW91cyBpbnN0YW5jZXMgb2YgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IHVzYWdlcyB3aXRoIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Ug
dXNhZ2VzIGZvciBub3cuCisgICAgICAgIEFzIHRoZSBmaXJzdCBzdGVwLCB0aGUgV2ViR0wxIGFu
ZCBXZWJHTDIgY29udGV4dHMgd2lsbCBoYXZlIHRoZSBleGFjdCBzYW1lIGZ1bmN0aW9uYWxpdHku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5t
YWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1
c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3Vz
dG9tLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcDogQWRk
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXMz
ZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRUlu
c3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6
QU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
QU5HTEVJbnN0YW5jZWRBcnJheXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
Ojp0eXBlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVYVEJsZW5kTWluTWF4OjpFWFRCbGVuZE1pbk1heCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9FWFRGcmFnRGVwdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RVhURnJhZ0RlcHRo
OjpFWFRGcmFnRGVwdGgpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEZyYWdEZXB0aC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RVhUU2hhZGVyVGV4dHVyZUxPRDo6RVhUU2hhZGVyVGV4dHVyZUxPRCk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5oOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM6OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yyk6CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmg6
CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUc1JHQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
WFRzUkdCOjpFWFRzUkdCKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFRzUkdCLmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpPRVNFbGVtZW50SW5kZXhVaW50OjpPRVNFbGVtZW50SW5kZXhVaW50KToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50Lmg6CisgICAgICAgICogaHRtbC9jYW52
YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPRVNTdGFu
ZGFyZERlcml2YXRpdmVzOjpPRVNTdGFuZGFyZERlcml2YXRpdmVzKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUZsb2F0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1RleHR1cmVGbG9hdDo6
T0VTVGV4dHVyZUZsb2F0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQu
aDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6T0VTVGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRMaW5l
YXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVhci5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6T0VTVGV4dHVyZUhhbGZGbG9hdDo6T0VTVGV4dHVyZUhhbGZGbG9hdCk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5oOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcik6CisgICAg
ICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok9FU1ZlcnRleEFycmF5T2JqZWN0OjpPRVNWZXJ0ZXhBcnJheU9iamVjdCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcC4KKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oLgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsLgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaDogQWRkZWQuCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGw6IEFkZGVkLgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OldlYkdM
QnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0
ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUFZSVEMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4
dHVyZVBWUlRDOjpzdXBwb3J0ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMQ29udGV4dEdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdy
b3VwOjpnZXRBR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250
ZXh0R3JvdXA6OmFkZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3Jv
dXA6OnJlbW92ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6
Omxvc2VDb250ZXh0R3JvdXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdy
b3VwLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6V2ViR0xDb250ZXh0T2JqZWN0KToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6Y29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTERl
YnVnUmVuZGVyZXJJbmZvOjpXZWJHTERlYnVnUmVuZGVyZXJJbmZvKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xEZWJ1Z1NoYWRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEZWJ1Z1NoYWRl
cnM6OldlYkdMRGVidWdTaGFkZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlYnVn
U2hhZGVycy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMRGVwdGhUZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZSk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RHJhd0J1ZmZlcnM6OldlYkdMRHJhd0J1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xE
cmF3QnVmZmVyczo6c3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRHJhd0J1ZmZl
cnM6OnNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTERyYXdCdWZmZXJzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xFeHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xFeHRlbnNpb246OmNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZm
ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMTG9zZUNvbnRleHQ6OldlYkdMTG9zZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMb3NlQ29udGV4dDo6bG9zZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
TG9zZUNvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6V2ViR0xPYmplY3QpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9n
cmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZl
cik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw6IFJlbW92ZWQuCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDogQWRkZWQu
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGw6IEFk
ZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hhZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFk
ZXI6OldlYkdMU2hhZGVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaDoKKwogMjAxNS0wMS0xMyAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFJlbW92ZSB1bnVzZWQgUmVzaXplSW1hZ2UgYW5kIERlY29kZUltYWdlRGF0YSB0aW1lbGlu
ZSBldmVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzgzNzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTQwLDYgKzU0
MCw4IEBAIHNldChXZWJDb3JlX05PTl9TVkdfSURMX0ZJTEVTCiAgICAgaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUhhbGZGbG9hdC5pZGwKICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0
TGluZWFyLmlkbAogICAgIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmlkbAorICAg
IGh0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCisgICAgaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUlu
Zm8uaWRsCiAgICAgaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsCiAgICAgaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwKQEAgLTU1NSw3ICs1NTcsNyBAQCBzZXQoV2Vi
Q29yZV9OT05fU1ZHX0lETF9GSUxFUwogICAgIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQu
aWRsCiAgICAgaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmlkbAogICAgIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmlkbAotICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5pZGwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbAogICAg
IGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVy
UHJlY2lzaW9uRm9ybWF0LmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5pZGwKQEAg
LTExNDUsNyArMTE0Nyw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9K
U1RyZWVXYWxrZXJDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9t
LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCi0gICAgYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCisgICAgYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pz
L0pTV2ViS2l0UG9pbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20u
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCkBAIC0xNjY5
LDYgKzE2NzEsOCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9jYW52YXMvT0VTVGV4
dHVyZUhhbGZGbG9hdC5jcHAKICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGlu
ZWFyLmNwcAogICAgIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAorICAgIGh0
bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAgaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAK
ICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcAogICAgIGh0bWwv
Y2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAKQEAgLTE2ODgsNyArMTY5Miw3
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAK
ICAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuY3BwCi0gICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAorICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCiAgICAgaHRt
bC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVj
aXNpb25Gb3JtYXQuY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCkBA
IC0yNzY3LDYgKzI3NzEsOCBAQCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBodG1sL2NhbnZh
cy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcAogICAgICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJl
SGFsZkZsb2F0TGluZWFyLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9i
amVjdC5jcHAKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAK
KyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICAgICAg
aHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVBVEMuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQy5jcHAKQEAgLTI3ODYsNyArMjc5Miw3IEBAIGlmIChFTkFCTEVfV0VCR0wp
CiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAogICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVy
LmNwcAotICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCiAgICAgICAgIGh0
bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRl
clByZWNpc2lvbkZvcm1hdC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmpl
Y3QuY3BwCkBAIC0yODA4LDYgKzI4MTQsOCBAQCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBo
dG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmlkbAogICAgICAgICBodG1sL2NhbnZhcy9P
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmlkbAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0
ZXhBcnJheU9iamVjdC5pZGwKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29u
dGV4dC5pZGwKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwK
ICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbAogICAgICAgICBodG1sL2Nh
bnZhcy9XZWJHTEJ1ZmZlci5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQy5pZGwKQEAgLTI4MjMsNyArMjgzMSw3IEBAIGlmIChFTkFCTEVfV0VCR0wpCiAg
ICAgICAgIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuaWRsCiAgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuaWRsCi0gICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKKyAg
ICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwKICAgICAgICAg
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRsCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyUHJlY2lzaW9uRm9ybWF0LmlkbAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUu
aWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE3ODM3MikK
KysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTQ0NCwxMiArNDQ0LDE0IEBAIE5PTl9TVkdfQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29y
ZSkvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29udGV4dC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvV2ViR0xQcm9ncmFtLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVjaXNp
b25Gb3JtYXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5p
ZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRs
IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMu
aWRsIFwKKyAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaWRsIFwKKyAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuaWRsIFwKKwkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvdHJhY2svQXVkaW9UcmFjay5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5pZGwgXAogICAgICQoV2ViQ29yZSkv
aHRtbC90cmFjay9EYXRhQ3VlLmlkbCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MjcsOCArMTcyNyw4IEBACiAJCTQ5QzdCOURBMTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlDN0I5QkExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmgg
Ki87IH07CiAJCTQ5QzdCOURDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
QzdCOUJDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsg
fTsKIAkJNDlDN0I5REQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUJE
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi87IH07Ci0JCTQ5
QzdCOURGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkYxMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07Ci0JCTQ5QzdCOUUw
MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0
NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJNDlDN0I5REYxMDQyRDMyRjAw
MDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9OworCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJl
bmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlDN0I5RTIxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMU2hhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAgKi87IH07CiAJ
CTQ5QzdCOUUzMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzMxMDQyRDMyRjAwMDlENDQ3
IC8qIFdlYkdMU2hhZGVyLmggKi87IH07CiAJCTQ5QzdCOUU1MTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFRleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlDN0I5QzUxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMVGV4dHVyZS5jcHAgKi87IH07
CkBAIC0xNzY4LDEwICsxNzY4LDEwIEBACiAJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5OUZBQiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAgKi87IH07CiAJCTQ5RUVEMTQ1MTA1MTk2OTQwMDA5OUZBQiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0YxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmggKi87IH07Ci0JCTQ5RUVEMTQ2MTA1MTk2OTQwMDA5OUZBQiAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwICovOyB9OwotCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oICovOyB9OworCQk0OUVFRDE0NjEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVEMTQwMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0Nv
bnRleHQuY3BwICovOyB9OworCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250
ZXh0LmggKi87IH07CiAJCTQ5RUVEMTRFMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVFRDE0QjEwNTE5NzE5MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwICovOyB9OwotCQk0OUVFRDE0RjEwNTE5NzFBMDAwOTlGQUIg
LyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxNEMxMDUxOTcxQTAwMDk5RkFCIC8qIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNDlFRUQxNEYxMDUxOTcx
QTAwMDk5RkFCIC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0QzEwNTE5NzFBMDAw
OTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJNDlF
RUQxNTAxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0
RDEwNTE5NzFBMDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAq
LzsgfTsKIAkJNDlGQzdBNTAxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZD
N0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLzsgfTsK
IAkJNDlGRkJGMUQxMUM4NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGRkJGMUMxMUM4
NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLm1tICovOyB9OwpAQCAtNTg0MCw2
ICs1ODQwLDEyIEBACiAJCUQzNTlENzkzMTI5Q0EzQzAwMDA2RTVEMiAvKiBET01IVE1MRGV0YWls
c0VsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDM1OUQ3OTAxMjlDQTNDMDAwMDZFNUQyIC8qIERPTUhUTUxEZXRhaWxzRWxlbWVu
dEludGVybmFsLmggKi87IH07CiAJCUQzNTlEOEJFMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxE
ZXRhaWxzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEMzU5RDhCQzEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0VsZW1lbnQu
Y3BwICovOyB9OwogCQlEMzU5RDhCRjEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQz
NTlEOEJEMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5oICovOyB9Owor
CQlEMzlDNzJENzFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJE
NTFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi87IH07
CisJCUQzOUM3MkQ4MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJE
NjFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovOyB9Owor
CQlEMzlDNzJERDFBNUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJEQjFB
NUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CisJCUQz
OUM3MkRFMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJEQzFBNUM4QzhF
MDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OworCQlEMzlDNzJFNDFB
NUM5M0FGMDBBRUQ4OUMgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkUzMUE1Qzkz
QUYwMEFFRDg5QyAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovOyB9Owor
CQlEMzlDNzJFNjFBNUM5NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQzOUM3MkU1MUE1Qzk0MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VD
dXN0b20uY3BwICovOyB9OwogCQlEM0E5NEEzODEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVy
eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDNBOTRBMzExMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmNwcCAqLzsgfTsKIAkJ
RDNBOTRBMzkxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0E5NEEzMjEyMkRBQkFDMDBBMzdC
QkMgLyogTWVkaWFRdWVyeUxpc3QuaCAqLzsgfTsKIAkJRDNBOTRBM0IxMjJEQUJBQzAwQTM3QkJD
IC8qIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQzQTk0QTM0MTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmggKi87IH07CkBAIC01ODQ5LDYgKzU4NTUsMTAgQEAKIAkJRDNBQTEwRjQx
MjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0FBMTBGMjEyM0E5OEFBMDA5MjE1MkIgLyog
TWVkaWFRdWVyeU1hdGNoZXIuaCAqLzsgfTsKIAkJRDNENEU5NzIxMzBDN0NGRTAwN0JBNTQwIC8q
IEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEM0Q0RTk3MDEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVt
ZW50LmNwcCAqLzsgfTsKIAkJRDNENEU5NzMxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDNENEU5NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oICovOyB9Owor
CQlEM0UxNEJCNTFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRTE0QkIz
MUE1RENGNEIwMDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9Owor
CQlEM0UxNEJCNjFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0UxNEJCNDFB
NURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi87IH07CisJCUQz
RTE0QkI5MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNFMTRCQjcx
QTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi87IH07
CisJCUQzRTE0QkJBMUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRTE0
QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLzsg
fTsKIAkJRDYxOUEzMDcxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDYxOUEz
MDUxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwICovOyB9Owog
CQlENjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDYxOUEzMDYxNDRF
MDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAqLzsgfTsKIAkJRDY0ODlE
MjUxNjZGRkNGMTAwN0MwMzFCIC8qIEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENjQ4OUQyMzE2NkZGQ0YxMDA3
QzAzMUIgLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCAqLzsgfTsKQEAgLTg3OTYsOSArODgw
Niw5IEBACiAJCTQ5QzdCOUJDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlCRDEwNDJEMzJGMDAwOUQ0NDcg
LyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBjYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlCRTEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdC
OUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDsg
cGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OUM3QjlDMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5n
Q29udGV4dC5oOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMMVJl
bmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlD
MDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBj
YW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGw7IHBh
dGggPSBjYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTFNoYWRlci5jcHA7IHBh
dGggPSBjYW52YXMvV2ViR0xTaGFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xTaGFkZXIuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNo
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlDNDEwNDJEMzJGMDAw
OUQ0NDcgLyogV2ViR0xTaGFkZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMU2hh
ZGVyLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNoYWRlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC04ODQwLDEwICs4ODUwLDEwIEBACiAJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFRDE0MDEwNTE5Njk0MDAw
OTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUQx
NDAxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlG
QUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUVFRDE0QjEwNTE5NzE5MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wx
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5RUVEMTREMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlG
QzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTgg
LyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzMzIwLDYgKzEzMzMwLDEyIEBACiAJCUQzNTlENzkwMTI5Q0EzQzAwMDA2RTVE
MiAvKiBET01IVE1MRGV0YWlsc0VsZW1lbnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01IVE1MRGV0YWlsc0VsZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlEMzU5RDhCQzEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0
YWlsc0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNI
VE1MRGV0YWlsc0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMzU5
RDhCRDEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0VsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MRGV0YWlsc0VsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDM5QzcyRDUxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3
MkQ2MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDsg
cGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUQzOUM3MkRCMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMzlDNzJEQzFBNUM4QzhFMDBB
RUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBjYW52YXMvV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMzlDNzJF
MzFBNUM5M0FGMDBBRUQ4OUMgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3MkU1MUE1
Qzk0MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNBOTRBMzEx
MjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDNBOTRBMzIxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQTk0QTMzMTIyREFCQUMwMEEzN0JCQyAvKiBNZWRp
YVF1ZXJ5TGlzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3QuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMzMzEsNiArMTMzNDcsMTIgQEAKIAkJ
RDNBQTEwRjIxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlNYXRjaGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQzRDRFOTcwMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFy
eUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFN1
bW1hcnlFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNENEU5NzEx
MzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRDNFMTRCQjMxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0Ux
NEJCNDFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0UxNEJCNzFBNURDRjdCMDA5N0E2RTkgLyog
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUQzRTE0QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUQzRTE0QkJCMUE1REU4RjUwMDk3QTZFOSAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDsgcGF0aCA9
IGNhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRDNFMTRCQkMxQTVERThGNTAwOTdBNkU5IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hp
bGRMaXN0TXV0YXRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRDYxOUEzMDYxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjQ4OUQyMzE2NkZGQ0YxMDA3QzAz
MUIgLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNTgzNiw5ICsxNTg1OCwxNSBAQAogCQkJCTQ5QzdCOUI5MTA0MkQzMkYw
MDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5QkExMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmggKi8sCiAJCQkJNDlDN0I5QkIxMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmlkbCAqLywKLQkJCQk0OUM3QjlCRjEwNDJE
MzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKLQkJCQk0OUM3QjlD
MDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggKi8sCi0JCQkJNDlD
N0I5QzExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8sCisJ
CQkJNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3Bw
ICovLAorCQkJCTQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250
ZXh0LmggKi8sCisJCQkJNDlDN0I5QzExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmlu
Z0NvbnRleHQuaWRsICovLAorCQkJCUQzOUM3MkRCMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKKwkJCQlEMzlDNzJEQzFBNUM4QzhFMDBBRUQ4OUMgLyog
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovLAorCQkJCUQzRTE0QkJCMUE1REU4RjUwMDk3QTZF
OSAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCAqLywKKwkJCQlEMzlDNzJENTFBNUM4QjBC
MDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi8sCisJCQkJRDM5Qzcy
RDYxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLywKKwkJ
CQlEM0UxNEJCQzFBNURFOEY1MDA5N0E2RTkgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5p
ZGwgKi8sCiAJCQkJNDlDN0I5QzIxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmNwcCAq
LywKIAkJCQk0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCAqLywKIAkJ
CQk0OUM3QjlDNDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaWRsICovLApAQCAtMTg5
MDcsOCArMTg5MzUsMTIgQEAKIAkJCQk0OUM3Qjk4OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJH
TFByb2dyYW0uaCAqLywKIAkJCQk0OUM3Qjk4QTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJl
bmRlcmJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5OEIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2Vi
R0xSZW5kZXJidWZmZXIuaCAqLywKLQkJCQk0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovLAotCQkJCTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZB
QiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oICovLAorCQkJCUQzRTE0QkI3MUE1RENGN0Iw
MDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwICovLAorCQkJCUQzRTE0
QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLywK
KwkJCQk0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0
LmNwcCAqLywKKwkJCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJp
bmdDb250ZXh0LmggKi8sCisJCQkJRDNFMTRCQjMxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCisJCQkJRDNFMTRCQjQxQTVEQ0Y0QjAwOTdBNkU5IC8q
IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCTQ5QzdCOThGMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU1dlYkdMU2hhZGVyLmNwcCAqLywKIAkJCQk0OUM3Qjk5MDEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNXZWJHTFNoYWRlci5oICovLAogCQkJCUEwN0QzMzUzMTUyQjYzMEUwMDFCNjM5MyAv
KiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCAqLywKQEAgLTIxMDA1LDcgKzIxMDM3
LDkgQEAKIAkJCQk3QzczRkIxNzE5MUVGODA4MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhhbmRs
ZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZERjcwODE3MUNBMkM1MDBERDUyQjgg
LyogSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZERjcwQTE3MUNBMkM1MDBERDUy
QjggLyogSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAgKi8sCi0JCQkJNDlFRUQxNEMxMDUxOTcx
QTAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKKwkJCQlE
MzlDNzJFNTFBNUM5NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3Vz
dG9tLmNwcCAqLywKKwkJCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKKwkJCQlEMzlDNzJFMzFBNUM5M0FGMDBBRUQ4OUMg
LyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzI3NUI3ODEx
QzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi8sCiAJCQkJRTFDQTVD
QkIwRThDRENBRjAwRThFRjkwIC8qIEpTV29ya2VyQ3VzdG9tLmNwcCAqLywKIAkJCQlFMTgyNThB
QjBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgKi8sCkBA
IC0yNTIxOCw3ICsyNTI1Miw3IEBACiAJCQkJOTNGMUQ1QzExMkQ1MzM1NjAwODMyQkVDIC8qIEpT
V2ViR0xMb3NlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5OUMxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3Qjk5RTEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDlFRUQxNDcxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlBMzEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA3RDMzNTYxNTJC
NjMwRTAwMUI2MzkzIC8qIEpTV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5QzdCOUE1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMVGV4dHVyZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNTQ1Niw2ICsyNTQ5MCw3IEBACiAJCQkJMTQxMTVCNTIwOUY4NEI3
MTAwQ0E0RkMxIC8qIE5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZFNzMxMEEyMjk3QkUw
MDU4RDdBRCAvKiBOb2RlRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczMzBBMjI5
N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RDNFMTRCQjYxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzUwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJdGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMUIwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2MzE4OUFFMzBFODNBMzMzMDAwMTJFNDEgLyogTm9k
ZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI1Njg2LDYgKzI1NzIxLDcgQEAKIAkJCQlF
NDNBMDIzQjE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1QjdBNTUxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzNDNDBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVyRmll
bGRzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUQzRTE0QkJBMUE1RENGN0IwMDk3QTZFOSAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2NkM3NzMx
MEFCNjAzRkQwMDIzOENDNCAvKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTNDODI5OEUxM0Q4RDkyNzAwREUyREVCIC8qIFJlbmRlckZsZXhpYmxlQm94Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MDhDQ0E0RjEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxv
d1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTk1Niw2ICsyNTk5Miw3IEBACiAJCQkJQUI3
MTcwODkwQjMxMTgwODAwMTcxMjNFIC8qIFNlYXJjaFBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNGMUUxRUMxQTQwRkREQzAwMzQ4RDEzIC8qIE5TUG9wb3ZlclNQSS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc2RjM2RUIxNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRDM5QzcyRDgxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDBFMEZCMEU5NzJDMzUw
MDI2NURFQSAvKiBTZWN1cml0eU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMEUwRkMw
RTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc0RDJEQTUxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NjMxLDcgKzI2NjY4LDcgQEAKIAkJCQk0OUM3QjlENTEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUQ3MTA0MkQzMkYw
MDA5RDQ0NyAvKiBXZWJHTFByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOURBMTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NDlDN0I5RTAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNDlDN0I5RTAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmlu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUUzMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA3RDMzNTgxNTJCNjMyRDAwMUI2
MzkzIC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
MUQzQ0Y4NzE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xTaGFyZWRPYmplY3QuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY3MDAsNiArMjY3MzcsNyBAQAogCQkJCUExNDgzMkMxMTg3RjY1N0EwMERBNjNB
NiAvKiBXS1R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ4MzJDMzE4N0Y2NURGMDBEQTYz
QTYgLyogV0tVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDgzMkM0MTg3RjY2M0Mw
MERBNjNBNiAvKiBXS1ZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCUQzOUM3MkRFMUE1QzhDOEUw
MEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MTQ4MzJDNjE4N0Y2NjhGMDBEQTYzQTYgLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzc5OTE5OTcxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRTQzNDY0NjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI3NjkzLDYgKzI3NzMxLDcgQEAKIAkJCQlCQzUzREE0ODExNDMxMzREMDAw
RDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUQxMzgx
MEE1MzI1NTIwMDY0QkY1RiAvKiBET01YUGF0aC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1RTlF
MEEyMEFCM0EwQzcwMDA2OUNEMCAvKiBET01YUGF0aEV4cHJlc3Npb24ubW0gaW4gU291cmNlcyAq
LywKKwkJCQlEMzlDNzJENzFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NUU5RTBBNjBBQjNBMEM3MDAwNjlDRDAgLyog
RE9NWFBhdGhSZXN1bHQubW0gaW4gU291cmNlcyAqLywKIAkJCQlGRDE3NjJFMzE3NjY4NkVBMDBE
ODM2QTggLyogRG93blNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQTU5NUUwQjI3
QkQ5RTAwRkEwMjFEIC8qIERyYWdDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg3
NDMsNiArMjg3ODIsNyBAQAogCQkJCTI2NzcyNjA0MUE1REY2RjIwMDNDMjRERCAvKiBVUkxGaWx0
ZXJQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEQTdDMTYxODgzMjJFQjAwQzk1NEI1
IC8qIEpTVG91Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEQTdDMTgxODgzMjJFQjAwQzk1
NEI1IC8qIEpTVG91Y2hFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlEMzlDNzJFNjFBNUM5
NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGREE3QzFBMTg4MzIyRUIwMEM5NTRCNSAvKiBKU1RvdWNoTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzAzMzRFOTE0NUExRjM2MDA4RDhENDUgLyogSlNUcmFj
a0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzg0NjM0MjE0NUIxNTFBMDBBNThERjEg
LyogSlNUcmFja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg3ODIsOCArMjg4MjIsOCBA
QAogCQkJCTkzRjFENUMwMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYkdMTG9zZUNvbnRleHQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5OUIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQ
cm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOTlEMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU1dlYkdMUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVEMTQ2MTA1
MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk0OUVFRDE0RjEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUQxNDYxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVF
RDE0RjEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOUEyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdM
U2hhZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEwN0QzMzU1MTUyQjYzMEUwMDFCNjM5MyAv
KiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5
QzdCOUE0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMVGV4dHVyZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI4OTQ1LDYgKzI4OTg1LDcgQEAKIAkJCQkwNzhFMDkwMzE3RDE0Q0VFMDA0MjBBQTEg
LyogTWVkaWFTdHJlYW1UcmFja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3RkZERTY4
MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwNzYzMDZEMjE3RTE0NzhEMDA1QTdDNEUgLyogTWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXNSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQzRTE0QkI1MUE1RENGNEIwMDk3
QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Q0Q2NDFFQkYxODE5QjM2MDAwRUU0QzQxIC8qIE1lZGlhVGltZUFWRm91bmRhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDRDYwQzBDNjE5M0U4N0M3MDAzQzY1NkIgLyogTWVkaWFUaW1lUVRL
aXQubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNzA1ODUzQTE3RkUwNzcwMDA1RjJCQ0IgLyogTWVk
aWFUcmFja0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTQzOSw2ICsyOTQ4MCw3
IEBACiAJCQkJNEI2RkE2RjcwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUU0QUZEMDBCMERBRjMzNTQwMEY1RjU1QyAvKiBTTUlMVGltZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEFGRDAwRDBEQUYzMzU1MDBGNUY1NUMgLyogU01JTFRp
bWVDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDM5QzcyRTQxQTVDOTNBRjAwQUVE
ODlDIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTBENEEzMzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQUJBRTFGMTAzQzE5MTMw
MDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI5NzI3LDYgKzI5NzY5LDcgQEAKIAkJCQk2NTUwQjZBNTA5OURGMDI3MDA5MEQ3ODEgLyogVGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTdCMkRCNjE1ODZBQkFEMDA5OEIzRkEgLyogVGV4
dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NERDRTUxODgx
MDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQz
RTE0QkI5MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzcyQzAwQzQxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3Vu
ZGFyaWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzk3MEQwMEE1REYwMDMwMDc0RCAv
KiBUZXh0Qm91bmRhcmllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRDhBNUYwMTVGNTZGMkMw
MDk4RDA3MSAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5OTIw
LDcgKzI5OTYzLDcgQEAKIAkJCQk0OUM3QjlENDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5RDYxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlEOTEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xSZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlDN0I5REYx
MDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0OUM3QjlERjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlFMjEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTA4Q0YxNTQxNTJCNzdCMzAwOUM1Nzc1
IC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAx
RDNDRjg2MTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI5OTcwLDYgKzMwMDEzLDcgQEAKIAkJCQk5M0VDNDRBMTE4OEY0QkI4MDA2NjFE
RjEgLyogV2hlZWxFdmVudERlbHRhVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5Mzgw
RjQ3MzA5QTExQUI0MDAxRkRCMzQgLyogV2lkZ2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0
NTM5MDREMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gaW4gU291cmNlcyAqLywKKwkJ
CQlEMzlDNzJERDFBNUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzgwRjQ3ODA5QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0TWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5QjAyRUUwRUEyREJDNDAwQzU0NTcwIC8qIFdpZHRo
SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4MjQzRTgwRDBDRkQ3NTAwNDYwQzhG
IC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw4ICsz
MiwxMCBAQAogI2luY2x1ZGUgIkpTTm9kZS5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKQotI2luY2x1
ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCisjaW5jbHVkZSAiSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKICNlbmRpZgog
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNTEsOCArNTMsMTIgQEAgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICNp
ZiBFTkFCTEUoV0VCR0wpCi0gICAgaWYgKG9iamVjdC0+aXMzZCgpKQotICAgICAgICByZXR1cm4g
d3JhcDxKU1dlYkdMUmVuZGVyaW5nQ29udGV4dD4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICBpZiAob2JqZWN0LT5pczNkKCkp
IHsKKyAgICAgICAgaWYgKG9iamVjdC0+dHlwZSgpID09ICJ3ZWJnbDEiKQorICAgICAgICAgICAg
cmV0dXJuIHdyYXA8SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PFdlYkdMMVJlbmRlcmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICAgICAgaWYgKG9i
amVjdC0+dHlwZSgpID09ICJ3ZWJnbDIiKQorICAgICAgICAgICAgcmV0dXJuIHdyYXA8SlNXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICB9CiAjZW5kaWYKICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihvYmplY3QtPmlzMmQoKSk7CiAgICAgcmV0dXJuIHdyYXA8SlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKj4ob2JqZWN0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKICNpZiBF
TkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzgzNzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQog
I2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAjaW5jbHVk
ZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc2OTk0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6MTc2OTk0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV0VCR0wpCisKKyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJFWFRCbGVuZE1pbk1heC5o
IgorI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgorI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVM
T0QuaCIKKyNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKKyNpbmNsdWRl
ICJFWFRzUkdCLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU0VYVEJsZW5kTWluTWF4Lmgi
CisjaW5jbHVkZSAiSlNFWFRGcmFnRGVwdGguaCIKKyNpbmNsdWRlICJKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCIKKyNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2lu
Y2x1ZGUgIkpTRVhUc1JHQi5oIgorI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIkpTT0VTRWxlbWVudEluZGV4VWludC5oIgorI2luY2x1ZGUgIkpTT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVk
ZSAiSlNPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxm
RmxvYXQuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNs
dWRlICJKU09FU1ZlcnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgorI2luY2x1ZGUgIkpT
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgor
I2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKKyNpbmNsdWRlICJKU1dlYkdMRGVwdGhU
ZXh0dXJlLmgiCisjaW5jbHVkZSAiSlNXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVkZSAiSlNX
ZWJHTEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmgiCisjaW5j
bHVkZSAiSlNXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgi
CisjaW5jbHVkZSAiSlNXZWJHTFNoYWRlci5oIgorI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgi
CisjaW5jbHVkZSAiSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgorI2luY2x1ZGUgIkpTV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgorI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50
LmgiCisjaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIk9FU1Rl
eHR1cmVGbG9hdC5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1
ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0
TGluZWFyLmgiCisjaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJX
ZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNp
bmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJXZWJHTENv
bXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8u
aCIKKyNpbmNsdWRlICJXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1ZGUgIldlYkdMRGVwdGhU
ZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgorI2luY2x1ZGUgIldlYkdM
RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldl
YkdMR2V0SW5mby5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNpbmNsdWRlICJX
ZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworI2lmIEVOQUJMRShWSURFTykKKyNpbmNs
dWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50Lmgi
CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvKQoreworICAgIHN3aXRjaCAo
aW5mby5nZXRUeXBlKCkpIHsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sOgorICAg
ICAgICByZXR1cm4ganNCb29sZWFuKGluZm8uZ2V0Qm9vbCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVCb29sQXJyYXk6IHsKKyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlz
dDsKKyAgICAgICAgY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZSA9IGluZm8uZ2V0Qm9vbEFycmF5
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsraWkp
CisgICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWVbaWldKSk7CisgICAgICAg
IHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QsIGxpc3QpOworICAg
IH0KKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVGbG9hdDoKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGluZm8uZ2V0RmxvYXQoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlSW50
OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRJbnQoKSk7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlTnVsbDoKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIGNhc2Ug
V2ViR0xHZXRJbmZvOjprVHlwZVN0cmluZzoKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsIGluZm8uZ2V0U3RyaW5nKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlw
ZVVuc2lnbmVkSW50OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRVbnNpZ25lZElu
dCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEJ1ZmZlcjoKKyAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMQnVmZmVyKCkpOwor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRmxvYXRBcnJheToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMRmxvYXRBcnJheSgpKTsK
KyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEZyYW1lYnVmZmVyOgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGcmFtZWJ1ZmZlcigp
KTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEludEFycmF5OgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xJbnRBcnJheSgpKTsK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkKKyAgICAvLyBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9iamVjdEFycmF5OgorICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZVdlYkdMUHJvZ3JhbToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3JhbSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5
cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVyYnVmZmVyKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZVdlYkdMVGV4dHVyZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVyZSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5
cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSgpKTsKKyAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkSW50QXJyYXkoKSk7
CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzoK
KyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorfQorCitlbnVtIE9i
amVjdFR5cGUgeworICAgIGtCdWZmZXIsIGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4
QXR0cmliCit9OworCitzdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmplY3RUeXBlIG9iamVjdFR5
cGUpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1
cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
dW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm87CisgICAgc3dpdGNoIChvYmplY3RUeXBlKSB7
CisgICAgY2FzZSBrQnVmZmVyOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRCdWZmZXJQYXJh
bWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtSZW5k
ZXJidWZmZXI6CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cih0YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1RleHR1cmU6
CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1ZlcnRleEF0dHJpYjoKKyAgICAgICAgLy8g
dGFyZ2V0ID0+IGluZGV4CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFZlcnRleEF0dHJpYih0
YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0
KCksIGluZm8pOworfQorCitlbnVtIFdoaWNoUHJvZ3JhbUNhbGwgeworICAgIGtQcm9ncmFtUGFy
YW1ldGVyLCBrVW5pZm9ybQorfTsKKworc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdMRXh0ZW5zaW9uKiBleHRl
bnNpb24pCit7CisgICAgaWYgKCFleHRlbnNpb24pCisgICAgICAgIHJldHVybiBqc051bGwoKTsK
KyAgICBzd2l0Y2ggKGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7CisgICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6V2ViR0xMb3NlQ29udGV4dE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbikpOwor
ICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVMT0ROYW1lOgorICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFNoYWRlclRl
eHR1cmVMT0QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRUZXh0
dXJlRmlsdGVyQW5pc290cm9waWNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyo+KGV4dGVu
c2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVHNSR0JOYW1lOgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVHNSR0IqPihleHRl
bnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRGcmFnRGVwdGhOYW1lOgorICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVEZyYWdE
ZXB0aCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEJsZW5kTWlu
TWF4TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxFWFRCbGVuZE1pbk1heCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246Ok9FU1N0YW5kYXJkRGVyaXZhdGl2ZXNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRl
bnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgor
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1Rl
eHR1cmVGbG9hdCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1Rl
eHR1cmVGbG9hdExpbmVhck5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6CisgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhh
bGZGbG9hdCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1
cmVIYWxmRmxvYXRMaW5lYXJOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24p
KTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6Cisg
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVy
dGV4QXJyYXlPYmplY3QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpP
RVNFbGVtZW50SW5kZXhVaW50TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6CisgICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Oldl
YkdMRGVidWdTaGFkZXJzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOworICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgorICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVENOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+
KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBz
dGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOworICAg
IGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVy
ZSo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZl
cnNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PFdlYkdMRHJhd0J1ZmZlcnMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpBTkdMRUluc3RhbmNlZEFycmF5c05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNp
b24pKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGpzTnVs
bCgpOworfQorCit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoJmltcGwoKSk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0
dGFjaGVkU2hhZGVycyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7
CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNo
YWRlcnM7CisgICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgc2hhZGVycywgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfQorICAgIGlmICgh
c3VjY2VlZCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXpl
KCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IHNoYWRlcnNbaWldLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAs
IGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0RXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworCisgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOworICAgIGNvbnN0IFN0cmluZyBu
YW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQuZ2V0RXh0
ZW5zaW9uKG5hbWUpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBleHRl
bnNpb24pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQ
YXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0
ZXIodGhpcywgZXhlYywga0J1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHVuc2lnbmVk
IGF0dGFjaG1lbnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0lu
dDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBp
bXBsKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBh
cmFtZXRlcihwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dy
YW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhl
Yyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFt
ZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhl
Yywga1JlbmRlcmJ1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQg
PSBpbXBsKCk7CisgICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pbmhlcml0cyhKU1dlYkdM
U2hhZGVyOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Cisg
ICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8g
PSBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1
cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoY29udGV4dC5pc0NvbnRleHRMb3N0
KCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZSA9
IGNvbnRleHQuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGxpc3Q7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytp
aSkKKyAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFsdWVbaWld
KSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBs
aXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1l
dGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRo
aXMsIGV4ZWMsIGtUZXh0dXJlKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBs
KCk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBl
ZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFVuaWZvcm0ocHJvZ3Jh
bSwgbG9jYXRpb24sIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Citib29s
IHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKK3sKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KHZhbHVlKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9IG9iamVjdC0+Z2V0KGV4ZWMs
IGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOworCisgICAg
aWYgKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB2ZWN0b3IucmVzaXplKGxlbmd0aCk7CisKKyAgICBmb3IgKGludDMyX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+
Z2V0KGV4ZWMsIGkpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYu
dG9OdW1iZXIoZXhlYykpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitlbnVtIERh
dGFGdW5jdGlvblRvQ2FsbCB7CisgICAgZl91bmlmb3JtMXYsIGZfdW5pZm9ybTJ2LCBmX3VuaWZv
cm0zdiwgZl91bmlmb3JtNHYsCisgICAgZl92ZXJ0ZXhBdHRyaWIxdiwgZl92ZXJ0ZXhBdHRyaWIy
diwgZl92ZXJ0ZXhBdHRyaWIzdiwgZl92ZXJ0ZXhBdHRyaWI0dgorfTsKKworZW51bSBEYXRhRnVu
Y3Rpb25NYXRyaXhUb0NhbGwgeworICAgIGZfdW5pZm9ybU1hdHJpeDJmdiwgZl91bmlmb3JtTWF0
cml4M2Z2LCBmX3VuaWZvcm1NYXRyaXg0ZnYKK307CisKK3N0YXRpYyBib29sIGZ1bmN0aW9uRm9y
VW5pZm9ybShEYXRhRnVuY3Rpb25Ub0NhbGwgZikKK3sKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBj
YXNlIGZfdW5pZm9ybTF2OgorICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgY2FzZSBmX3VuaWZv
cm0zdjoKKyAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgSlND
OjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Cisg
ICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gMDsKKyAgICBsb25nIGlu
ZGV4ID0gLTE7CisgICAgCisgICAgaWYgKGZ1bmN0aW9uRm9yVW5pZm9ybShmKSkgeworICAgICAg
ICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgfSBlbHNlCisgICAgICAgIGluZGV4ID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAg
IFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGlmICh3ZWJHTEFycmF5KSB7CisgICAgICAgIHN3aXRjaCAoZikgewor
ICAgICAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWZ2
KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm0ydjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0
aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjF2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIx
ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
MmZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjNmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRy
aWI0ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFZlY3RvcjxmbG9hdCwgNjQ+
IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworCisgICAg
c3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4dC51bmlm
b3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0y
ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTNmdihs
b2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0
aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIGZfdmVydGV4QXR0cmliMXY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2
KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYo
aW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjNmdihp
bmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIGZfdmVydGV4QXR0cmliNHY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliNGZ2KGlu
ZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0
aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQm
IGNvbnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAg
ICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjKTsKKyAgCisgICAgUmVmUHRyPEludDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJy
YXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgaWYgKHdlYkdMQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoIChmKSB7CisgICAgICAg
IGNhc2UgZl91bmlmb3JtMXY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRp
b24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9u
LCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwg
d2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Zl91bmlmb3JtNHY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIHdl
YkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IH0KKworCisgICAgVmVjdG9yPGludCwgNjQ+IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhl
YywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworCisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZv
cm0xdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2
OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6Cisg
ICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAg
ICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUo
KSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgo
RGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSAhPSAzKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgICAgCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAKKyAgICBS
ZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMikpOworICAgICAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAgICAgICAgY2Fz
ZSBmX3VuaWZvcm1NYXRyaXgyZnY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgy
ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OgorICAgICAgICAgICAg
Y29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXku
Z2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybU1h
dHJpeDRmdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwg
dHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgVmVjdG9yPGZsb2F0LCA2
ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgyKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisKKyAg
ICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoKKyAgICAgICAgY29u
dGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwg
YXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtTWF0
cml4M2Z2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgZXhl
YywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rp
b25mKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Cit9CisK
K0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihKU0M6OkV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwg
ZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwoKSk7Cit9
CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00
diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4MmZ2LCBleGVjLCBpbXBsKCkpOwor
fQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgz
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJp
eChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRm
diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlND
OjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRy
aWIydiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIzdiwgZXhlYywgaW1wbCgpKTsKK30KKwor
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhB
dHRyaWI0diwgZXhlYywgaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3MjcgKzI2LDE3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0KLSNpbmNsdWRlICJKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNp
bmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhU
TUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1
ZGUgIkpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNpbmNsdWRlICJKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCIKLSNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgotI2lu
Y2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTT0VTRWxlbWVudElu
ZGV4VWludC5oIgotI2luY2x1ZGUgIkpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1
ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXRMaW5l
YXIuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJKU09F
U1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJKU09FU1ZlcnRleEFycmF5T2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBW
UlRDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgotI2luY2x1
ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1No
YWRlcnMuaCIKLSNpbmNsdWRlICJKU1dlYkdMRGVwdGhUZXh0dXJlLmgiCi0jaW5jbHVkZSAiSlNX
ZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiSlNXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiSlNXZWJHTFByb2dyYW0uaCIK
LSNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFNoYWRl
ci5oIgotI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5oIgotI2luY2x1ZGUgIkpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgot
I2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1ZGUg
Ik9FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQu
aCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiT0VT
VmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUg
IldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgot
I2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKLSNpbmNsdWRlICJXZWJHTERlYnVn
U2hhZGVycy5oIgotI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0dXJlLmgiCi0jaW5jbHVkZSAiV2Vi
R0xEcmF3QnVmZmVycy5oIgotI2luY2x1ZGUgIldlYkdMRXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSAi
V2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMR2V0SW5mby5oIgotI2luY2x1ZGUg
IldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTLmgiCi0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNUeXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4K
LSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KLQotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50LmgiCi0jZW5kaWYKKyNpbmNsdWRlICJKU1dl
YkdMMVJlbmRlcmluZ0NvbnRleHQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvKQot
ewotICAgIHN3aXRjaCAoaW5mby5nZXRUeXBlKCkpIHsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6
a1R5cGVCb29sOgotICAgICAgICByZXR1cm4ganNCb29sZWFuKGluZm8uZ2V0Qm9vbCgpKTsKLSAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sQXJyYXk6IHsKLSAgICAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZSA9IGlu
Zm8uZ2V0Qm9vbEFycmF5KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1
ZS5zaXplKCk7ICsraWkpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWVb
aWldKSk7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmpl
Y3QsIGxpc3QpOwotICAgIH0KLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVGbG9hdDoKLSAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZm8uZ2V0RmxvYXQoKSk7Ci0gICAgY2FzZSBXZWJHTEdl
dEluZm86OmtUeXBlSW50OgotICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRJbnQoKSk7
Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlTnVsbDoKLSAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVN0cmluZzoKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGluZm8uZ2V0U3RyaW5nKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVVuc2lnbmVkSW50OgotICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5m
by5nZXRVbnNpZ25lZEludCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEJ1
ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdl
YkdMQnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRmxvYXRBcnJh
eToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdM
RmxvYXRBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEZyYW1lYnVm
ZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xGcmFtZWJ1ZmZlcigpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEludEFy
cmF5OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xJbnRBcnJheSgpKTsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkK
LSAgICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9iamVjdEFycmF5OgotICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3JhbSgpKTsKLSAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVyYnVmZmVyKCkpOwotICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVGV4dHVyZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVyZSgpKTsKLSAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSgp
KTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkSW50QXJyYXk6Ci0g
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2ln
bmVkSW50QXJyYXkoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
fQotfQotCi1lbnVtIE9iamVjdFR5cGUgewotICAgIGtCdWZmZXIsIGtSZW5kZXJidWZmZXIsIGtU
ZXh0dXJlLCBrVmVydGV4QXR0cmliCi19OwotCi1zdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJh
bWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmpl
Y3RUeXBlIG9iamVjdFR5cGUpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAy
KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm87Ci0gICAgc3dpdGNo
IChvYmplY3RUeXBlKSB7Ci0gICAgY2FzZSBrQnVmZmVyOgotICAgICAgICBpbmZvID0gY29udGV4
dC5nZXRCdWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGtSZW5kZXJidWZmZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2Uga1RleHR1cmU6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0
YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga1ZlcnRleEF0dHJp
YjoKLSAgICAgICAgLy8gdGFyZ2V0ID0+IGluZGV4Ci0gICAgICAgIGluZm8gPSBjb250ZXh0Lmdl
dFZlcnRleEF0dHJpYih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIG9i
ai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1lbnVtIFdoaWNoUHJvZ3JhbUNhbGwgewot
ICAgIGtQcm9ncmFtUGFyYW1ldGVyLCBrVW5pZm9ybQotfTsKLQotc3RhdGljIEpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdM
RXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAgaWYgKCFleHRlbnNpb24pCi0gICAgICAgIHJl
dHVybiBqc051bGwoKTsKLSAgICBzd2l0Y2ggKGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7Ci0gICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xMb3NlQ29udGV4dE5hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+
KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVM
T0ROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PEVYVFNoYWRlclRleHR1cmVMT0QqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNOYW1lOgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRlbnNpb24pKTsKLSAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgotICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVGbG9hdCo+
KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdExp
bmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdCo+KGV4
dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXJOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKLSAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVydGV4QXJyYXlPYmpl
Y3QqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNFbGVtZW50SW5k
ZXhVaW50TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1JlbmRlcmVySW5m
byo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVidWdTaGFk
ZXJzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUFZSVENOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+KGV4dGVuc2lvbikp
OwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDTmFt
ZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVyZSo+KGV4dGVuc2lv
bikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZlcnNOYW1lOgotICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRHJh
d0J1ZmZlcnMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpBTkdMRUlu
c3RhbmNlZEFycmF5c05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNpb24pKTsKLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGpzTnVsbCgpOwotfQotCi12
b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QoJmltcGwoKSk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEF0dGFjaGVkU2hhZGVycyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQg
PSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRv
V3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYm
ICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNo
YWRlcj4+IHNoYWRlcnM7Ci0gICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgc2hhZGVycywgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgfQot
ICAgIGlmICghc3VjY2VlZCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHNoYWRlcnMu
c2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCgpLCBzaGFkZXJzW2lpXS5nZXQoKSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVj
LCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBjb25zdCBTdHJp
bmcgbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24gPSBjb250ZXh0Lmdl
dEV4dGVuc2lvbihuYW1lKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
ZXh0ZW5zaW9uKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVm
ZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFy
YW1ldGVyKHRoaXMsIGV4ZWMsIGtCdWZmZXIpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKLSAgICAgICAgcmV0
dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNp
Z25lZCBhdHRhY2htZW50ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiku
dG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwg
ZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0
ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5n
ZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQot
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFByb2dyYW1Q
YXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQot
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMs
IGV4ZWMsIGtSZW5kZXJidWZmZXIpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250
ZXh0ID0gaW1wbCgpOwotICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRl
ZmluZWRPck51bGwoKSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaW5oZXJpdHMoSlNX
ZWJHTFNoYWRlcjo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OwotICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBp
bmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRTdXBwb3J0ZWRFeHRlbnNpb25zKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgaWYgKGNvbnRleHQuaXNDb250ZXh0
TG9zdCgpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFs
dWUgPSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKLSAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBsaXN0OwotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7
ICsraWkpCi0gICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHZhbHVl
W2lpXSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3Qo
KSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBh
cmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRl
cih0aGlzLCBleGVjLCBrVGV4dHVyZSk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFVuaWZvcm0oRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0g
aW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dy
YXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAmJiAh
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRVbmlmb3JtKHBy
b2dyYW0sIGxvY2F0aW9uLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYihFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVmVydGV4QXR0
cmliKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgot
Ym9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgaW50MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9JbnQzMihleGVjKTsKLQot
ICAgIGlmICghdmVjdG9yLnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgdmVjdG9yLnJlc2l6ZShsZW5ndGgpOwotCi0gICAgZm9yIChpbnQzMl90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBvYmpl
Y3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2ZWN0b3JbaV0gPSBzdGF0aWNfY2FzdDxU
Pih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZW51
bSBEYXRhRnVuY3Rpb25Ub0NhbGwgewotICAgIGZfdW5pZm9ybTF2LCBmX3VuaWZvcm0ydiwgZl91
bmlmb3JtM3YsIGZfdW5pZm9ybTR2LAotICAgIGZfdmVydGV4QXR0cmliMXYsIGZfdmVydGV4QXR0
cmliMnYsIGZfdmVydGV4QXR0cmliM3YsIGZfdmVydGV4QXR0cmliNHYKLX07Ci0KLWVudW0gRGF0
YUZ1bmN0aW9uTWF0cml4VG9DYWxsIHsKLSAgICBmX3VuaWZvcm1NYXRyaXgyZnYsIGZfdW5pZm9y
bU1hdHJpeDNmdiwgZl91bmlmb3JtTWF0cml4NGZ2Ci19OwotCi1zdGF0aWMgYm9vbCBmdW5jdGlv
bkZvclVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCi17Ci0gICAgc3dpdGNoIChmKSB7Ci0g
ICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgIGNhc2UgZl91
bmlmb3JtM3Y6Ci0gICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGlj
IEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwotICAgIAotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IDA7Ci0gICAgbG9u
ZyBpbmRleCA9IC0xOwotICAgIAotICAgIGlmIChmdW5jdGlvbkZvclVuaWZvcm0oZikpIHsKLSAg
ICAgICAgbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgICAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIH0gZWxzZQotICAgICAgICBpbmRleCA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAK
LSAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ICAgCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAKLSAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkgewotICAgICAgICBzd2l0Y2ggKGYp
IHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9y
bTFmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0y
ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2
KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0
cmliMWZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0
dHJpYjJmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgotICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhB
dHRyaWIzZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4
QXR0cmliNGZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8ZmxvYXQs
IDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQot
ICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQu
dW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgY29udGV4dC51bmlm
b3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0z
ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihs
b2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjFmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
MmZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIz
ZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRm
dihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFG
dW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250
ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAg
ICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZXhlYyk7Ci0gIAotICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9JbnQz
MkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGlmICh3ZWJHTEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikgewotICAg
ICAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxv
Y2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJpdihsb2Nh
dGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRp
b24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIGZfdW5pZm9ybTR2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9u
LCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0KLQotICAgIFZlY3RvcjxpbnQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9y
KGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91
bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuZGF0
YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZv
cm0ydjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTN2
OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0g
ICAgICAgIGNvbnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0
cml4KERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgIT0gMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVk
KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYmICFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBib29sIHRyYW5zcG9zZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0g
ICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAgc3dpdGNoIChmKSB7Ci0gICAgICAg
IGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDNmdjoKLSAgICAgICAg
ICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFy
cmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZv
cm1NYXRyaXg0ZnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIFZlY3RvcjxmbG9h
dCwgNjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMiksIGFycmF5KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwot
Ci0gICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6Ci0gICAgICAg
IGNvbnRleHQudW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRh
KCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9y
bU1hdHJpeDNmdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4NGZ2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm1N
YXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOwotfQot
Ci1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYs
IGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOwot
fQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3Jt
M3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTNpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uaShmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkp
OwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlm
b3JtNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDJmdiwgZXhlYywgaW1wbCgp
KTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0
cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25N
YXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRy
aXg0ZnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0K
LUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4
QXR0cmliMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliM3YsIGV4ZWMsIGltcGwoKSk7Ci19
Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVy
dGV4QXR0cmliNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJKU1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCgmaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCisKKyNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUg
IkVYVEJsZW5kTWluTWF4LmgiCisjaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgiCisjaW5jbHVkZSAi
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3BpYy5oIgorI2luY2x1ZGUgIkVYVHNSR0IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpT
RVhUQmxlbmRNaW5NYXguaCIKKyNpbmNsdWRlICJKU0VYVEZyYWdEZXB0aC5oIgorI2luY2x1ZGUg
IkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRlckFu
aXNvdHJvcGljLmgiCisjaW5jbHVkZSAiSlNFWFRzUkdCLmgiCisjaW5jbHVkZSAiSlNIVE1MQ2Fu
dmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5j
bHVkZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCisjaW5jbHVkZSAiSlNPRVNUZXh0dXJl
RmxvYXQuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1ZGUg
IkpTT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9h
dExpbmVhci5oIgorI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
LmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlYnVn
UmVuZGVyZXJJbmZvLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1
ZGUgIkpTV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMu
aCIKKyNpbmNsdWRlICJKU1dlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMTG9z
ZUNvbnRleHQuaCIKKyNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkpTV2Vi
R0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAi
SlNXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCisj
aW5jbHVkZSAiSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisjaW5jbHVkZSAiSlNXZWJL
aXRDU1NNYXRyaXguaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9F
U0VsZW1lbnRJbmRleFVpbnQuaCIKKyNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgi
CisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0
TGluZWFyLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIk9F
U1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVj
dC5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgor
I2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiV2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5j
bHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgi
CisjaW5jbHVkZSAiV2ViR0xFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVy
LmgiCisjaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4
dC5oIgorI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaCIKKyNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisj
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5
cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworI2lm
IEVOQUJMRShWSURFTykKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAi
SlNIVE1MVmlkZW9FbGVtZW50LmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMR2V0SW5m
byYgaW5mbykKK3sKKyAgICBzd2l0Y2ggKGluZm8uZ2V0VHlwZSgpKSB7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlQm9vbDoKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihpbmZvLmdldEJv
b2woKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlQm9vbEFycmF5OiB7CisgICAgICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGNvbnN0IFZlY3Rvcjxib29sPiYg
dmFsdWUgPSBpbmZvLmdldEJvb2xBcnJheSgpOworICAgICAgICBmb3IgKHNpemVfdCBpaSA9IDA7
IGlpIDwgdmFsdWUuc2l6ZSgpOyArK2lpKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQoanNCb29s
ZWFuKHZhbHVlW2lpXSkpOworICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwg
Z2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBl
RmxvYXQ6CisgICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEZsb2F0KCkpOworICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZUludDoKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZm8u
Z2V0SW50KCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZU51bGw6CisgICAgICAgIHJl
dHVybiBqc051bGwoKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVTdHJpbmc6CisgICAg
ICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbmZvLmdldFN0cmluZygpKTsKKyAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVVbnNpZ25lZEludDoKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGluZm8uZ2V0VW5zaWduZWRJbnQoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xCdWZmZXI6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
aW5mby5nZXRXZWJHTEJ1ZmZlcigpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJH
TEZsb2F0QXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5m
by5nZXRXZWJHTEZsb2F0QXJyYXkoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2Vi
R0xGcmFtZWJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMRnJhbWVidWZmZXIoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBl
V2ViR0xJbnRBcnJheToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMSW50QXJyYXkoKSk7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgV2Vi
R0xPYmplY3RBcnJheQorICAgICAgICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9i
amVjdEFycmF5OgorICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3Jh
bSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVy
YnVmZmVyKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVGV4dHVyZToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVy
ZSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
OgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xV
bnNpZ25lZEJ5dGVBcnJheSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVu
c2lnbmVkSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
aW5mby5nZXRXZWJHTFVuc2lnbmVkSW50QXJyYXkoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86
OmtUeXBlV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKSk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgfQorfQorCitlbnVtIE9iamVjdFR5cGUgeworICAgIGtCdWZmZXIs
IGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4QXR0cmliCit9OworCitzdGF0aWMgSlNW
YWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBvYmos
IEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0VHlwZSBvYmplY3RUeXBlKQoreworICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAg
IAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgcG5h
bWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
V2ViR0xHZXRJbmZvIGluZm87CisgICAgc3dpdGNoIChvYmplY3RUeXBlKSB7CisgICAgY2FzZSBr
QnVmZmVyOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRCdWZmZXJQYXJhbWV0ZXIodGFyZ2V0
LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtSZW5kZXJidWZmZXI6Cisg
ICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBu
YW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1RleHR1cmU6CisgICAgICAgIGlu
Zm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Uga1ZlcnRleEF0dHJpYjoKKyAgICAgICAgLy8gdGFyZ2V0ID0+IGlu
ZGV4CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFZlcnRleEF0dHJpYih0YXJnZXQsIHBuYW1l
LCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwor
fQorCitlbnVtIFdoaWNoUHJvZ3JhbUNhbGwgeworICAgIGtQcm9ncmFtUGFyYW1ldGVyLCBrVW5p
Zm9ybQorfTsKKworc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7Cisg
ICAgaWYgKCFleHRlbnNpb24pCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBzd2l0Y2gg
KGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xM
b3NlQ29udGV4dE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVMT0ROYW1lOgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFNoYWRlclRleHR1cmVMT0QqPihl
eHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyo+KGV4dGVuc2lvbikpOworICAg
IGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVHNSR0JOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVHNSR0IqPihleHRlbnNpb24pKTsKKyAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRGcmFnRGVwdGhOYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVEZyYWdEZXB0aCo+KGV4dGVu
c2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEJsZW5kTWluTWF4TmFtZToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRCbGVu
ZE1pbk1heCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRlbnNpb24pKTsKKyAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgorICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVGbG9hdCo+
KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdExp
bmVhck5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6CisgICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdCo+KGV4
dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXJOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKKyAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6CisgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVydGV4QXJyYXlPYmpl
Y3QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNFbGVtZW50SW5k
ZXhVaW50TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1JlbmRlcmVySW5m
byo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVidWdTaGFk
ZXJzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUFZSVENOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+KGV4dGVuc2lvbikp
OworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDTmFt
ZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVyZSo+KGV4dGVuc2lv
bikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZlcnNOYW1lOgorICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRHJh
d0J1ZmZlcnMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpBTkdMRUlu
c3RhbmNlZEFycmF5c05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNpb24pKTsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGpzTnVsbCgpOworfQorCit2
b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZpbXBs
KCkpOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7
CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNo
YWRlcnM7CisgICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgc2hhZGVycywgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfQorICAgIGlmICgh
c3VjY2VlZCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXpl
KCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IHNoYWRlcnNbaWldLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAs
IGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAK
KyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAgIGNv
bnN0IFN0cmluZyBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNv
bnRleHQuZ2V0RXh0ZW5zaW9uKG5hbWUpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBleHRlbnNpb24pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
Z2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtCdWZmZXIpOworfQorCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9
IDMpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50
MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFy
Z2V0LCBhdHRhY2htZW50LCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEpCisgICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAgIHVuc2ln
bmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0g
SlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgdW5z
aWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIo
cHJvZ3JhbSwgcG5hbWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVj
LCBrUmVuZGVyYnVmZmVyKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAg
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmluaGVy
aXRzKEpTV2ViR0xTaGFkZXI6OmluZm8oKSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjKTsKKyAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEdl
dEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgaWYgKGNv
bnRleHQuaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgVmVj
dG9yPFN0cmluZz4gdmFsdWUgPSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkg
PCB2YWx1ZS5zaXplKCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsIHZhbHVlW2lpXSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAw
LCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1RleHR1cmUpOworfQorCitKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0q
IHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
KTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGlmICgh
bG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICBXZWJHTEdldElu
Zm8gaW5mbyA9IGNvbnRleHQuZ2V0VW5pZm9ybShwcm9ncmFtLCBsb2NhdGlvbiwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2Jq
ZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Citib29sIHRvVmVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT4mIHZlY3RvcikKK3sKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1
ZSk7CisgICAgaW50MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkudG9JbnQzMihleGVjKTsKKyAgICAKKyAgICBpZiAoIXZlY3Rv
ci50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHZlY3Rvci5yZXNpemUobGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KGV4
ZWMsIGkpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYudG9OdW1i
ZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZW51bSBEYXRh
RnVuY3Rpb25Ub0NhbGwgeworICAgIGZfdW5pZm9ybTF2LCBmX3VuaWZvcm0ydiwgZl91bmlmb3Jt
M3YsIGZfdW5pZm9ybTR2LAorICAgIGZfdmVydGV4QXR0cmliMXYsIGZfdmVydGV4QXR0cmliMnYs
IGZfdmVydGV4QXR0cmliM3YsIGZfdmVydGV4QXR0cmliNHYKK307CisKK2VudW0gRGF0YUZ1bmN0
aW9uTWF0cml4VG9DYWxsIHsKKyAgICBmX3VuaWZvcm1NYXRyaXgyZnYsIGZfdW5pZm9ybU1hdHJp
eDNmdiwgZl91bmlmb3JtTWF0cml4NGZ2Cit9OworCitzdGF0aWMgYm9vbCBmdW5jdGlvbkZvclVu
aWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCit7CisgICAgc3dpdGNoIChmKSB7CisgICAgY2Fz
ZSBmX3VuaWZvcm0xdjoKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgIGNhc2UgZl91bmlmb3Jt
M3Y6CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIEpTQzo6
SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3sKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
KyAgICAKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSAwOworICAgIGxvbmcg
aW5kZXggPSAtMTsKKyAgICAKKyAgICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3JtKGYpKSB7CisgICAg
ICAgIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICAgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICB9IGVsc2UKKyAgICAgICAgaW5kZXggPSBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIAorICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgCisg
ICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAg
IAorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTFmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0yZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdW5pZm9ybTN2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2KGxvY2F0
aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlv
biwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgZl92ZXJ0ZXhBdHRyaWIxdjoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2
KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGZfdmVydGV4QXR0cmliMnY6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjJm
dihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIz
ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
NGZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPGZsb2F0LCA2
ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
CisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4
dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVu
aWZvcm0yZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9y
bTNmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2
KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0
cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRy
aWIyZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjNmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
NGZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0
YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjb250ZXh0KQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0g
MikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFy
cmF5ID0gdG9JbnQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICAKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBz
d2l0Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgICAgIGNvbnRl
eHQudW5pZm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgICAgICBjb250ZXh0
LnVuaWZvcm0yaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgorICAgICAgICAgICAgY29udGV4dC51
bmlmb3JtM2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgICAgIGNvbnRleHQudW5p
Zm9ybTRpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIAorICAgIAorICAgIFZlY3RvcjxpbnQsIDY0PiBh
cnJheTsKKyAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LCBhcnJheSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAKKyAg
ICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgICAgICBjb250ZXh0LnVu
aWZvcm0xaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgIGNvbnRleHQudW5pZm9y
bTJpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtM2l2
KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9j
YXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMg
SlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwg
ZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRl
eHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1
cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CisgICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
ID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7CisgICAgCisgICAgYm9vbCB0cmFuc3Bvc2UgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0Jvb2xlYW4oZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgCisgICAgUmVmUHRyPEZsb2F0MzJBcnJh
eT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIp
KTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkg
eworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6
CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4M2Z2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKKyAgICAgICAgICAg
IGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5
LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OworICAgIGlm
ICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIHN3aXRjaCAoZikg
eworICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1N
YXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6CisgICAg
ICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5k
YXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5p
Zm9ybU1hdHJpeDRmdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25mKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkp
OworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZf
dW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitK
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KEpTQzo6
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2
LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25pKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3Jt
TWF0cml4MmZ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIx
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92
ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMnYsIGV4ZWMsIGlt
cGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZl
cnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0
diwgZXhlYywgaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCi0KLSNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkVY
VEJsZW5kTWluTWF4LmgiCi0jaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgiCi0jaW5jbHVkZSAiRVhU
U2hhZGVyVGV4dHVyZUxPRC5oIgotI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5oIgotI2luY2x1ZGUgIkVYVHNSR0IuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkpTRVhU
QmxlbmRNaW5NYXguaCIKLSNpbmNsdWRlICJKU0VYVEZyYWdEZXB0aC5oIgotI2luY2x1ZGUgIkpT
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIgotI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljLmgiCi0jaW5jbHVkZSAiSlNFWFRzUkdCLmgiCi0jaW5jbHVkZSAiSlNIVE1MQ2FudmFz
RWxlbWVudC5oIgotI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkpT
SW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVk
ZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxv
YXQuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIkpT
T0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdExp
bmVhci5oIgotI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJK
U1dlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgi
Ci0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJK
U1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnUmVu
ZGVyZXJJbmZvLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgotI2luY2x1ZGUg
IkpTV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMuaCIK
LSNpbmNsdWRlICJKU1dlYkdMRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMTG9zZUNv
bnRleHQuaCIKLSNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkpTV2ViR0xS
ZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiSlNX
ZWJHTFRleHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCi0jaW5jbHVkZSAiSlNXZWJLaXRD
U1NNYXRyaXguaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0Vs
ZW1lbnRJbmRleFVpbnQuaCIKLSNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0j
aW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGlu
ZWFyLmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5o
IgotI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgotI2lu
Y2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1
Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCi0jaW5jbHVk
ZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0j
aW5jbHVkZSAiV2ViR0xFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgi
Ci0jaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5o
IgotI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oIgotI2luY2x1ZGUgIldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKLSNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
VHlwZWRBcnJheXMuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotCi0jaWYgRU5BQkxF
KFZJREVPKQotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hUTUxW
aWRlb0VsZW1lbnQuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCi17
Ci0gICAgc3dpdGNoIChpbmZvLmdldFR5cGUoKSkgewotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjpr
VHlwZUJvb2w6Ci0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOwotICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2xBcnJheTogewotICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5m
by5nZXRCb29sQXJyYXkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVl
LnNpemUoKTsgKytpaSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtp
aV0pKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVj
dCwgbGlzdCk7Ci0gICAgfQotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgotICAg
ICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRGbG9hdCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsK
LSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVOdWxsOgotICAgICAgICByZXR1cm4ganNOdWxs
KCk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlU3RyaW5nOgotICAgICAgICByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW5mby5nZXRTdHJpbmcoKSk7Ci0gICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlVW5zaWduZWRJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZv
LmdldFVuc2lnbmVkSW50KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVm
ZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xCdWZmZXIoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xG
bG9hdEFycmF5KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZm
ZXI6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJH
TEZyYW1lYnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJy
YXk6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJH
TEludEFycmF5KCkpOwotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgV2ViR0xPYmplY3RBcnJheQot
ICAgIC8vIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMT2JqZWN0QXJyYXk6Ci0gICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xQcm9ncmFtOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xQcm9ncmFtKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVdlYkdMUmVuZGVyYnVmZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSk7Ci0gICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xUZXh0dXJlOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xUZXh0dXJlKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRCeXRlQXJyYXk6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KCkp
OwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRJbnRBcnJheToKLSAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWdu
ZWRJbnRBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlu
Zm8uZ2V0V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygpKTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
Ci19Ci0KLWVudW0gT2JqZWN0VHlwZSB7Ci0gICAga0J1ZmZlciwga1JlbmRlcmJ1ZmZlciwga1Rl
eHR1cmUsIGtWZXJ0ZXhBdHRyaWIKLX07Ci0KLXN0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFt
ZXRlcihKU1dlYkdMUmVuZGVyaW5nQ29udGV4dCogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVj
dFR5cGUgb2JqZWN0VHlwZSkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIp
Ci0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IG9iai0+aW1wbCgpOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbzsKLSAgICBzd2l0Y2gg
KG9iamVjdFR5cGUpIHsKLSAgICBjYXNlIGtCdWZmZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0
LmdldEJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2Uga1JlbmRlcmJ1ZmZlcjoKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBrVGV4dHVyZToKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VGV4UGFyYW1ldGVyKHRh
cmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVmVydGV4QXR0cmli
OgotICAgICAgICAvLyB0YXJnZXQgPT4gaW5kZXgKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0
VmVydGV4QXR0cmliKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb2Jq
LT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLWVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7Ci0g
ICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCi19OwotCi1zdGF0aWMgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViR0xF
eHRlbnNpb24qIGV4dGVuc2lvbikKLXsKLSAgICBpZiAoIWV4dGVuc2lvbikKLSAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwotICAgIHN3aXRjaCAoZXh0ZW5zaW9uLT5nZXROYW1lKCkpIHsKLSAgICBj
YXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTExvc2VDb250ZXh0TmFtZToKLSAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTExvc2VDb250ZXh0Kj4o
ZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUU2hhZGVyVGV4dHVyZUxP
RE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8RVhUU2hhZGVyVGV4dHVyZUxPRCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY05hbWU6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUc1JHQk5h
bWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
RVhUc1JHQio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEZyYWdE
ZXB0aE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8RVhURnJhZ0RlcHRoKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lv
bjo6RVhUQmxlbmRNaW5NYXhOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PEVYVEJsZW5kTWluTWF4Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6T0VTU3RhbmRhcmREZXJpdmF0aXZlc05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTU3RhbmRhcmREZXJp
dmF0aXZlcyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1
cmVGbG9hdE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4
dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXRMaW5lYXIqPihl
eHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0
TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxPRVNUZXh0dXJlSGFsZkZsb2F0Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVh
cio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1ZlcnRleEFycmF5
T2JqZWN0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246Ok9FU0VsZW1lbnRJbmRleFVpbnROYW1lOgotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU0VsZW1lbnRJbmRleFVpbnQqPihl
eHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlYnVnUmVuZGVyZXJJ
bmZvTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnUmVuZGVyZXJJbmZvKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1NoYWRlcnNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVidWdTaGFkZXJzKj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Q05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQ05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKj4oZXh0
ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZXB0aFRleHR1cmVOYW1l
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdl
YkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6
V2ViR0xEcmF3QnVmZmVyc05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEcmF3QnVmZmVycyo+KGV4dGVuc2lvbikpOwotICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OkFOR0xFSW5zdGFuY2VkQXJyYXlzTmFtZToKLSAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBTkdMRUluc3RhbmNlZEFy
cmF5cyo+KGV4dGVuc2lvbikpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4ganNOdWxsKCk7Ci19Ci0KLXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhy
b3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29u
dGV4dCA9IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3Jh
bTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dy
YW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBWZWN0b3I8UmVmUHRyPFdl
YkdMU2hhZGVyPj4gc2hhZGVyczsKLSAgICBib29sIHN1Y2NlZWQgPSBjb250ZXh0LmdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAg
ICB9Ci0gICAgaWYgKCFzdWNjZWVkKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkg
PCBzaGFkZXJzLnNpemUoKTsgKytpaSkKLSAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhleGVjLCBn
bG9iYWxPYmplY3QoKSwgc2hhZGVyc1tpaV0uZ2V0KCkpKTsKLSAgICByZXR1cm4gY29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOwotfQotCi1KU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7Ci0KLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAg
Y29uc3QgU3RyaW5nIG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0g
Y29udGV4dC5nZXRFeHRlbnNpb24obmFtZSk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGV4dGVuc2lvbik7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdl
dE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrQnVmZmVyKTsKLX0KLQotSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDMpCi0g
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgdW5zaWduZWQgYXR0YWNobWVudCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDIpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNv
bnRleHQuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVu
dCwgcG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgp
LnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9
IGNvbnRleHQuZ2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19
Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIo
RXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikK
LSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5n
ZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5m
byk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFt
ZXRlcih0aGlzLCBleGVjLCBrUmVuZGVyYnVmZmVyKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlu
aGVyaXRzKEpTV2ViR0xTaGFkZXI6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKLSAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9X
cmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJH
TEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUs
IGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIGlmIChjb250ZXh0
LmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIFZlY3RvcjxT
dHJpbmc+IHZhbHVlID0gY29udGV4dC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0gICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgdmFs
dWUuc2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShl
eGVjLCB2YWx1ZVtpaV0pKTsKLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xv
YmFsT2JqZWN0KCksIGxpc3QpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXRPYmpl
Y3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1RleHR1cmUpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYg
Y29udGV4dCA9IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJv
Z3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXBy
b2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0
VW5pZm9ybShwcm9ncmFtLCBsb2NhdGlvbiwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQot
Ci1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywg
a1ZlcnRleEF0dHJpYik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KLWJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotewotICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgIGludDMyX3QgbGVuZ3RoID0gb2Jq
ZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIo
ZXhlYyk7Ci0KLSAgICBpZiAoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZlY3Rvci5yZXNpemUobGVuZ3RoKTsKLQotICAgIGZv
ciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTQzo6SlNWYWx1
ZSB2ID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmVjdG9yW2ldID0gc3Rh
dGljX2Nhc3Q8VD4odi50b051bWJlcihleGVjKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWVudW0gRGF0YUZ1bmN0aW9uVG9DYWxsIHsKLSAgICBmX3VuaWZvcm0xdiwgZl91bmlm
b3JtMnYsIGZfdW5pZm9ybTN2LCBmX3VuaWZvcm00diwKLSAgICBmX3ZlcnRleEF0dHJpYjF2LCBm
X3ZlcnRleEF0dHJpYjJ2LCBmX3ZlcnRleEF0dHJpYjN2LCBmX3ZlcnRleEF0dHJpYjR2Ci19Owot
Ci1lbnVtIERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCB7Ci0gICAgZl91bmlmb3JtTWF0cml4MmZ2
LCBmX3VuaWZvcm1NYXRyaXgzZnYsIGZfdW5pZm9ybU1hdHJpeDRmdgotfTsKLQotc3RhdGljIGJv
b2wgZnVuY3Rpb25Gb3JVbmlmb3JtKERhdGFGdW5jdGlvblRvQ2FsbCBmKQotewotICAgIHN3aXRj
aCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAg
ICBjYXNlIGZfdW5pZm9ybTN2OgotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwg
ZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKLSAgICAKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSAw
OwotICAgIGxvbmcgaW5kZXggPSAtMTsKLSAgICAKLSAgICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3Jt
KGYpKSB7Ci0gICAgICAgIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICAgICAgaWYgKCFsb2NhdGlvbiAm
JiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
aW5kZXggPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotCi0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICAgICAgCi0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQz
MkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAg
c3dpdGNoIChmKSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgICAgICBjb250
ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgICAgICAgICAgY29udGV4
dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAgICAgIGNvbnRleHQu
dW5pZm9ybTNmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgICAgICBjb250ZXh0LnVu
aWZvcm00ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6Ci0gICAgICAgICAgICBjb250ZXh0
LnZlcnRleEF0dHJpYjFmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2OgotICAgICAgICAgICAgY29udGV4
dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAgICAgIGNvbnRl
eHQudmVydGV4QXR0cmliM2Z2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6Ci0gICAgICAgICAgICBjb250
ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgVmVj
dG9yPGZsb2F0LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKGYpIHsKLSAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAg
ICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgp
LCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgIGNv
bnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVj
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAgY29udGV4
dC51bmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTR2OgotICAgICAgICBjb250ZXh0LnVu
aWZvcm00ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjoKLSAgICAgICAgY29udGV4dC52
ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2OgotICAgICAgICBjb250ZXh0LnZl
cnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6Ci0gICAgICAgIGNvbnRleHQudmVy
dGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKLSAgICAgICAgY29udGV4dC52ZXJ0
ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0
aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwotICAKLSAgICBSZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJh
eSA9IHRvSW50MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkgewotICAgICAgICBzd2l0Y2gg
KGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5p
Zm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZv
cm0yaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3Jt
M2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRp
dihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQotCi0KLSAgICBWZWN0b3I8aW50LCA2ND4gYXJyYXk7Ci0gICAgaWYg
KCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKGYpIHsKLSAg
ICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24s
IGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgZl91bmlmb3JtMnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTJpdihsb2NhdGlvbiwgYXJy
YXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBm
X3VuaWZvcm0zdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5k
YXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5p
Zm9ybTR2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmRhdGEo
KSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1zdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFG
dW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICE9IDMpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAg
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246
OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlv
biAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotCi0gICAgYm9vbCB0cmFuc3Bvc2Ug
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgICAgIAotICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJB
cnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIAotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGlmICh3ZWJHTEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikg
ewotICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoKLSAgICAgICAgICAgIGNvbnRleHQu
dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6
Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4NGZ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4
NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBW
ZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDIpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjKTsKLQotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2
OgotICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBmX3VuaWZvcm1NYXRyaXgzZnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihs
b2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKLSAgICAgICAgY29udGV4
dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0xdiwgZXhlYywgaW1w
bCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MWl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZf
dW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0ydiwgZXhlYywg
aW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25m
KGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm00diwgZXhl
YywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rp
b25pKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIGV4
ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwgZXhlYywgaW1wbCgpKTsKLX0KLQot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91
bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjF2LCBleGVjLCBpbXBs
KCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
ZihmX3ZlcnRleEF0dHJpYjJ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBp
bXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uZihmX3ZlcnRleEF0dHJpYjR2LCBleGVjLCBpbXBsKCkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24g
MTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI5ODMsNyArMjk4Myw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkaW50
ZXJmYWNlKSBlcSAiSW1wbCIpIHsKICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAg
ICR7aW1wbFR5cGV9KiByb290ID0gJmpzJHtpbnRlcmZhY2VOYW1lfS0+aW1wbCgpO1xuIjsKICAg
ICAgICAgICAgIH0gZWxzaWYgKEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEg
IkltcGxXZWJHTFJlbmRlcmluZ0NvbnRleHQiKSB7Ci0gICAgICAgICAgICAgICAgJHJvb3RTdHJp
bmcgID0gIiAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIHJvb3QgPSBXVEY6OmdldFB0cihqcyR7
aW50ZXJmYWNlTmFtZX0tPmltcGwoKS5jb250ZXh0KCkpO1xuIjsKKyAgICAgICAgICAgICAgICAk
cm9vdFN0cmluZyAgPSAiICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIHJvb3QgPSBXVEY6
OmdldFB0cihqcyR7aW50ZXJmYWNlTmFtZX0tPmltcGwoKS5jb250ZXh0KCkpO1xuIjsKICAgICAg
ICAgICAgIH0gZWxzaWYgKEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEgIklt
cGxGcmFtZSIpIHsKICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAgIEZyYW1lKiBy
b290ID0gV1RGOjpnZXRQdHIoanMke2ludGVyZmFjZU5hbWV9LT5pbXBsKCkuZnJhbWUoKSk7XG4i
OwogICAgICAgICAgICAgICAgICRyb290U3RyaW5nIC49ICIgICAgaWYgKCFyb290KVxuIjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsOSArNTIsMTAgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCi0jaWYgRU5BQkxFKFdFQkdMKSAg
ICAKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjEyLDcgKzIxMyw4IEBAIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4KICAgICAgICAgICAgIGlmIChtX2NvbnRl
eHQgJiYgIW1fY29udGV4dC0+aXMzZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRl
eHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSh0aGlzLCBzdGF0aWNfY2FzdDxXZWJH
TENvbnRleHRBdHRyaWJ1dGVzKj4oYXR0cnMpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQg
PSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUodGhpcywgc3RhdGljX2Nhc3Q8V2Vi
R0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSwgdHlwZSk7CisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICAvLyBO
ZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQg
Y3JlYXRlZCBmb3IgdGhlIENhbnZhcwogICAgICAgICAgICAgICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKQEAgLTI1NSw3ICsyNTcsNyBAQCBib29sIEhU
TUxDYW52YXNFbGVtZW50OjppczJkVHlwZShjb25zdCBTCiBib29sIEhUTUxDYW52YXNFbGVtZW50
OjppczNkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgLy8gUmV0YWluIHN1cHBvcnQg
Zm9yIHRoZSBsZWdhY3kgIndlYmtpdC0zZCIgbmFtZS4KLSAgICByZXR1cm4gdHlwZSA9PSAid2Vi
Z2wiIHx8IHR5cGUgPT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwgdHlwZSA9PSAid2Via2l0LTNk
IjsKKyAgICByZXR1cm4gdHlwZSA9PSAid2ViZ2wiIHx8IHR5cGUgPT0gImV4cGVyaW1lbnRhbC13
ZWJnbCIgfHwgdHlwZSA9PSAid2Via2l0LTNkIiB8fCB0eXBlID09ICJleHBlcmltZW50YWwtd2Vi
Z2wyIjsKIH0KICNlbmRpZgogCkBAIC0zMjcsNyArMzI5LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6cmVzZXQoKQogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGlmIChpczNEKCkgJiYgb2xk
U2l6ZSAhPSBzaXplKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dCo+KG1fY29udGV4dC5nZXQoKSktPnJlc2hhcGUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAg
ICBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4obV9jb250ZXh0LmdldCgp
KS0+cmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAjZW5kaWYKIAogICAgIGlmIChhdXRvIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgewpAQCAtMzk0LDcgKzM5Niw3IEBAIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ28KIAogI2lmIEVOQUJMRShXRUJHTCkgICAg
CiAgICAgaWYgKGlzM0QoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250
ZXh0Kj4obV9jb250ZXh0LmdldCgpKS0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworICAgICAgICBz
dGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4obV9jb250ZXh0LmdldCgpKS0+
bWFya0xheWVyQ29tcG9zaXRlZCgpOwogI2VuZGlmCiB9CiAKQEAgLTQ3NSw3ICs0NzcsNyBAQCBS
ZWZQdHI8SW1hZ2VEYXRhPiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0CiAgICAgaWYgKCFpczNEKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
dHggPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkp
OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCA9IHN0YXRpY19jYXN0PFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqPihtX2NvbnRleHQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGN0
eC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKICNlbHNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuY3Bw
CShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUlu
c3RhbmNlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1BTkdMRUluc3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRB
cnJheXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorQU5HTEVJbnN0YW5jZWRBcnJh
eXM6OkFOR0xFSW5zdGFuY2VkQXJyYXlzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRl
eHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpAQCAtNDgsNyArNDgsNyBA
QCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBBTkdMRUluc3RhCiAgICAgcmV0dXJuIEFO
R0xFSW5zdGFuY2VkQXJyYXlzTmFtZTsKIH0KIAotYm9vbCBBTkdMRUluc3RhbmNlZEFycmF5czo6
c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgQU5HTEVJbnN0
YW5jZWRBcnJheXM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0
KQogewogI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJy
YXlzLmgJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FO
R0xFSW5zdGFuY2VkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICszMCwxNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIEFOR0xFSW5zdGFuY2VkQXJy
YXlzIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBs
aWNpdCBBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAg
ICAgdmlydHVhbCB+QU5HTEVJbnN0YW5jZWRBcnJheXMoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5z
aW9uTmFtZSBnZXROYW1lKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZEFOR0xF
KEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVp
IHByaW1jb3VudCk7CiAgICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQs
IEdDM0RzaXplaSBwcmltY291bnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxNzgz
NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDcgQEAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpDYW52YXNSZW5kZXJpbgogI2lmICFFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CiAgICAgQVNTRVJUX1VOVVNFRCh1c2VzRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUsICF1c2Vz
RGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpOwogI2VuZGlmCisgICAgbV90eXBlID0gIjJkIjsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnVud2luZFN0YXRlU3RhY2soKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXMyZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKSB7fQogICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KQEAg
LTczLDYgKzc0LDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICB2b2lkIGNoZWNrT3JpZ2luKGNv
bnN0IFVSTCYpOwogCisgICAgU3RyaW5nIG1fdHlwZTsKIHByaXZhdGU6CiAgICAgSFRNTENhbnZh
c0VsZW1lbnQqIG1fY2FudmFzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0VYVEJsZW5kTWluTWF4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9FWFRCbGVuZE1pbk1heC5jcHAJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVEJsZW5kTWluTWF4OjpFWFRC
bGVuZE1pbk1heChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitFWFRCbGVuZE1pbk1h
eDo6RVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAg
ICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmgJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFWFRCbGVuZE1pbk1h
eCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
RVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgRVhU
QmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVY
VEJsZW5kTWluTWF4KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNv
bnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURnJhZ0Rl
cHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFn
RGVwdGguY3BwCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9FWFRGcmFnRGVwdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRVhURnJhZ0RlcHRoOjpFWFRGcmFnRGVwdGgoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQorRVhURnJhZ0RlcHRoOjpFWFRGcmFnRGVwdGgoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRl
eHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGgu
aAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURnJh
Z0RlcHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBFWFRGcmFnRGVwdGggZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24g
ewogcHVibGljOgotICAgIGV4cGxpY2l0IEVYVEZyYWdEZXB0aChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBFWFRGcmFnRGVwdGgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopOwogICAgIHZpcnR1YWwgfkVYVEZyYWdEZXB0aCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNp
b25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwCShyZXZpc2lvbiAxNzgz
NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUVYVFNoYWRlclRleHR1cmVMT0Q6OkVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQorRVhUU2hhZGVyVGV4dHVyZUxPRDo6RVhUU2hhZGVyVGV4dHVy
ZUxPRChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRl
bnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VY
VFNoYWRlclRleHR1cmVMT0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmgJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVYVFNoYWRlclRl
eHR1cmVMT0QgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4
cGxpY2l0IEVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAg
ZXhwbGljaXQgRVhUU2hhZGVyVGV4dHVyZUxPRChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAgICAgdmlydHVhbCB+RVhUU2hhZGVyVGV4dHVyZUxPRCgpOwogCiAgICAgdmlydHVhbCBFeHRl
bnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
LmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhU
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yzo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzo6RVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4
dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgJKHJldmlzaW9uIDE3
ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljIGZpbmFsIDogcHVibGlj
IFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2
aXJ0dWFsIH5FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMoKTsKIAogICAgIHZpcnR1YWwgRXh0
ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9FWFRzUkdCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9FWFRzUkdCLmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhUc1JHQi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FWFRzUkdCOjpFWFRzUkdCKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK0VYVHNSR0I6OkVYVHNSR0IoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUc1JHQi5oCShyZXZpc2lvbiAxNzgzNzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFWFRzUkdCIGZpbmFs
IDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFWFRzUkdC
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0IEVYVHNSR0IoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVYVHNSR0IoKTsKIAogICAgIHZpcnR1
YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmNwcAkocmV2
aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudElu
ZGV4VWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1PRVNFbGVtZW50SW5kZXhVaW50OjpPRVNFbGVtZW50SW5kZXhVaW50KFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU0VsZW1lbnRJbmRleFVpbnQ6Ok9FU0Vs
ZW1lbnRJbmRleFVpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oCShyZXZpc2lvbiAxNzgzNzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBP
RVNFbGVtZW50SW5kZXhVaW50IGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBPRVNFbGVtZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIGV4cGxpY2l0IE9FU0VsZW1lbnRJbmRleFVpbnQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU0VsZW1lbnRJbmRleFVpbnQoKTsKIAogICAgIHZp
cnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVz
LmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNTdGFuZGFyZERlcml2YXRpdmVzOjpPRVNTdGFu
ZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU1N0YW5k
YXJkRGVyaXZhdGl2ZXM6Ok9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJp
dmF0aXZlcy5oCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNTdGFuZGFyZERlcml2YXRpdmVzIGZp
bmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBPRVNT
dGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0
IE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAg
IHZpcnR1YWwgfk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5z
aW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHAJKHJldmlzaW9uIDE3ODM3MikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNUZXh0
dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
CitPRVNUZXh0dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5oCShyZXZpc2lv
biAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIE9FU1RleHR1cmVGbG9hdCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgT0VTVGV4dHVyZUZsb2F0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAg
IE9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVh
bCB+T0VTVGV4dHVyZUZsb2F0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFt
ZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUZsb2F0TGluZWFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwCShyZXZpc2lvbiAxNzgzNzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotT0VT
VGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0KQorT0VTVGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRM
aW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0
ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNUZXh0dXJlRmxvYXRMaW5lYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuaAkocmV2aXNpb24gMTc4MzcyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNU
ZXh0dXJlRmxvYXRMaW5lYXIgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGlj
OgotICAgIGV4cGxpY2l0IE9FU1RleHR1cmVGbG9hdExpbmVhcihXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBPRVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVGbG9hdExpbmVhcigpOwogCiAg
ICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQu
Y3BwCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNU
ZXh0dXJlSGFsZkZsb2F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxvYXQ6Ok9FU1RleHR1cmVIYWxm
RmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VTVGV4dHVyZUhhbGZGbG9h
dDo6T0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0
KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmgJKHJldmlzaW9uIDE3
ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXQgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24g
ewogcHVibGljOgotICAgIE9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUhhbGZGbG9hdCgpOwogCiAgICAgdmlydHVhbCBFeHRl
bnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3Bw
CShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0
dXJlSGFsZkZsb2F0TGluZWFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI6Ok9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4
dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxm
RmxvYXRMaW5lYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVi
bGljOgotICAgIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcihXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKik7CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcigpOwogCiAgICAg
dmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5j
cHAJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1Zl
cnRleEFycmF5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1ZlcnRleEFycmF5T2JqZWN0OjpPRVNWZXJ0ZXhBcnJh
eU9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitPRVNWZXJ0ZXhBcnJheU9i
amVjdDo6T0VTVmVydGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29u
dGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmgJKHJldmlz
aW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwxNCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U7CiBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwogCiB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdCBm
aW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgT0VTVmVydGV4QXJy
YXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgT0VTVmVydGV4QXJyYXlPYmpl
Y3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1ZlcnRleEFy
cmF5T2JqZWN0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3Njk5NCkJKGZyb20gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoxNzY5OTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgi
CisKKyNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJFWFRCbGVuZE1pbk1heC5oIgorI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgorI2lu
Y2x1ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKKyNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMuaCIKKyNpbmNsdWRlICJFWFRzUkdCLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgor
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5jbHVkZSAiT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgorI2lu
Y2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxm
RmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCisjaW5jbHVk
ZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJHTEFjdGl2
ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMu
aCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIldl
YkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5oIgor
I2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiV2Vi
R0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVk
ZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25G
b3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5oIgorCisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMy
QXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0
ZW1wdHMgPSAxLjA7Citjb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2
OworCituYW1lc3BhY2UgeworCisgICAgY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciB7
CisgICAgcHVibGljOgorICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKERyYXdpbmdC
dWZmZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyQmluZGlu
ZykKKyAgICAgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCisgICAgICAg
ICAgICAsIG1fZnJhbWVidWZmZXJCaW5kaW5nKGZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBm
b3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29t
bWl0KCk7CisgICAgICAgIH0KKworICAgICAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQKKyAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7
CisgICAgICAgIFdlYkdMRnJhbWVidWZmZXIqIG1fZnJhbWVidWZmZXJCaW5kaW5nOworICAgIH07
CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwor
ICAgIH0KKworICAgIHZvaWQgY2xpcDFEKEdDM0RpbnQgc3RhcnQsIEdDM0RzaXplaSByYW5nZSwg
R0MzRHNpemVpIHNvdXJjZVJhbmdlLCBHQzNEaW50KiBjbGlwcGVkU3RhcnQsIEdDM0RzaXplaSog
Y2xpcHBlZFJhbmdlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlw
cGVkUmFuZ2UpOworICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CisgICAgICAgICAgICByYW5nZSAr
PSBzdGFydDsKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBHQzNE
aW50IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7CisgICAgICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkK
KyAgICAgICAgICAgIHJhbmdlIC09IGVuZCAtIHNvdXJjZVJhbmdlOworICAgICAgICAqY2xpcHBl
ZFN0YXJ0ID0gc3RhcnQ7CisgICAgICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKKyAgICB9CisK
KyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIG5vIGNsaXBwaW5nIGlzIG5lY2Vzc2FyeSwgaS5lLiwg
eCwgeSwgd2lkdGgsIGhlaWdodCBzdGF5IHRoZSBzYW1lLgorICAgIGJvb2wgY2xpcDJEKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0
LAorICAgICAgICAgICAgICAgIEdDM0RpbnQqIGNsaXBwZWRYLCBHQzNEaW50KiBjbGlwcGVkWSwg
R0MzRHNpemVpKiBjbGlwcGVkV2lkdGgsIEdDM0RzaXplaSpjbGlwcGVkSGVpZ2h0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBwZWRZICYmIGNsaXBwZWRXaWR0aCAmJiBj
bGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgY2xpcDFEKHgsIHdpZHRoLCBzb3VyY2VXaWR0aCwgY2xp
cHBlZFgsIGNsaXBwZWRXaWR0aCk7CisgICAgICAgIGNsaXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhl
aWdodCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOworICAgICAgICByZXR1cm4gKCpjbGlwcGVk
WCAhPSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlwcGVkV2lkdGggIT0gd2lkdGggfHwgKmNs
aXBwZWRIZWlnaHQgIT0gaGVpZ2h0KTsKKyAgICB9CisKKyAgICBHQzNEaW50IGNsYW1wKEdDM0Rp
bnQgdmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZSA8IG1pbikKKyAgICAgICAgICAgIHZhbHVlID0gbWluOworICAgICAgICBpZiAodmFsdWUg
PiBtYXgpCisgICAgICAgICAgICB2YWx1ZSA9IG1heDsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhl
IEFTQ0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCisgICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0
aW9uIDMuMS4KKyAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKKyAg
ICB7CisgICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQg
YCBAIFwgJyBERUwuCisgICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2CisgICAgICAgICAg
ICAmJiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9
ICdcXCcgJiYgYyAhPSAnXCcnKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8v
IEhvcml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJy
aWFnZSByZXR1cm4KKyAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCisgICAgICAgIGlmIChjID49
IDkgJiYgYyA8PSAxMykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc1ByZWZpeFJlc2VydmVkKGNvbnN0IFN0cmluZyYg
bmFtZSkKKyAgICB7CisgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImdsXyIpIHx8IG5hbWUu
c3RhcnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJfd2ViZ2xfIikpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIFN0cmlwcyBjb21tZW50cyBmcm9tIHNoYWRlciB0ZXh0LiBUaGlzIGFsbG93cyBub24tQVND
SUkgY2hhcmFjdGVycworICAgIC8vIHRvIGJlIHVzZWQgaW4gY29tbWVudHMgd2l0aG91dCBwb3Rl
bnRpYWxseSBicmVha2luZyBPcGVuR0wKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVj
dGluZyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgorICAgIGNsYXNzIFN0cmlw
Q29tbWVudHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJp
bmcmIHN0cikKKyAgICAgICAgICAgIDogbV9wYXJzZVN0YXRlKEJlZ2lubmluZ09mTGluZSkKKyAg
ICAgICAgICAgICwgbV9zb3VyY2VTdHJpbmcoc3RyKQorICAgICAgICAgICAgLCBtX2xlbmd0aChz
dHIubGVuZ3RoKCkpCisgICAgICAgICAgICAsIG1fcG9zaXRpb24oMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGFyc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyByZXN1bHQoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0
aCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHBhcnNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgd2hpbGUgKGhhc01vcmVDaGFyYWN0ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICBwcm9j
ZXNzKGN1cnJlbnQoKSk7CisgICAgICAgICAgICAgICAgLy8gcHJvY2VzcygpIG1pZ2h0IGFkdmFu
Y2UgdGhlIHBvc2l0aW9uLgorICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlQ2hhcmFjdGVycygp
KQorICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHByb2Nlc3MoVUNoYXIpOworCisgICAgICAgIGJvb2wgcGVlayhV
Q2hhciYgY2hhcmFjdGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9wb3Np
dGlvbiArIDEgPj0gbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBVQ2hhciBjdXJyZW50
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04obV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Nv
dXJjZVN0cmluZ1ttX3Bvc2l0aW9uXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWR2YW5j
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxpemUgbmV3bGluZSByZWxh
dGVkIGNoYXJhY3RlcnMuCisgICAgICAgICAgICByZXR1cm4gKGNoYXJhY3RlciA9PSAnXG4nIHx8
IGNoYXJhY3RlciA9PSAnXHInKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZW1pdChVQ2hh
ciBjaGFyYWN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoY2hh
cmFjdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGVudW0gUGFyc2VTdGF0ZSB7CisgICAgICAg
ICAgICAvLyBIYXZlIG5vdCBzZWVuIGFuIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB5
ZXQgb24KKyAgICAgICAgICAgIC8vIHRoaXMgbGluZS4gUG9zc2libGUgdGhhdCB3ZSBtaWdodCBz
ZWUgYSBwcmVwcm9jZXNzb3IKKyAgICAgICAgICAgIC8vIGRpcmVjdGl2ZS4KKyAgICAgICAgICAg
IEJlZ2lubmluZ09mTGluZSwKKworICAgICAgICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9u
ZSBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgIC8vIG9uIHRoaXMg
bGluZS4KKyAgICAgICAgICAgIE1pZGRsZU9mTGluZSwKKworICAgICAgICAgICAgLy8gSGFuZGxp
bmcgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBQYXNzZXMgdGhyb3VnaCBhbGwKKyAgICAgICAg
ICAgIC8vIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRGlzYWJsZXMgY29t
bWVudAorICAgICAgICAgICAgLy8gcHJvY2Vzc2luZy4KKyAgICAgICAgICAgIEluUHJlcHJvY2Vz
c29yRGlyZWN0aXZlLAorCisgICAgICAgICAgICAvLyBIYW5kbGluZyBhIHNpbmdsZS1saW5lIGNv
bW1lbnQuIFRoZSBjb21tZW50IHRleHQgaXMKKyAgICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGgg
YSBzaW5nbGUgc3BhY2UuCisgICAgICAgICAgICBJblNpbmdsZUxpbmVDb21tZW50LAorCisgICAg
ICAgICAgICAvLyBIYW5kbGluZyBhIG11bHRpLWxpbmUgY29tbWVudC4gTmV3bGluZXMgYXJlIHBh
c3NlZAorICAgICAgICAgICAgLy8gdGhyb3VnaCB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisg
ICAgICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKKyAgICAgICAgfTsKKworICAgICAgICBQYXJz
ZVN0YXRlIG1fcGFyc2VTdGF0ZTsKKyAgICAgICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOworICAg
ICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKKyAg
ICAgICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7CisgICAgfTsKKworICAgIHZvaWQgU3RyaXBD
b21tZW50czo6cHJvY2VzcyhVQ2hhciBjKQorICAgIHsKKyAgICAgICAgaWYgKGlzTmV3bGluZShj
KSkgeworICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgc3RhdGUgd2UgYXJlIGluLCBwYXNz
IHRocm91Z2ggbmV3bGluZXMKKyAgICAgICAgICAgIC8vIHNvIHdlIHByZXNlcnZlIGxpbmUgbnVt
YmVycy4KKyAgICAgICAgICAgIGVtaXQoYyk7CisKKyAgICAgICAgICAgIGlmIChtX3BhcnNlU3Rh
dGUgIT0gSW5NdWx0aUxpbmVDb21tZW50KQorICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9
IEJlZ2lubmluZ09mTGluZTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgVUNoYXIgdGVtcCA9IDA7CisgICAgICAgIHN3aXRjaCAobV9wYXJzZVN0YXRlKSB7Cisg
ICAgICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgorICAgICAgICAgICAgaWYgKFdURjo6aXNBU0NJ
SVNwYWNlKGMpKSB7CisgICAgICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGMgPT0gJyMnKSB7CisgICAg
ICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7CisgICAg
ICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhh
bmRsZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7
CisgICAgICAgICAgICBwcm9jZXNzKGMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBNaWRkbGVPZkxpbmU6CisgICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1w
KSkgeworICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgeworICAgICAgICAgICAgICAg
ICAgICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OworICAgICAgICAgICAgICAg
ICAgICBlbWl0KCcgJyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKHRlbXAgPT0gJyonKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IElu
TXVsdGlMaW5lQ29tbWVudDsKKyAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgY29tbWVu
dCBzdGFydCBpbiBjYXNlIHRoZSB1c2VyIGhhcworICAgICAgICAgICAgICAgICAgICAvLyBhbiB1
bmNsb3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCisgICAgICAgICAgICAgICAgICAg
IC8vIHNpZ25hbCBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgZW1pdCgnLycpOworICAg
ICAgICAgICAgICAgICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAgICAgICAgIC8vIE5vIG1h
dHRlciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBpdAorICAgICAgICAgICAgLy8g
dGhyb3VnaC4gRG8gbm90IHBhcnNlIGNvbW1lbnRzIGluIHRoaXMgc3RhdGUuIFRoaXMKKyAgICAg
ICAgICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gbG9uZyB0ZXJtLCBi
dXQgaXQKKyAgICAgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNlcnJvciBwcmVwcm9jZXNz
b3IgZGlyZWN0aXZlLgorICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKKyAgICAgICAgICAgIC8vIFRoZSBu
ZXdsaW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUKKyAgICAg
ICAgICAgIC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBnZXQgb3V0IG9mIHRoZQor
ICAgICAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxvdyBhbGwgb3RoZXIgY2hh
cmFjdGVycy4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSW5NdWx0aUxpbmVD
b21tZW50OgorICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9
PSAnLycpIHsKKyAgICAgICAgICAgICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgZW1p
dCgnLycpOworICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKKyAg
ICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuIFVu
Y2xlYXIgd2hldGhlciB3ZSBtYXkKKyAgICAgICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0
IGVtaXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQorICAgICAgICAgICAgLy8gdG8gcHJl
c2VydmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0Nv
bnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxi
YWNrKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNiKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlIHsgbV9jb250ZXh0LT5mb3JjZUxv
c3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6UmVhbExvc3RDb250ZXh0KTsgfQorICAg
IHZpcnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaygpIHt9Citwcml2YXRl
OgorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OworfTsKKworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikg
eyB9CisgICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgR0MzRGludCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1fc3lu
dGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUpCisgICAgICAgICAgICBtX2NvbnRleHQtPnByaW50R0xF
cnJvclRvQ29uc29sZShtZXNzYWdlKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJp
bmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7Cit9OworCitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKiBhdHRycykKK3sKKyAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlv
biBvZiBhIG5ldyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCisg
ICAgLy8gcGFydGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3Jl
IHRpbWVzIHZpYSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgorICAgIGlmICghZnJh
bWUtPmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xF
bmFibGVkKCkpKSB7CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQs
IGZhbHNlLCB0cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdM
IGNvbnRleHQuIikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29s
IGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxzZTsKKyAgICBEb2N1bWVudCYgdG9wRG9j
dW1lbnQgPSBkb2N1bWVudC50b3BEb2N1bWVudCgpOworICAgIFBhZ2UqIHBhZ2UgPSB0b3BEb2N1
bWVudC5wYWdlKCk7CisgICAgaWYgKHBhZ2UgJiYgIXRvcERvY3VtZW50LnVybCgpLmlzTG9jYWxG
aWxlKCkpIHsKKyAgICAgICAgV2ViR0xMb2FkUG9saWN5IHBvbGljeSA9IHBhZ2UtPm1haW5GcmFt
ZSgpLmxvYWRlcigpLmNsaWVudCgpLndlYkdMUG9saWN5Rm9yVVJMKHRvcERvY3VtZW50LnVybCgp
KTsKKworICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikgeworICAgICAg
ICAgICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBpcyB0byBibG9j
ayBXZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwb2xpY3kg
PT0gV2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExPRyhXZWJHTCwgIldlYkdM
IHBvbGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRlci4iKTsKKyAg
ICAgICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGF0
dHJzID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
KCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgaWYgKCFmcmFt
ZS0+c2V0dGluZ3MoKS5vcGVuR0xNdWx0aXNhbXBsaW5nRW5hYmxlZCgpKQorICAgICAgICAgICAg
YXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICB9CisKKyAgICBhdHRyaWJ1dGVzLm5v
RXh0ZW5zaW9ucyA9IHRydWU7CisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNl
OworICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB0cnVlOworCisgICAgaWYgKGZy
YW1lLT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVXZWJHTFJlbmRlcmluZygpKQorICAgICAgICBh
dHRyaWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5kZXJlciA9IHRydWU7CisKKyAgICBpZiAocGFnZSkK
KyAgICAgICAgYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvID0gcGFnZS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKTsKKworICAgIGlmIChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7CisgICAgICAg
IExPRyhXZWJHTCwgIkNyZWF0ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQg
d2lsbCByZXF1aXJlIGEgcG9saWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcg
V2ViR0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOworICAgICAgICByZW5k
ZXJpbmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuIHJlbmRlcmlu
Z0NvbnRleHQ7CisgICAgfQorCisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50
LnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdp
bmRvdykpOworCisgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkgeworICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxz
ZSwgdHJ1ZSwgIkNvdWxkIG5vdCBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0g
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfRVhUX2RlYnVnX21hcmtlciIpKQorICAgICAgICBleHRlbnNpb25zLT5wdXNoR3JvdXBNYXJr
ZXJFWFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOworICAgIHJlbmRlcmluZ0NvbnRl
eHQtPnN1c3BlbmRJZk5lZWRlZCgpOworCisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Cit9
CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52
YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXMpCisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKKyAg
ICAsIEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFzLT5kb2N1bWVudCgpKQorICAgICwgbV9j
b250ZXh0KDApCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKKyAgICAsIG1fZGlzcGF0Y2hDb250
ZXh0TG9zdEV2ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNo
Q29udGV4dExvc3RFdmVudCkKKyAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCisgICAgLCBt
X3Jlc3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3Jl
Q29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQorICAgICwgbV9jb250ZXh0
TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0
KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRoZXNpemVkRXJy
b3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCht
YXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb24odHJ1ZSkKKyAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkK
K3sKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRN
TENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCwKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVz
KQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3Rp
dmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dChj
b250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4
dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENv
bnRleHRMb3N0RXZlbnQpCisgICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQorICAgICwgbV9y
ZXN0b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNv
bnRleHQpCisgICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoNCkKKyAgICAsIG1fY29udGV4dExv
c3QoZmFsc2UpCisgICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkK
KyAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICwgbV9zeW50aGVzaXplZEVycm9y
c1RvQ29uc29sZSh0cnVlKQorICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4
R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQorICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKGZhbHNlKQorICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQor
eworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250
ZXh0R3JvdXA6OmNyZWF0ZSgpOworICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMp
OworCisgICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0RGltc1sxXSA9IDA7
CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworCisgICAgc2V0dXBGbGFncygpOwor
ICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0
KTsKKyAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0g
ZmFsc2U7CisgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7CisgICAgbV9wYWNrQWxpZ25tZW50
ID0gNDsKKyAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7CisgICAgbV91bnBhY2tGbGlwWSA9IGZh
bHNlOworICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOworICAgIG1fdW5wYWNr
Q29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxU
X1dFQkdMOworICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7CisgICAgbV9jdXJyZW50UHJvZ3Jh
bSA9IDA7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgIG1fcmVuZGVyYnVmZmVy
QmluZGluZyA9IDA7CisgICAgbV9kZXB0aE1hc2sgPSB0cnVlOworICAgIG1fc3RlbmNpbEVuYWJs
ZWQgPSBmYWxzZTsKKyAgICBtX3N0ZW5jaWxNYXNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5j
aWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7CisgICAgbV9zdGVuY2lsRnVuY1JlZiA9IDA7CisgICAg
bV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZG
RkZGRjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAweEZGRkZGRkZGOworICAgIG1fbGF5
ZXJDbGVhcmVkID0gZmFsc2U7CisgICAgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBt
YXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7CisgICAgCisgICAgbV9jbGVhckNvbG9yWzBdID0g
bV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsK
KyAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgbV9jbGVhckRlcHRoID0gMTsKKyAg
ICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9jb2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sx
XSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOworCisgICAgR0MzRGlu
dCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fdGV4dHVyZVVuaXRzLmNs
ZWFyKCk7CisgICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMpOworCisgICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZu
dW1WZXJ0ZXhBdHRyaWJzKTsKKyAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRy
aWJzOworICAgIAorICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1
cmVTaXplKTsKKyAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxl
dmVsQ291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhD
dWJlTWFwVGV4dHVyZVNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0
dXJlU2l6ZSk7CisgICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpj
b21wdXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4
dHVyZVNpemUpOworICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7CisgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAm
bV9tYXhSZW5kZXJidWZmZXJTaXplKTsKKworICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBF
WFRfZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4KKyAgICBtX21heERyYXdCdWZmZXJz
ID0gMDsKKyAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOworCisgICAgbV9iYWNrRHJhd0J1
ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOworICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJl
cXVpcmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKKyAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0g
ZmFsc2U7CisKKyAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9U
eXBlRGVmYXVsdCk7CisgICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9i
amVjdC5nZXQoKSk7CisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVy
dGV4QXJyYXlPYmplY3Q7CisgICAgCisgICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9t
YXhWZXJ0ZXhBdHRyaWJzKTsKKworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAg
ICAgY3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisgICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkpCisgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisKKyAgICBJbnRTaXplIGNh
bnZhc1NpemUgPSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoY2FudmFzU2l6ZSk7CisKKyAgICBtX2Nv
bnRleHQtPnJlc2hhcGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsK
KyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFz
U2l6ZS5oZWlnaHQoKSk7CisgICAgbV9jb250ZXh0LT5zY2lzc29yKDAsIDAsIGNhbnZhc1NpemUu
d2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBtX2NvbnRleHQtPnNldENvbnRl
eHRMb3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0
Q2FsbGJhY2s+KHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJh
Y2s+KHRoaXMpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3Mo
KQoreworICAgIEFTU0VSVChtX2NvbnRleHQpOworCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52
YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0Nv
bnNvbGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwor
CisgICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7
CisgICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fc3RyaWN0X2F0dHJpYnMi
KTsKKyAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlz
RW5hYmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOworICAgIGlmIChtX2lzR0xFUzJD
b21wbGlhbnQpIHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7CisgICAgICAg
IG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28iKTsKKyAgICAgICAg
bV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5p
c0VuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAgIH0KKyAgICBtX2lz
Um9idXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0Vu
YWJsZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3QKK3sKKyAgICBpZiAoUGFnZSog
cGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBhZ2Ut
PnNldHRpbmdzKCkucHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYgKCFtX2NvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQorICAgICAgICBtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+
V2ViR0xSZW5kZXJpbmdDb250ZXh0KCkKK3sKKyAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMg
dG8gV2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRoZSBsYXN0IHJlZmVyZW5jZQorICAgIC8v
IHRoZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxhc3QgY29udGV4dCBpcyByZW1vdmVkIGZy
b20gdGhlIGNvbnRleHQgZ3JvdXAuCisgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gbnVsbHB0cjsK
KyAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7CisgICAgbV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBu
dWxscHRyOworICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxscHRyOworICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nID0gbnVsbHB0cjsKKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSBudWxscHRy
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0
cjsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKKyAgICBtX2Js
YWNrVGV4dHVyZUN1YmVNYXAgPSBudWxscHRyOworCisgICAgaWYgKCFtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pIHsKKyAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworICAg
ICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgbV9jb250ZXh0R3JvdXAt
PnJlbW92ZUNvbnRleHQodGhpcyk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQ
b2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgZHJhd2luZyBi
dWZmZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3ll
ZAorICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KKyAgICBp
ZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKKwor
ICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENh
bGxiYWNrKG51bGxwdHIpOworICAgICAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxi
YWNrKG51bGxwdHIpOworICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICB9Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQoreworICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0
LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+bWFya0NvbnRlbnRzQ2hhbmdlZCgpOworCisgICAgbV9sYXll
ckNsZWFyZWQgPSBmYWxzZTsKKyAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5y
ZW5kZXJCb3goKTsKKyAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiByZW5k
ZXJCb3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgeworICAgICAgICBtX21hcmtlZENh
bnZhc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsK
KyAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKKyAgICAgICAgICAg
IG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICAgICAgY2FudmFzKCktPmRpZERy
YXcoRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZD
b21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9jb250ZXh0LT5s
YXllckNvbXBvc2l0ZWQoKSB8fCBtX2xheWVyQ2xlYXJlZAorICAgICAgICB8fCBtX2F0dHJpYnV0
ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyIHx8IChtYXNrICYmIG1fZnJhbWVidWZmZXJCaW5kaW5n
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJp
YnV0ZXM+IGNvbnRleHRBdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAg
IC8vIERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1
c2VyIGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KKyAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBt
YXNrICYmICFtX3NjaXNzb3JFbmFibGVkOworCisgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIGlmIChjb21iaW5lZENsZWFyICYmICht
YXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQorICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29s
b3JbMV0gOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0g
PyBtX2NsZWFyQ29sb3JbMl0gOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
b2xvck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKKyAgICBlbHNlCisgICAgICAgIG1f
Y29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFz
ayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CisgICAgaWYgKGNvbnRleHRBdHRy
aWJ1dGVzLT5kZXB0aCgpKSB7CisgICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0
aE1hc2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOworICAgICAgICBjbGVhck1h
c2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7CisgICAgICAgIG1fY29u
dGV4dC0+ZGVwdGhNYXNrKHRydWUpOworICAgIH0KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMt
PnN0ZW5jaWwoKSkgeworICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQorICAgICAgICAgICAgbV9jb250ZXh0
LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIGNs
ZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgICAg
ICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05U
LCAweEZGRkZGRkZGKTsKKyAgICB9CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVmZmVycyhjbGVhck1hc2spOworICAgIGVsc2Ug
eworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwor
ICAgICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7CisgICAgfQorCisgICAgcmVzdG9y
ZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2xh
eWVyQ2xlYXJlZCA9IHRydWU7CisKKyAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQoreworICAg
IC8vIFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgorICAgIGlmIChtX3Nj
aXNzb3JFbmFibGVkKQorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNvbG9y
WzBdLCBtX2NsZWFyQ29sb3JbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJD
b2xvclsyXSwgbV9jbGVhckNvbG9yWzNdKTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhtX2Nv
bG9yTWFza1swXSwgbV9jb2xvck1hc2tbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
b2xvck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgo
bV9jbGVhckRlcHRoKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNp
bCk7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVCwgbV9zdGVuY2lsTWFzayk7CisgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0
aE1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0xheWVyQ29tcG9z
aXRlZCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICAgICBjYW52YXMoKS0+
Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CisKKyAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlzIHdy
aXR0ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAorICAgIC8vIGhhcHBl
bmVkIGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21w
b3NpdG9yLgorICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFtX2F0dHJp
YnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7CisKKyAgICAgICAg
Y2FudmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7CisgICAgfSBlbHNlCisgICAgICAgIGNh
bnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OworCisgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKKyAgICBt
X21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIG1fY29udGV4dC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBtX2RyYXdpbmdCdWZm
ZXIuZ2V0KCkpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVm
ZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmJpbmQoKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2Ry
YXdpbmdCdWZmZXIuZ2V0KCkpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyht
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IGxldmVsIHdlIGRvbid0CisgICAgLy8ga25vdyBpZiB0aGUgdW5kZXJs
eWluZyBGQk8gdXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgorICAgIEdDM0RpbnQgbWF4
U2l6ZSA9IHN0ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7
CisgICAgLy8gTGltaXQgZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkg
ZXhoYXVzdGlvbi4KKyAgICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OworICAgIG1h
eFNpemUgPSBzdGQ6Om1pbihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7CisgICAgR0MzRGludCBt
YXhXaWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKKyAgICBH
QzNEaW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFd
KTsKKyAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7CisgICAgaGVpZ2h0ID0g
Y2xhbXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOworCisgICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsK
KyAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7Cisg
ICAgICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkpCisgICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0NoYW5n
ZWQpOworICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXdseSBj
cmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCisgICAgLy8gY2xlYXIgKGFu
ZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgorICAgIGlmIChtX2RyYXdpbmdC
dWZmZXIpIHsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpKTsKKyAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIH0gZWxzZQor
ICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisKKyAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclpl
cm8obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5n
ZXQoKSkpOworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgp
KSk7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8o
bV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKKwor
ICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgo
KTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdodCgp
IGNvbnN0Cit7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fZHJh
d2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOworCisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKK30KKwordW5zaWduZWQgaW50IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNo
b3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAg
ICAgcmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1aW50
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgcmV0dXJuIHNp
emVvZihHQzNEZmxvYXQpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUo
R0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0
dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQg
b2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2FjdGl2ZVRleHR1cmVV
bml0ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMDsKKyAgICBtX2NvbnRl
eHQtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEFjdGl2ZVRleHR1cmVVbml0KHRleHR1cmUpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNo
U2hhZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25BdHRhY2hl
ZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9u
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0
cmliTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRh
dGVMb2NhdGlvbkxlbmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1l
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiYmluZEF0dHJpYkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJH
TE9iamVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQoreworICAgIGRlbGV0ZWQgPSBmYWxzZTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG9iamVjdCkgeworICAgICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4
dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBub3Qg
ZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+b2JqZWN0KCk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcihHQzNE
ZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tP
YmplY3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgaWYgKGJ1
ZmZlciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFy
Z2V0KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0
aCBtdWx0aXBsZSB0YXJnZXRzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRh
cmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5k
QXJyYXlCdWZmZXIgPSBidWZmZXI7CisgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJp
bmRCdWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsK
KyAgICBpZiAoYnVmZmVyKQorICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNrT2Jq
ZWN0VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgaWYg
KHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRGcmFt
ZWJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKG9iamVjdE9y
WmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIEluc3RlYWQgb2YgYmlu
ZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOworICAgIGlmIChidWZmZXIpCisgICAg
ICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOworICAgIGFwcGx5U3RlbmNpbFRlc3Qo
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0Mz
RGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAg
ICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVm
ZmVyLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAg
ICByZW5kZXJCdWZmZXIgPSAwOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJl
bmRlckJ1ZmZlcjsKKyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmpl
Y3RPclplcm8ocmVuZGVyQnVmZmVyKSk7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICAgICAg
cmVuZGVyQnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSog
dGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFRleHR1
cmUiLCB0ZXh0dXJlLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVk
KQorICAgICAgICB0ZXh0dXJlID0gMDsKKyAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRU
YXJnZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmlu
ZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0
cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAwOwor
ICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKKyAgICAg
ICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZyA9
IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7CisKKyAgICAg
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4
dHVyZSkpOworCisgICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVApIHsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJl
VW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKKyAgICAgICAgbWF4TGV2ZWwg
PSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJl
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7CisgICAgaWYg
KHRleHR1cmUpCisgICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVsKTsK
KworICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCB0
aGUgVEVYVFVSRV9XUkFQX1IKKyAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFNUF9UT19FREdFIGZv
ciBjdWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKKyAgICAvLyBFUyAyLjAgZG9lc24n
dCBleHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbikgYW5kCisgICAg
Ly8gb3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBvdmVyIHRoZSBzZWFt
cyBpbiB0aGlzCisgICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgc3Vw
cG9ydGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAorICAgIC8vIHBsYXRmb3JtcyBpcyBmYWlybHkg
aW52b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJlIElECisgICAgLy8g
aW4gYWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxhaW50cywgc28gdGhl
IGxvZ2ljIGhhcworICAgIC8vIGJlZW4gcmVtb3ZlZC4KK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNE
ZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGUp
KQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24i
LCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9k
ZUFscGhhKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNl
cGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFj
dG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0Mz
RGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCit7Cisg
ICAgLy8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMg
UkdCLgorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRG
dW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQorICAgICAgICByZXR1cm47
CisgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxw
aGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1
c2FnZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc2l6ZSA8
IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKCFzaXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91
bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0
YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgImludmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwor
ICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0
cj4oc2l6ZSksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0
aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWls
ZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0
IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAgIH0K
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZm
ZXJEYXRhIiwgIm5vIGRhdGEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlz
RXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1
ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwg
ImludmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAg
IG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+
ZGF0YSgpLCB1c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVk
LiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBk
b2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlk
YXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKKyAg
ICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZGF0YSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1
ZmZlckRhdGEiLCAibm8gZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgh
aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICgh
YnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEi
LCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Cisg
ICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRh
LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rp
b24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRo
aW5rcyBpdCBkb2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIGlmICghYnVmZmVyKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwg
Im9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWRhdGEpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNj
ZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShz
dGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJT
dWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCkp
OworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7
CisgICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUg
YnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAg
ICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcg
bG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVm
ZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAg
ICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0Rp
bnRwdHI+KG9mZnNldCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0
IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBt
X2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOworICAgIGlm
IChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAg
IC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0
IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVy
LT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCitHQzNEZW51bSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgaWYgKHRhcmdldCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJT
dGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01Q
TEVURTsKKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7
CisgICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3RhdHVz
KCZyZWFzb24pOworICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0NPTVBMRVRFKSB7CisgICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIiLCAi
aW52YWxpZCBtYXNrIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciog
cmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4
dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
ICJjbGVhciIsIHJlYXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFjbGVh
cklmQ29tcG9zaXRlZChtYXNrKSkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKKyAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MzRGZs
b2F0IGEpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChzdGQ6OmlzbmFuKHIpKQorICAgICAgICByID0gMDsKKyAgICBpZiAoc3Rk
Ojppc25hbihnKSkKKyAgICAgICAgZyA9IDA7CisgICAgaWYgKHN0ZDo6aXNuYW4oYikpCisgICAg
ICAgIGIgPSAwOworICAgIGlmIChzdGQ6OmlzbmFuKGEpKQorICAgICAgICBhID0gMTsKKyAgICBt
X2NsZWFyQ29sb3JbMF0gPSByOworICAgIG1fY2xlYXJDb2xvclsxXSA9IGc7CisgICAgbV9jbGVh
ckNvbG9yWzJdID0gYjsKKyAgICBtX2NsZWFyQ29sb3JbM10gPSBhOworICAgIG1fY29udGV4dC0+
Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsKKyAg
ICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jbGVhclN0ZW5jaWwgPSBzOwor
ICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdD
M0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbG9yTWFza1swXSA9IHJl
ZDsKKyAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOworICAgIG1fY29sb3JNYXNrWzJdID0gYmx1
ZTsKKyAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNr
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVyKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclplcm8o
c2hhZGVyKSk7CisgICAgR0MzRGludCB2YWx1ZTsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2
KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMs
ICZ2YWx1ZSk7CisgICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2
YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVs
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJpbnZhbGlk
IGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJvcmRl
cikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9u
cygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJl
c3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGlu
dGVybmFsZm9ybWF0LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViR0xUZXh0dXJl
KiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRh
cmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkpIHsKKyAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6
aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwg
ImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCk7CisgICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgYm9yZGVyLCBkYXRhLT5ieXRl
TGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVF
cnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBjb21wcmVzc2Vk
VGV4SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vz
bid0IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCisgICAgICAgIHRleC0+bWFya0ludmFs
aWQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0ZXgtPnNl
dExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgIHRleC0+c2V0Q29tcHJlc3Nl
ZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVs
KCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoZm9ybWF0KSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICgh
dGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZm9ybWF0ICE9IHRleC0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1YkltYWdl
MkQiLCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lv
bnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YS0+Ynl0ZUxlbmd0aCgp
LCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYgKEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpICYgKEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVG
RkVSX0JJVCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBiZSBzZXQs
IG9ubHkgcmVuZGVyZWQgdG8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoImNv
cHlUZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRh
dGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29t
YmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9y
bWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29t
cGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhl
aWdodCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJh
bWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVz
b3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFn
ZTJEIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAgICAgIFNjb3BlZERyYXdp
bmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1f
ZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAg
ICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKKyAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRX
aWR0aCwgY2xpcHBlZEhlaWdodDsKKyAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdo
dCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQp
KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAg
ICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBj
bGlwcGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVk
SGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2Nv
bnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIH0KKyAgICAvLyBGSVhNRTogaWYgdGhlIGZy
YW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4
ZWN1dGVkLgorICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdl
dCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Cisg
ICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29w
eVRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5
VGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgLy8g
QmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cg
aGFwcGVucyBmaXJzdC4KKyAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsg
aGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+
Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVp
Z2h0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xl
IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAg
ICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhTdWJJbWFnZTJEIiwgaW50
ZXJuYWxmb3JtYXQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1RleEludGVybmFsRm9y
bWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZy
YW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAi
ZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsK
KyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
bkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlz
UmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5k
ZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Cisg
ICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
R0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CisgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lk
dGgsIGNsaXBwZWRIZWlnaHQ7CisgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQo
KSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkg
eworICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0
YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUgPSB0ZXgtPmdldFR5cGUo
dGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hh
cltdPiB6ZXJvOworICAgICAgICAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkgeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzaXplOworICAgICAgICAgICAgICAgIEdDM0RlbnVtIGVycm9y
ID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRo
LCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7CisgICAgICAgICAgICAgICAg
aWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICAgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJh
ZCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQg
Y2hhcltdPihzaXplKTsKKyAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWVtc2V0
KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jb250
ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY2xp
cHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgIFNj
b3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9m
cmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y29w
eVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBwZWRYIC0geCwgeW9m
ZnNldCArIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFNjb3BlZERy
YXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1
ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTEJ1
ZmZlcj4gbyA9IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0
KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZm
ZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRo
aXMpOworICAgIGFkZENvbnRleHRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisK
K1Bhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRl
eHR1cmUoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6
OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJu
IG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJH
TFByb2dyYW06OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Cisg
ICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2Vi
R0xSZW5kZXJidWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOworICAg
IGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1JlZlB0
cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0MzRGVu
dW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRl
ciIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhp
cywgdHlwZSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG9iamVjdC0+b2JqZWN0KCkpCisg
ICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiBjb250ZXh0IGhlcmUgYmVjYXVzZSB3ZSB3YW50
CisgICAgICAgIC8vIHRoaW5ncyBpbiB0aGlzIGNvbnRleHQgdW5ib3VuZC4KKyAgICAgICAgb2Jq
ZWN0LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIoV2ViR0xCdWZm
ZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChidWZmZXIpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCisgICAgICAgIG1f
Ym91bmRBcnJheUJ1ZmZlciA9IDA7CisKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnVu
YmluZEJ1ZmZlcihidWZmZXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgaWYg
KCFkZWxldGVPYmplY3QoZnJhbWVidWZmZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGZy
YW1lYnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CisgICAgICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nID0gMDsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7CisgICAgICAgICAg
ICAvLyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGlu
dGVybmFsIGZiby4KKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAg
ZGVsZXRlT2JqZWN0KHByb2dyYW0pOworICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFBy
b2dyYW0gdG8gMCBoZXJlIGJlY2F1c2UgdGhlIGRlbGV0aW9uIG9mIHRoZQorICAgIC8vIGN1cnJl
bnQgcHJvZ3JhbSBpcyBkZWxheWVkLgorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7Cisg
ICAgaWYgKCFkZWxldGVPYmplY3QocmVuZGVyYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChyZW5kZXJidWZmZXIgPT0gbV9yZW5kZXJidWZmZXJCaW5kaW5nKQorICAgICAgICBtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmcgPSAwOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAg
ICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFt
ZWJ1ZmZlcihyZW5kZXJidWZmZXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgZGVsZXRlT2JqZWN0KHNo
YWRlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKFdl
YkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNb
aV0udGV4dHVyZTJEQmluZGluZykKKyAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1
cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVV
bml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpCisgICAgICAgICAgICBtX3RleHR1cmVVbml0
c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVB
dHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5k
ZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aE1h
c2soR0MzRGJvb2xlYW4gZmxhZykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgbV9kZXB0aE1hc2sgPSBmbGFnOworICAgIG1fY29udGV4
dC0+ZGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVw
dGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoek5lYXIgPiB6
RmFyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXByb2dyYW0tPmRldGFjaFNoYWRlcihzaGFkZXIpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRldGFjaFNo
YWRlciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RP
clplcm8oc2hhZGVyKSk7CisgICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNE
KCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNEZW51bSBj
YXApCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBh
YmlsaXR5KCJkaXNhYmxlIiwgY2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjYXAgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgeworICAgICAgICBtX3N0ZW5jaWxFbmFi
bGVkID0gZmFsc2U7CisgICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
IHsKKyAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxl
ZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0
ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRl
KGluZGV4KTsKKyAgICBzdGF0ZS5lbmFibGVkID0gZmFsc2U7CisKKyAgICBpZiAoaW5kZXggPiAw
IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoaW5kZXgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0Mz
RGludHB0ciBvZmZzZXQpCit7CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlC
dWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigp
OworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAob2Zmc2V0IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgeworICAgICAgICAv
LyBGb3IgYW4gdW5zaWduZWQgaW50IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkg
NCBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCisgICAgICAgIGlmIChvZmZzZXQgJSA0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50
IG9mZnNldC4KKyAgICAgICAgb2Zmc2V0IC89IDQ7CisKKyAgICAgICAgR0MzRHNpemVpcHRyIG4g
PSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7CisgICAgICAgIGlmIChvZmZz
ZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
KSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0IG11c3Qg
YmUgZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVudCByZWFzb25zLgorICAgICAgICBpZiAob2Zm
c2V0ICUgMikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBNYWtlIHVv
ZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIG9mZnNldCAvPSAyOworCisgICAgICAg
IEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAyOwor
ICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5
QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CisgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4g
biAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJy
YXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWly
ZWQpCit7CisgICAgLy8gUGVyZm9ybXMgY29uc2VydmF0aXZlIHZhbGlkYXRpb24gYnkgY2FjaGlu
ZyBhIG1heGltdW0gaW5kZXggb2YKKyAgICAvLyB0aGUgZ2l2ZW4gdHlwZSBwZXIgZWxlbWVudCBh
cnJheSBidWZmZXIuIElmIGFsbCBvZiB0aGUgYm91bmQKKyAgICAvLyBhcnJheSBidWZmZXJzIGhh
dmUgZW5vdWdoIGVsZW1lbnRzIHRvIHNhdGlzZnkgdGhhdCBtYXhpbXVtCisgICAgLy8gaW5kZXgs
IHNraXBzIHRoZSBleHBlbnNpdmUgcGVyLWRyYXctY2FsbCBpdGVyYXRpb24gaW4KKyAgICAvLyB2
YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlLgorICAgIAorICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4g
ZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50
QXJyYXlCdWZmZXIoKTsKKworICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVtZW50QXJy
YXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICAvLyBUaGUgY2FzZSBjb3VudD09MCBpcyBhbHJl
YWR5IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxpZGF0ZUluZGV4QXJyYXlD
b25zZXJ2YXRpdmUuCisgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXItPmVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXIpOworCisgICAgaW50IG1heElu
ZGV4ID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRDYWNoZWRNYXhJbmRleCh0eXBlKTsKKyAgICBp
ZiAobWF4SW5kZXggPCAwKSB7CisgICAgICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gaW5kZXgg
aW4gdGhlIGVudGlyZSBidWZmZXIgZm9yIHRoZSBnaXZlbiB0eXBlIG9mIGluZGV4LgorICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURTogeworICAgICAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0MzRHVieXRlKj4oYnVmZmVyLT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChHQzNE
c2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAgIG1h
eEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlQ6IHsKKyAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihH
QzNEdXNob3J0KTsKKyAgICAgICAgICAgIGNvbnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2Fz
dDxjb25zdCBHQzNEdXNob3J0Kj4oYnVmZmVyLT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChH
QzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAg
IG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UOiB7CisgICAgICAgICAgICBpZiAoIW1fb2VzRWxlbWVudEluZGV4
VWludCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBudW1FbGVt
ZW50cyAvPSBzaXplb2YoR0MzRHVpbnQpOworICAgICAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAg
PSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAg
ICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAg
ICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+
KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxlbWVudEFy
cmF5QnVmZmVyLT5zZXRDYWNoZWRNYXhJbmRleCh0eXBlLCBtYXhJbmRleCk7CisgICAgfQorCisg
ICAgaWYgKG1heEluZGV4ID49IDApIHsKKyAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXF1aXJl
ZCBlbGVtZW50cyBpcyBvbmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtCisgICAgICAgIC8vIGluZGV4
IHRoYXQgd2lsbCBiZSBhY2Nlc3NlZC4KKyAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IG1h
eEluZGV4ICsgMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5
UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0
LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKK3sKKyAgICBBU1NFUlQoY291bnQgPj0g
MCAmJiBvZmZzZXQgPj0gMCk7CisgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gMDsKKyAgICAKKyAg
ICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisKKyAgICBpZiAoIWVsZW1lbnRB
cnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFjb3VudCkgewor
ICAgICAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBsb25nIHVvZmZzZXQgPSBv
ZmZzZXQ7CisgICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7CisKKyAgICBpZiAodHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNl
dCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVpbnQp
OworICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50
Kj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVv
ZmZzZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBs
YXN0SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICAr
K3A7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9m
ZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgIGNv
bnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oZWxlbWVu
dEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7Cisg
ICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgp
CisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUpIHsKKyAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0MzRHVieXRlKj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0
YSgpKSArIHVvZmZzZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBp
ZiAoKnAgPiBsYXN0SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAg
ICAgICAgICArK3A7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGVuIHNldCB0aGUgbGFz
dCBpbmRleCBpbiB0aGUgaW5kZXggYXJyYXkgYW5kIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KKyAg
ICBudW1FbGVtZW50c1JlcXVpcmVkID0gbGFzdEluZGV4ICsgMTsKKyAgICByZXR1cm4gbnVtRWxl
bWVudHNSZXF1aXJlZCA+IDA7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmlt
aXRpdmVDb3VudCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFByb2dyYW0pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRyaWIgYW5k
IGNoZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAgICAgaWYgKCFt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZhbGlkYXRl
QmluZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChl
bGVtZW50Q291bnQgPD0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKworICAgIC8vIExvb2sg
aW4gZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUgY3VycmVudCBwcm9ncmFtKS4K
KyAgICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNlOworICAgIGJvb2wgc2F3RW5h
YmxlZEF0dHJpYiA9IGZhbHNlOworICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMgPSBt
X2N1cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsgKytpKSB7CisgICAgICAgIGlu
dCBsb2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpKTsKKyAg
ICAgICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0PGludD4obV9tYXhWZXJ0ZXhB
dHRyaWJzKSkgeworICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShsb2MpOworICAgICAgICAgICAgaWYgKHN0YXRlLmVuYWJsZWQpIHsK
KyAgICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAvLyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVtZW50cyBjb21wdXRhdGlvbi4K
KyAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVudCwgd2Ugd2lsbCBvbmx5IHRv
dWNoIHRoZSBkYXRhIGZvciB0aGUKKyAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGFuZCBub3Ro
aW5nIGJleW9uZCBpdC4KKyAgICAgICAgICAgICAgICBpbnQgYnl0ZXNSZW1haW5pbmcgPSBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgoKSAtIHN0YXRlLm9m
ZnNldCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgICAg
ICAgICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKKyAgICAgICAgICAgICAgICBpZiAo
Ynl0ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KQorICAgICAgICAgICAgICAg
ICAgICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcgLSBzdGF0ZS5ieXRlc1BlckVs
ZW1lbnQpIC8gc3RhdGUuc3RyaWRlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc3RhbmNl
c1JlcXVpcmVkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGl2aXNvcikgeworICAg
ICAgICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNlaWwoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFzYXdOb25JbnN0YW5jZWRBdHRyaWIgJiYgc2F3RW5h
YmxlZEF0dHJpYikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9i
amVjdCB8fCAhb2JqZWN0LT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0
IG9yIG9iamVjdCBkZWxldGVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RzaXplaSBwcmltaXRpdmVDb3VudCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rp
b25OYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZpcnN0IDwgMCB8fCBj
b3VudCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChwcmltaXRpdmVDb3VudCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8
IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBo
YXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8
R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVj
a2VkQ291bnQ7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNr
ZWRQcmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CisgICAgICAgIGlmIChjaGVja2VkU3Vt
Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgp
IHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hl
Y2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
YXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZm
ZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VT
YWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFz
b24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUs
IEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKworICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3
QXJyYXlzIiwgbW9kZSwgZmlyc3QsIGNvdW50LCAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9
IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICB2ZXJ0ZXhBdHRy
aWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsK
KyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBs
ZXRlbmVzcygiZHJhd0FycmF5cyIsIHRydWUpOworCisgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlz
KG1vZGUsIGZpcnN0LCBjb3VudCk7CisKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhB
dHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAg
ICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOworICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2ln
bmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1l
LCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5j
aWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgICAg
IGlmIChtX29lc0VsZW1lbnRJbmRleFVpbnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAiY291bnQgb3Igb2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChwcmltaXRpdmVDb3Vu
dCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1F
TlRfQVJSQVlfQlVGRkVSIGJvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAg
ICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQorICAgICAgICBp
ZiAoIXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0Mz
RGludHB0cj4ob2Zmc2V0KSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAicmVxdWVzdCBv
dXQgb2YgYm91bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjb3VudCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92
ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOworICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQpOworICAg
ICAgICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZl
Q291bnQuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVt
cHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNl
cnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhu
dW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAg
ICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNoZWNrZWRDb3VudC51bnNhZmVH
ZXQoKSwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMp
IHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRp
dmVDb3VudC51bnNhZmVHZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0
dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiByZWFzb24g
PSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwg
IWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCByZWFzb24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworCisg
ICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVu
dHMoImRyYXdFbGVtZW50cyIsIG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRz
LCAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAg
IGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxp
ZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRy
PihvZmZzZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQg
PSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJh
d0VsZW1lbnRzIiwgdHJ1ZSk7CisKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBj
b3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CisKKyAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICBy
ZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNH
TEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3
RWxlbWVudHMiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwg
Y2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfVEVTVCkgeworICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgYXBwbHlTdGVuY2lsVGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChj
YXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgeworICAgICAgICBtX3NjaXNz
b3JFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7
CisgICAgfQorICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1f
bWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4
IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3RhdGUuZW5h
YmxlZCA9IHRydWU7CisKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29u
dGV4dC0+ZmluaXNoKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY29udGV4dC0+Zmx1c2goKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNo
bWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVm
ZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFy
YW1ldGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJp
bnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChidWZmZXIg
JiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhp
cyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRG9uJ3QgYWxsb3cg
dGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKKyAgICAv
LyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBk
ZWZhdWx0CisgICAgLy8gRkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZl
cik7CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1F
TlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVy
T2JqZWN0KTsKKyAgICB9CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRG
b3JCb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7CisgICAgYXBwbHlTdGVuY2ls
VGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0
dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0
YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVm
ZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChsZXZlbCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZh
bGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1
cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJh
bWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKKyAgICAvLyBpbXBsZW1lbnRhdGlv
bnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0CisgICAgLy8g
RkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFt
ZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKKyAgICBzd2l0Y2gg
KGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lM
X0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFy
Z2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJn
ZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9i
amVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0
dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9i
amVjdCwgbGV2ZWwpOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNo
bWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZnJvbnRGYWNl
KG1vZGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAo
R0MzRGVudW0gdGFyZ2V0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoImdlbmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxzZSk7CisgICAgaWYgKCF0ZXgpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxs
IHRoZSBzYW1lIHNpemUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3Nl
ZCB0ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAyOgorICAgIGlmICh0ZXgtPmlz
Q29tcHJlc3NlZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5l
cmF0ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1h
cCIsIHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIGdlbmVyYXRlTWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVy
IGlzIG5vdCBORUFSRVNUX01JUE1BUF9MSU5FQVIKKyAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhl
IGhhY2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCisjaWYgT1MoREFSV0lOKQorICAg
IGJvb2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKKyAgICBpZiAodGV4LT5nZXRNaW5G
aWx0ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9M
SU5FQVIpOworICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7CisgICAgfQorI2Vu
ZGlmCisgICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOworI2lmIE9TKERBUldJ
TikKKyAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCisgICAgICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIs
IHRleC0+Z2V0TWluRmlsdGVyKCkpOworI2VuZGlmCisgICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExl
dmVsSW5mbygpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRBY3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
QWN0aXZlSW5mbyBpbmZvOworICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwg
aW5kZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVybiBXZWJHTEFjdGl2
ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKK30KKworUGFz
c1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZl
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBw
cm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQWN0aXZlSW5mbyBpbmZvOworICAgIGlm
ICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5k
ZXgsIGluZm8pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWlzR0xFUzJDb21w
bGlhbnQoKSkKKyAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0
aCgiWzBdIikpCisgICAgICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKKworICAgIExP
RyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwgaW5mby5u
YW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRl
KGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVj
dG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZVtdID0geworICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRDo6VkVSVEVYX1NIQURFUiwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUgorICAgIH07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihz
aGFkZXJUeXBlKSAvIHNpemVvZihHQzNEZW51bSk7ICsraSkgeworICAgICAgICBXZWJHTFNoYWRl
ciogc2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7Cisg
ICAgICAgIGlmIChzaGFkZXIpCisgICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFk
ZXIpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCisgICAgICAg
IHJldHVybiAtMTsKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxv
Y2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoIXZhbGlkYXRlU3Ry
aW5nKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm4gLTE7CisgICAg
aWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAo
IXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIs
ICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSks
IG5hbWUpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZm
ZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdl
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRl
ciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cisg
ICAgfQorCisgICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAm
JiBwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZm
ZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgfQorCisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgbV9j
b250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAg
IGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzIG9iamVjdCB0bworICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRh
dGluZyBhbnkgY2FjaGVkIHZlcnNpb24uCisKKyAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9y
Y2UgcmVxdWVzdGVkIHZhbHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAorICAgIC8vIGFuZCBzdGVu
Y2lsLCByZWdhcmRsZXNzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCisgICAg
Ly8gR3JhcGhpY3NDb250ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KKyAgICBSZWZQdHI8V2ViR0xD
b250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNy
ZWF0ZShtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOworICAgIGlmICghbV9hdHRy
aWJ1dGVzLmRlcHRoKQorICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7CisgICAg
aWYgKCFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNp
bChmYWxzZSk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBUaGUgRHJh
d2luZ0J1ZmZlciBvYnRhaW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6
OmdldENvbnRleHRBdHRyaWJ1dGVzKCksCisgICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3du
IGRldGVybWluYXRpb24gb2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KKyAg
ICAgICAgYXR0cmlidXRlcy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1w
bGUoKSk7CisgICAgfQorICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKK30KKworR0Mz
RGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1faXNQ
ZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpOT19FUlJPUjsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOworfQorCitXZWJH
TEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRf
YmxlbmRfbWlubWF4IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpIHsKKyAgICAgICAgaWYgKCFtX2V4dEJsZW5k
TWluTWF4KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJl
RW5hYmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIpOworICAgICAgICAgICAgbV9leHRCbGVuZE1p
bk1heCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOworICAgIH0KKyAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKKyAgICAgICAgJiYgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7CisgICAgICAgIGlm
ICghbV9leHRzUkdCKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsKKyAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0
ZDo6bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG1fZXh0c1JHQi5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJFWFRfZnJhZ19kZXB0aCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgeworICAgICAgICBpZiAoIW1fZXh0RnJh
Z0RlcHRoKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJl
RW5hYmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKKyAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRo
ID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKKyAgICAgICAgJiYgKG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJl
X2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3No
YWRlcl90ZXh0dXJlX2xvZCIpKSkgeworICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxP
RCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIG1fZXh0U2hhZGVy
VGV4dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsK
KyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgewor
ICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgeworICAg
ICAgICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyIpOworICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjpt
YWtlX3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOworICAgIH0KKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKKyAgICAgICAg
JiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVy
ZV9mbG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9FU1RleHR1cmVGbG9hdD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1f
b2VzVGV4dHVyZUZsb2F0LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikp
IHsKKyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgeworICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJl
X2Zsb2F0X2xpbmVhciIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOworICAgIH0KKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQor
ICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190
ZXh0dXJlX2hhbGZfZmxvYXQiKSkgeworICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9h
dCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsK
KyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgeworICAgICAgICBp
ZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXRfbGluZWFyIik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7Cisg
ICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9v
YmplY3QiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKKyAgICAgICAgaWYgKCFtX29lc1ZlcnRl
eEFycmF5T2JqZWN0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAgICAgICAg
IG1fb2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5
T2JqZWN0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJh
eU9iamVjdC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJP
RVNfZWxlbWVudF9pbmRleF91aW50IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKKyAgICAgICAg
aWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7
CisgICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9F
U0VsZW1lbnRJbmRleFVpbnQ+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29l
c0VsZW1lbnRJbmRleFVpbnQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsTG9z
ZUNvbnRleHQpCisgICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VD
b250ZXh0LmdldCgpOworICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQorICAgICAgICAmJiBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVBVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRo
aXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOwor
ICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29t
cHJlc3NlZF90ZXh0dXJlX3B2cnRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNz
ZWRUZXh0dXJlUFZSVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJU
QyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsK
KyAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOworICAg
IH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4
dHVyZV9zM3RjIikKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBv
cnRlZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMp
CisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3Vu
aXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7CisgICAgICAgIHJldHVybiBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQorICAgICAgICAmJiBXZWJH
TERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7CisgICAgICAg
IGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsK
KyAgICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdM
RGVwdGhUZXh0dXJlPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV93ZWJnbERl
cHRoVGV4dHVyZS5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKKyAgICAg
ICAgaWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAg
ICAgICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1
ZmZlcnM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZl
cnMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVf
aW5zdGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhp
cykpIHsKKyAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyIpOworICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0
ZDo6bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOworICAgIH0KKyAgICBp
ZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7CisgICAgICAgICAg
ICBpZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgICAgICBtX3dlYmds
RGVidWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlcklu
Zm8+KHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5n
ZXQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldF
QkdMX2RlYnVnX3NoYWRlcnMiKQorICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgewor
ICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQorICAgICAgICAgICAgICAgIG1f
d2ViZ2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0
aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIp
OworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorCisgICAgV2ViR0xTaGFy
ZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2Jq
ZWN0KGF0dGFjaG1lbnQpOworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmIChwbmFtZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkK
KyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUp
OworICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0gaW4gdGhp
cyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCisgICAgICAgIC8vIHNwZWNpZmllcyBJTlZBTElEX09Q
RVJBVElPTi4KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlk
IHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9
CisKKyAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBvYmplY3QtPmlzUmVuZGVyYnVm
ZmVyKCkpOworICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7CisgICAgICAgIHN3aXRjaCAo
cG5hbWUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4ocmVpbnRlcnByZXRfY2FzdDxX
ZWJHTFRleHR1cmUqPihvYmplY3QpKSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZB
Q0U6CisgICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NP
TE9SX0VOQ09ESU5HX0VYVDogeworICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
IGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAocG5hbWUpIHsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUik7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7CisgICAgICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogeworICAgICAgICAg
ICAgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJidWZmZXIqPihvYmplY3QpOworICAgICAgICAgICAgR0MzRGVudW0gcmVuZGVyQnVm
ZmVyRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAg
ICAgQVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUICYm
IHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKTsKKyAg
ICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9B
TFBIQThfRVhUKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRXh0ZW5zaW9u
czNEOjpTUkdCX0VYVCk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FQVIpOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY29uc3QgaW50
IGludFplcm8gPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVf
V0lEVEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIo
cG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoKKyAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0
cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQ6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKKyAgICAgICAgcmV0
dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RT
VF9SR0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6CisgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
X1NSQ19BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgorICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJMVUVfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6CisgICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldEJv
b2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
VWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1f
Y29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNVTExfRkFDRToKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgorICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50UHJvZ3JhbSkpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oaW50WmVybyk7CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgorICAgICAg
ICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0ZVTkM6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6CisgICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklU
RU1BU0s6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQ
dHI8V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCkpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5E
SU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVF9GQUNFOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgor
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Cisg
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhf
QVRUUklCUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVM6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRT
OgorICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8K
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZB
Q1RPUjoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAgICAgICByZXR1cm4g
Z2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9MWUdPTl9PRkZTRVRfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6CisgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NS
ZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKFN0cmluZygiV2ViS2l0IFdlYkdMIikpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRV9CVUZGRVJTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgorICAg
ICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgorICAgICAgICByZXR1cm4gZ2V0Rmxv
YXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0
U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIiki
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKKyAgICAg
ICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFD
S19QQVNTX0RFUFRIX1BBU1M6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6CisgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6
CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVu
Y2lsKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgorICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BB
U1NfREVQVEhfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFT
UzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9U
RVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgorICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZykpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgorICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhTdHJpbmcoIldlYktpdCIpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJT
SU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRl
eHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xJ
bnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5U
X1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMK
KyAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKKyAgICAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9E
RVJJVkFUSVZFX0hJTlRfT0VTKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6
VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6CisgICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJl
ckluZm8pCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3Ry
aW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJs
ZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgorICAgICAgICBpZiAobV93ZWJn
bERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2Nv
bnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKSk7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJh
bWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5m
byBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QKKyAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKKyAgICAg
ICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7CisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxl
ZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljCisgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykK
KyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6
Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBl
bmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBC
RUdJTgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQorICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxl
ZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJz
KQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1
ZmZlcnMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKKyAgICAgICAgICAgICYm
IHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAorICAgICAgICAgICAgJiYg
cG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBf
RVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKKyAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUg
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5n
ZXREcmF3QnVmZmVyKHBuYW1lKTsKKyAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1
ZmZlcgorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKKyAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgICAgICB9CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3Jh
bVBhcmFtZXRlciIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisK
KyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQoKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkFMSURBVEVfU1RBVFVTOgorICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RP
clplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TElOS19TVEFUVVM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0
TGlua1N0YXR1cygpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFE
RVJTOgorICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3Jh
bSksIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6CisgICAgICAgIG1fY29udGV4dC0+
Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5h
bWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworU3RyaW5nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkp
CisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQt
PmdldFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSkpOworfQorCitXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAi
aW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
KyAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVu
ZGVyYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9
CisKKyAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCisgICAgICAgICYmICFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkKCkpOworICAgICAgICBpbnQgdmFsdWUgPSAwOworICAgICAgICBzd2l0Y2ggKHBu
YW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURU
SDoKKyAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmlu
ZGluZy0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgorICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CisgICAgICAgICAgICB2YWx1
ZSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6CisgICAgICAgICAgICB2YWx1ZSA9IDI0OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9TVEVOQ0lMX1NJWkU6CisgICAgICAgICAgICB2YWx1ZSA9IDg7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVS
TkFMX0ZPUk1BVDoKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwor
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIH0KKworICAgIEdDM0RpbnQgdmFsdWUgPSAw
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfV0lEVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
X0hFSUdIVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJ
WkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgorICAgICAgICBt
X2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgp
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
K30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1l
dGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRl
cikpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBHQzNEaW50IHZhbHVlID0g
MDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVM
RVRFX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRl
ZCgpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKKyAgICAg
ICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2
YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFs
dWUpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKKyAgICAgICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pih2YWx1ZSkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAg
fQorfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xv
ZyIsIHNoYWRlcikpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZW5zdXJlTm90TnVs
bChtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKK30K
KworUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0Mz
RGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfU0hBREVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QUdNRU5UX1NIQURFUjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRl
clByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUVESVVNX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNRURJVU1fSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hf
SU5UOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9u
Rm9ybWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKKyAgICBHQzNEaW50
IHByZWNpc2lvbiA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQo
c2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOworICAgIHJldHVy
biBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwg
cHJlY2lzaW9uKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hh
ZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuICIiOworICAgIHJldHVybiBlbnN1
cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQoreworICAgIFZlY3Rv
cjxTdHJpbmc+IHJlc3VsdDsKKworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24p
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIkVYVF9ibGVuZF9taW5tYXgiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJF
WFRfc1JHQiIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX0VYVF9mcmFnX2RlcHRoIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9mcmFnX2Rl
cHRoIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
T0VTX3RleHR1cmVfZmxvYXQiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVf
ZmxvYXQiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VT
X3RleHR1cmVfZmxvYXRfbGluZWFyIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7CisgICAgaWYgKG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKQorICAg
ICAgICByZXN1bHQuYXBwZW5kKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgaWYgKG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9FWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpOworICAgIGlmIChtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOworICAgIHJl
c3VsdC5hcHBlbmQoIldFQkdMX2xvc2VfY29udGV4dCIpOworICAgIGlmIChXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldF
QktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIik7CisgICAgaWYgKFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAgICByZXN1bHQuYXBwZW5k
KCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7CisgICAgaWYgKFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7CisgICAgaWYgKFdlYkdMRGVw
dGhUZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTsKKyAgICBpZiAoc3VwcG9ydHNEcmF3QnVm
ZmVycygpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTsKKyAg
ICBpZiAoQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOworCisgICAgaWYgKGFsbG93UHJp
dmlsZWdlZEV4dGVuc2lvbnMoKSkgeworICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdldFRleFBhcmFtZXRlciIs
IHRhcmdldCwgZmFsc2UpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9XUkFQX1Q6CisgICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0
LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVf
TUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAg
ICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFs
dWUpKTsKKyAgICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOworICAgIGlmICghdW5pZm9ybUxvY2F0aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+
cHJvZ3JhbSgpICE9IHByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybSIsICJubyB1bmlmb3Jt
bG9jYXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICBHQzNEaW50IGxvY2F0aW9uID0gdW5pZm9ybUxv
Y2F0aW9uLT5sb2NhdGlvbigpOworCisgICAgR0MzRGVudW0gYmFzZVR5cGU7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoOworICAgIHN3aXRjaCAodW5pZm9ybUxvY2F0aW9uLT50eXBlKCkpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpCT09MOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzI6CisgICAgICAgIGJhc2VUeXBlID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMzoKKyAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gMzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUM0OgorICAg
ICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAgICAgICBsZW5ndGgg
PSA0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6Cisg
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICAgICAgbGVuZ3Ro
ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UX1ZF
QzI6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICAgICAg
bGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAg
ICAgICAgbGVuZ3RoID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UX1ZFQzQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklO
VDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzQ6CisgICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA0
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQy
OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAg
bGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVRfTUFUMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7
CisgICAgICAgIGxlbmd0aCA9IDk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUX01BVDQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSAxNjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0NVQkU6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OklOVDsKKyAgICAgICAgbGVuZ3RoID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgLy8gQ2FuJ3QgaGFuZGxlIHRoaXMgdHlwZQorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5o
YW5kbGVkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAg
ICBzd2l0Y2ggKGJhc2VUeXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6
IHsKKyAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzE2XSA9IHswfTsKKyAgICAgICAgaWYgKG1faXNS
b2J1c3RuZXNzRVhUU3VwcG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmdldG5Vbmlmb3JtZnZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwg
MTYgKiBzaXplb2YoR0MzRGZsb2F0KSwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9u
LCB2YWx1ZSk7CisgICAgICAgIGlmIChsZW5ndGggPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8odmFsdWVbMF0pOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0
MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKKyAgICB9CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UOiB7CisgICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CisgICAg
ICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3RoID09IDEpCisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworICAgIH0KKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOiB7CisgICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7
MH07CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3RoID4gMSkgewor
ICAgICAgICAgICAgYm9vbCBib29sVmFsdWVbMTZdID0gezB9OworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKQorICAgICAgICAgICAgICAgIGJvb2xWYWx1
ZVtqXSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2pdKTsKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oYm9vbFZhbHVlLCBsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbMF0pKTsKKyAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICAvLyBJZiB3
ZSBnZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRlbHkgY29t
cGxleCBsb2dpYyBhYm92ZQorICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7CisgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOworfQorCitQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9u
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRV
bmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KCF2YWxpZGF0ZVN0cmluZygiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7
CisgICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBHQzNEaW50IGFjdGl2ZVVuaWZvcm1zID0gMDsKKyAgICBtX2NvbnRleHQtPmdldE5v
bkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNz
Q29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7CisgICAgZm9yIChH
QzNEaW50IGkgPSAwOyBpIDwgYWN0aXZlVW5pZm9ybXM7IGkrKykgeworICAgICAgICBBY3RpdmVJ
bmZvIGluZm87CisgICAgICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgaSwgaW5mbykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgLy8gU3RyaXAgIlswXSIgZnJvbSB0aGUgbmFtZSBpZiBpdCdzIGFuIGFycmF5Lgor
ICAgICAgICBpZiAoaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKKyAgICAgICAgICAgIGluZm8u
bmFtZSA9IGluZm8ubmFtZS5sZWZ0KGluZm8ubmFtZS5sZW5ndGgoKSAtIDMpOworICAgICAgICAv
LyBJZiBpdCdzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGVsZW1l
bnQsIGFwcGVuZGluZyAiW2luZGV4XSIgdG8gdGhlIG5hbWUuCisgICAgICAgIGZvciAoR0MzRGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgaW5mby5zaXplOyArK2luZGV4KSB7CisgICAgICAgICAgICBT
dHJpbmcgdW5pZm9ybU5hbWUgPSBpbmZvLm5hbWUgKyAiWyIgKyBTdHJpbmc6Om51bWJlcihpbmRl
eCkgKyAiXSI7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09IHVuaWZvcm1OYW1lIHx8IG5hbWUg
PT0gaW5mby5uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTFVuaWZvcm1Mb2NhdGlv
bjo6Y3JlYXRlKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbiwgaW5mby50eXBlKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRW
ZXJ0ZXhBdHRyaWIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKKyAgICB9CisKKyAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgIGlmIChtX2FuZ2xlSW5zdGFuY2VkQXJy
YXlzICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0RJ
VklTT1JfQU5HTEUpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuZGl2aXNvcik7
CisKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKCghaXNHTEVTMkNv
bXBsaWFudCgpICYmICFpbmRleCAmJiBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRl
eEF0dHJpYlN0YXRlKDApLmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKQor
ICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmcKKyAgICAgICAgICAgIHx8ICFzdGF0
ZS5idWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PihzdGF0ZS5idWZmZXJCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0
YXRlLmVuYWJsZWQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJf
QVJSQVlfTk9STUFMSVpFRDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5ub3Jt
YWxpemVkKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZ
X1NJWkU6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuc2l6ZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUub3JpZ2luYWxTdHJpZGUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhzdGF0ZS50eXBlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpD
VVJSRU5UX1ZFUlRFWF9BVFRSSUI6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQz
MkFycmF5OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF0udmFsdWUsIDQpKTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmliIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworbG9uZyBsb25n
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9jb250ZXh0
LT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihyZXN1bHQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgaXNWYWxpZCA9
IGZhbHNlOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJ
VkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworICAgICAgICBpZiAobV9v
ZXNTdGFuZGFyZERlcml2YXRpdmVzKQorICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIWlzVmFsaWQpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmhpbnQo
dGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c0J1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyIHx8IGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWJ1ZmZl
ci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBt
X2NvbnRleHQtPmlzQnVmZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
dGV4dExvc3Q7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uICYmICFt
X2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiQ29u
dGV4dCBpcyBiZWluZyB1c2VkLiBBdHRlbXB0IHRvIHJlc29sdmUgdGhlIHBvbGljeS4iKTsKKyAg
ICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCkudG9wRG9jdW1l
bnQoKTsKKyAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKTsKKyAgICAgICAgaWYg
KHBhZ2UgJiYgIWRvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkpCisgICAgICAgICAgICBwYWdl
LT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5yZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwo
ZG9jdW1lbnQudXJsKCkpOworICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5IGRv
IGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdCBmcm9tIHJlc29sdXRpb24uIEEgbW9yZQorICAgICAg
ICAvLyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCB0cnkgdG8gY29uc3RydWN0IGEgcmVh
bCBjb250ZXh0LCBldGMgYW5kIHByb2NlZWQKKyAgICAgICAgLy8gd2l0aCBub3JtYWwgb3BlcmF0
aW9uLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI5MTIyCisgICAgICAgIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxl
ZChHQzNEZW51bSBjYXApCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVDYXBhYmlsaXR5KCJpc0VuYWJsZWQiLCBjYXApKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpCisgICAgICAg
IHJldHVybiBtX3N0ZW5jaWxFbmFibGVkOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxl
ZChjYXApOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVi
dWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1
ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRnJhbWVidWZmZXIoZnJhbWVidWZmZXItPm9i
amVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVu
ZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlci0+aGFz
RXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2NvbnRl
eHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitHQzNEYm9v
bGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIp
Cit7CisgICAgaWYgKCFzaGFkZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlci0+b2Jq
ZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVy
ZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIXRleHR1cmUt
Pmhhc0V2ZXJCZWVuQm91bmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9j
b250ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5s
aW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1By
b2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImxpbmtQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBXZWJHTFNoYWRlciog
dmVydGV4U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlRFWF9TSEFERVIpOworICAgICAgICBXZWJHTFNoYWRlciogZnJhZ21lbnRTaGFkZXIg
PSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRf
U0hBREVSKTsKKyAgICAgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNW
YWxpZCgpIHx8ICFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzVmFsaWQoKSB8
fCAhbV9jb250ZXh0LT5wcmVjaXNpb25zTWF0Y2gob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciks
IG9iamVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpIHx8ICFtX2NvbnRleHQtPmNoZWNrVmFyeWlu
Z3NQYWNraW5nKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclplcm8oZnJhZ21l
bnRTaGFkZXIpKSkgeworICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NvbnRleHQt
PmxpbmtQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CisgICAgcHJvZ3JhbS0+aW5jcmVh
c2VMaW5rQ291bnQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVsU3Rv
cmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICAgICAg
bV91bnBhY2tGbGlwWSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAgICAgIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgorICAg
ICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJH
TCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICAgICAgICAgIG1fdW5w
YWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFyYW0pOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
Zm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5UOgorICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAyIHx8IHBhcmFt
ID09IDQgfHwgcGFyYW0gPT0gOCkgeworICAgICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNz
Q29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKKyAgICAgICAgICAgICAgICBtX3BhY2tBbGlnbm1l
bnQgPSBwYXJhbTsKKyAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFD
S19BTElHTk1FTlQ6CisgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQgPSBwYXJhbTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9y
IGFsaWdubWVudCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb250ZXh0LT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgLy8gRHVl
IHRvIFdlYkdMJ3Mgc2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9zc2libGUg
dG8KKyAgICAvLyB0YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCisgICAgQVNT
RVJUKGNhbnZhcygpLT5vcmlnaW5DbGVhbigpKTsKKyAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJh
bWV0ZXJzLgorICAgIGlmICghcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVscyIsICJubyBkZXN0aW5h
dGlvbiBBcnJheUJ1ZmZlclZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzd2l0
Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZh
bGlkIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVs
cyIsICJmb3JtYXQgbm90IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhl
bCB0eXBlLgorICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1
ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJj
ZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsIHJl
YXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNp
emUsIHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCisgICAgdW5z
aWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZCA9IDA7CisgICAgdW5zaWduZWQgaW50IHBhZGRp
bmcgPSAwOworICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsKKyAgICAgICAg
R0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1h
dCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVp
cmVkLCAmcGFkZGluZyk7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAicmVhZFBp
eGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWly
ZWQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBsYXJn
ZSBlbm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgdm9pZCogZGF0YSA9IHBp
eGVscy0+YmFzZUFkZHJlc3MoKTsKKworICAgIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZl
ckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGlu
Zy5nZXQoKSk7CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZWFkblBpeGVsc0VYVCh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBkYXRhKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgfQorCisjaWYgT1MoREFSV0lO
KQorICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgLy8gd2UgaGF2ZW4ndCBjb21w
dXRlZCBwYWRkaW5nCisgICAgICAgIG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMo
Zm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVz
UmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3
aGVuIEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xFUyBkcml2ZXIgYnVnCisgICAgLy8g
b24gUUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNob3Vs
ZAorICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgorICAgIGlmICghbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBo
YSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIqPihkYXRhKTsKKyAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXkgPSAwOyBpeSA8
IGhlaWdodDsgKytpeSkgeworICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXggPSAwOyBpeCA8
IHdpZHRoOyArK2l4KSB7CisgICAgICAgICAgICAgICAgcGl4ZWxzWzNdID0gMjU1OworICAgICAg
ICAgICAgICAgIHBpeGVscyArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGl4ZWxz
ICs9IHBhZGRpbmc7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdl
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFt
X3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVy
YnVmZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgc3dp
dGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4Ogor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUOgorICAgICAgICBpZiAoaW50
ZXJuYWxmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUICYmICFtX2V4dHNS
R0IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3Jt
YXQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2NvbnRleHQt
PnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50
ZXJuYWxmb3JtYXQpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQo
dHJ1ZSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
U1RFTkNJTDoKKyAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMz
RDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAg
bV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBt
X3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQo
KSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50
ZXJuYWxmb3JtYXQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVm
ZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZl
cnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTaXplKCJz
Y2lzc29yIiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQt
PnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgic2hh
ZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIFN0cmluZyBzdHJpbmdX
aXRob3V0Q29tbWVudHMgPSBTdHJpcENvbW1lbnRzKHN0cmluZykucmVzdWx0KCk7CisgICAgaWYg
KCF2YWxpZGF0ZVN0cmluZygic2hhZGVyU291cmNlIiwgc3RyaW5nV2l0aG91dENvbW1lbnRzKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHNoYWRlci0+c2V0U291cmNlKHN0cmluZyk7CisgICAgbV9j
b250ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZ1dpdGhvdXRD
b21tZW50cyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuYyhH
QzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0
ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQorICAgICAgICByZXR1cm47CisgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsK
KyAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CisgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNr
ID0gbWFzazsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoZmFjZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZST05UX0FORF9CQUNLOgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwor
ICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVu
Y01hc2sgPSBtYXNrOworICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKKyAgICAgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNr
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAg
ICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01h
c2tCYWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxG
dW5jU2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayhHQzNEdWludCBt
YXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1h
c2s7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVp
bnQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgc3dpdGNoIChmYWNlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJPTlRfQU5EX0JBQ0s6CisgICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOworICAgICAgICBt
X3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZST05UOgorICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9z
dGVuY2lsTWFza0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
c3RlbmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChm
YWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Rl
bmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZh
aWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3Jl
IGFueSBlcnJvcnMgcmV0dXJuZWQuCisgICAgZWMgPSAwOworICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Cisg
ICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBOb3RUZXhT
dWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodGV4KTsKKyAgICBBU1NFUlQoIWxl
dmVsIHx8ICFXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7CisgICAgaWYgKCFw
aXhlbHMpIHsKKyAgICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVtZW50YXRp
b24gY2xlYXJzIHRleHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9yZSB0cnVl
LgorICAgICAgICAvLyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFyZSB1c2lu
ZyBBTkdMRV9kZXB0aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcworICAgICAgICAvLyBj
YW4gbm90IGJlIGNsZWFyZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJlIGNsZWFyZWQgYnkg
YmluZGluZyB0byBhbiBmYm8gYW5kIGNhbGxpbmcKKyAgICAgICAgLy8gY2xlYXIuCisgICAgICAg
IGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYm9vbCBz
dWNjZWVkID0gbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAgICBpZiAoIXN1Y2NlZWQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkp
OworICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwor
ICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSB0ZXhJbWFnZTJE
IGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0
aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KKyAgICAgICAgICAgIHRleC0+bWFya0ludmFsaWQodGFy
Z2V0LCBsZXZlbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
dGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIHR5cGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2Uy
REltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsK
KyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VF
eHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBo
YSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0
ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdl
RXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNvbnN0
IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsK
KworICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOworICAgIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcg
JiYgIWZsaXBZKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2Ugewor
ICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERh
dGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdl
RXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1h
Z2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBu
ZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBp
ZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3Jl
aShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQp
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rp
b25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCkKK3sKKyAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBmdW5jdGlvblR5
cGUsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoZnVuY3Rpb25OYW1lLCB0YXJnZXQs
IHRydWUpOworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGZ1bmN0aW9uVHlwZSA9PSBOb3RUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgIGlmIChsZXZl
bCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZlclZpZXcs
IGZ1bmN0aW9uIHZhbGlkYXRlVGV4RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhlciB0byB2
YWxpZGF0ZSB0aGUgU2V0dGFibGVUZXhGb3JtYXQKKyAgICAgICAgLy8gYnkgY2hlY2tpbmcgaWYg
dGhlIEFycmF5QnVmZmVyVmlldyBpcyBudWxsIG9yIG5vdC4KKyAgICAgICAgaWYgKHNvdXJjZVR5
cGUgIT0gU291cmNlQXJyYXlCdWZmZXJWaWV3KSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRl
U2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdmFs
aWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9uTmFtZSwg
eG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8v
IEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93
IGhhcHBlbnMgZmlyc3QuCisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZz
ZXQgKyBoZWlnaHQgPCAwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVuc2lvbnMi
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeG9m
ZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNl
dCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmUtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdl
dCwgbGV2ZWwpICE9IHR5cGUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQg
Zm9ybWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRl
eEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzLCBOdWxsQWxsb3dlZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4
SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBw
aXhlbHMtPmJhc2VBZGRyZXNzKCkgOiAwOworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsK
KyAgICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYm
IChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAg
aWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBh
Y2tBbGlnbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1l
bnQgPSB0cnVlOworICAgIH0KKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlw
ZSwgZGF0YSwgZWMpOworICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdl
MkQsIFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVs
cy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGJvb2wgbmVlZENv
bnZlcnNpb24gPSB0cnVlOworICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5
cyBvZiBmb3JtYXQgUkdCQTguCisgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVz
dGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBG
bGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KKyAgICBpZiAoIW1fdW5w
YWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUs
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5l
ZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7
CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgZGV2aWNlU2NhbGVGYWN0b3IpCit7CisgICAgSW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQp
OworICAgIHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIEltYWdlQnVmZmVyKiBi
dWYgPSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFi
dWYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9P
Rl9NRU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBp
bWFnZS0+c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXpl
KTsKKyAgICBidWYtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdl
QnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdlMkQiLCBp
bWFnZSwgZWMpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9y
UmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJl
bmRlcmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAg
ICBpbWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0
KCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOworCisgICAgaWYgKCFpbWFn
ZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1h
Z2UyRCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIHRleEltYWdlMkRJ
bXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9y
UmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleElt
YWdlMkQiLCBjYW52YXMsIGVjKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90
VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1h
dCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4
dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUp
OworICAgIC8vIElmIHBvc3NpYmxlLCBjb3B5IGZyb20gdGhlIGNhbnZhcyBlbGVtZW50IGRpcmVj
dGx5IHRvIHRoZSB0ZXh0dXJlCisgICAgLy8gdmlhIHRoZSBHUFUsIHdpdGhvdXQgYSByZWFkLWJh
Y2sgdG8gc3lzdGVtIG1lbW9yeS4KKyAgICAvLworICAgIC8vIEZJWE1FOiByZXN0cmljdGlvbiBv
ZiAoUkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZVEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCisgICAg
Ly8gSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJl
IGZ1bGx5IGZ1bmN0aW9uYWwuCisgICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
ID09IHRhcmdldCAmJiB0ZXh0dXJlICYmIHR5cGUgPT0gdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQs
IGxldmVsKQorICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwg
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSAmJiB0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBj
YW52YXMtPmJ1ZmZlcigpOworICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxh
dGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5h
bGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5cGUpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gY2FudmFzLT5nZXRJbWFnZURhdGEoKTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAg
ICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgdGV4SW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5j
b3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklE
RU8pCitQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVU
b0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdT
dG9yZUNvcHksIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIEludFNpemUgc2l6ZSh2aWRlby0+dmlk
ZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9
IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKKyAgICBpZiAoIWJ1Zikg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01F
TU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOworICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUgdGV4
dHVyZSBjb3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgorICAgIHZpZGVvLT5wYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOworICAgIHJldHVybiBi
dWYtPmNvcHlJbWFnZShiYWNraW5nU3RvcmVDb3B5KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlk
ZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleEltYWdlMkQi
LCB2aWRlbywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBO
b3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdvIHRo
cm91Z2ggdGhlIGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3aXRob3V0
IGEgcmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KKyAgICAvLyBPdGhlcndp
c2UsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgU1cgcGF0aC4KKyAgICAvLyBGSVhN
RTogVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3JtYXQgc2hvdWQgYmUg
UkdCIG9yIFJHQkEsCisgICAgLy8gdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBhbmQgbGV2
ZWwgc2hvdWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBXZWJH
TFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwg
dGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0g
dGFyZ2V0ICYmIHRleHR1cmUKKyAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKKyAgICAgICAgJiYg
dHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAmJiAodGV4
dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgJiYg
IWxldmVsKSB7CisgICAgICAgIGlmICh2aWRlby0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGxldmVsLCB0eXBlLCBp
bnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkg
eworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgdHlw
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3Jt
YWwgcHVyZSBTVyBwYXRoLgorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9J
bWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBp
ZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBh
cmFtZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsK
KyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBh
cmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJFUEVBVCkKKyAgICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBF
QVQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0
ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKCFtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
YykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKGlzRmxvYXQpIHsKKyAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJmKHBuYW1lLCBwYXJh
bWYpOworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFy
YW1mKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBh
cmFtaSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBw
YXJhbWkpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFt
ZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKQor
eworICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBwYXJhbSwgMCwgdHJ1ZSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgdGV4UGFyYW1ldGVyKHRh
cmdldCwgcG5hbWUsIDAsIHBhcmFtLCBmYWxzZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBp
Z25vcmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIGVjID0gMDsKKyAgICBBU1NFUlQoIWlzQ29u
dGV4dExvc3QoKSk7CisgICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleFN1
YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNpemUoInRleFN1
YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSk7CisgICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFi
bGVUZXhGb3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQpKTsKKyAgICBXZWJHTFRleHR1cmUq
IHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOworICAgIGlmICghdGV4KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCgoeG9mZnNldCArIHdpZHRoKSA+PSAwKTsK
KyAgICBBU1NFUlQoKHlvZmZzZXQgKyBoZWlnaHQpID49IDApOworICAgIEFTU0VSVCh0ZXgtPmdl
dFdpZHRoKHRhcmdldCwgbGV2ZWwpID49ICh4b2Zmc2V0ICsgd2lkdGgpKTsKKyAgICBBU1NFUlQo
dGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkgPj0gKHlvZmZzZXQgKyBoZWlnaHQpKTsKKyAg
ICBBU1NFUlQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSA9PSBmb3JtYXQp
OworICAgIEFTU0VSVCh0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gdHlwZSk7CisgICAg
bV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VI
dG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGRhdGE7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFj
dG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFj
ZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOyAgCisgICAgaWYgKCFpbWFn
ZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJh
ZCBpbWFnZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJj
ZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFn
ZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0
YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7CisKKyAgICBib29sIG5lZWRDb252
ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3Ag
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKKyAgICAgICAg
bmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRl
eHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZs
aXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRo
KCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291
cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFk
IGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhT
dWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lk
dGgoKSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsICBuZWVkQ29udmVyc2lvbiA/IGRh
dGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1l
bnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVUZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscywgTnVsbE5vdEFsbG93ZWQpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRl
eEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZp
ZXcsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBl
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBw
aXhlbHMtPmJhc2VBZGRyZXNzKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOworICAg
IGJvb2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7CisgICAgaWYgKGRhdGEgJiYgKG1f
dW5wYWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgeworICAgICAgICBpZiAo
IW1fY29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0Fs
aWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wRGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7CisgICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9
IHRydWU7CisgICAgfQorICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IDEpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOworICAgIGlmIChjaGFu
Z2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUlt
YWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMt
PmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBib29sIG5lZWRDb252ZXJz
aW9uID0gdHJ1ZTsKKyAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2Yg
Zm9ybWF0IFJHQkE4LgorICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0
aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBv
ciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEp
CisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgMSk7CisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsIG5l
ZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7
CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFn
ZSwgZWMpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVu
ZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRl
cmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAgICBp
bWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCks
IGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOworCisgICAgaWYgKCFpbWFnZUZv
clJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2Uy
RCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBpbWFnZUZv
clJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXhTdWJJbWFn
ZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGlt
YWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
ZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRN
TENhbnZhc0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCBjYW52YXMsIGVjKQorICAgICAgICB8fCAh
dmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRN
TENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBj
YW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMt
PmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAgIHRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZURh
dGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJ
bWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlSFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykKKyAgICAgICAg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJj
ZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lk
dGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9m
ZnNldCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRl
b0ZyYW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVj
KTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4U3ViSW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQg
cHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlm
b3JtMWYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYt
Pmxlbmd0aCgpLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICgobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0NVQkUpICYmIHggPj0gKGludCltX3RleHR1cmVVbml0cy5zaXplKCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ1bmlmb3JtMWkiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB4KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBs
b2NhdGlvbiwgdiwgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlvbi0+dHlw
ZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHYtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2LT5kYXRh
KClbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7CisgICAg
ICAgICAgICAgICAgTE9HKFdlYkdMLCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4g
TG9jYXRpb24gdHlwZSA9ICUwNFguIiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRh
KClbaV0sIGxvY2F0aW9uLT50eXBlKCkpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZh
bGlkIHRleHR1cmUgdW5pdCIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUs
IDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVSX0NVQkUpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7ICsraSkgeworICAgICAgICAgICAgaWYgKCgo
R0MzRGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkp
KSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9j
YXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0y
ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHgsIHkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2
IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVu
aWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChs
b2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9y
bTJpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24o
KSwgeCwgeSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMml2
IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlm
b3JtMml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZs
b2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgMykpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVu
Z3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1
cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0
LT51bmlmb3JtM2kobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCBz
aXplLCAzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
bmlmb3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB4LCB5LCB6LCB3KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cygidW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCA0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAv
IDQsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyA0LCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2Nh
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0g
bV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZv
ciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29u
dGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwg
NCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlv
biwgdiwgc2l6ZSwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9y
bTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
InVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3Nl
LCB2LCBzaXplLCA0KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1h
dHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHRyYW5zcG9zZSwgdik7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYs
IDkpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDksIHRyYW5zcG9zZSwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gOSwgdHJh
bnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24s
IHRyYW5zcG9zZSwgdiwgMTYpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDE2LCB0cmFu
c3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1N
YXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHNpemUgLyAxNiwgdHJhbnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAo
IWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJ1c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRlZCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgcHJvZ3JhbSA9IDA7Cisg
ICAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
c2VQcm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKG1fY3VycmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBpZiAobV9j
dXJyZW50UHJvZ3JhbSkKKyAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQo
Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFt
OworICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsK
KyAgICAgICAgaWYgKHByb2dyYW0pCisgICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFjaGVkKCk7
CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJ2YWxpZGF0ZVByb2dyYW0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0IHYwKQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhB
dHRyaWIxZiIsIGluZGV4LCAxLCB2MCwgMC4wZiwgMC4wZiwgMS4wZik7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0
MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIs
IGluZGV4LCB2LCAxKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sK
KyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCBzaXpl
LCAxKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICB2ZXJ0ZXhB
dHRyaWJmSW1wbCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAsIHYxLCAwLjBmLCAxLjBm
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgi
dmVydGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplKQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2
IiwgaW5kZXgsIHYsIHNpemUsIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYx
LCBHQzNEZmxvYXQgdjIpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjNm
IiwgaW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYp
Cit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwg
Myk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4
QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgc2l6ZSwgMyk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYz
KQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZiIsIGluZGV4LCA0LCB2
MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhB
dHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCA0KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZl
cnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCBzaXplLCA0KTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQg
c2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0
cmlkZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZh
bGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQg
b2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc2l6ZSA8IDEgfHwg
c2l6ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUgfHwgb2Zmc2V0IDwgMCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIHNpemUsIHN0cmlkZSBvciBvZmZzZXQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVs
ZW1lbnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUs
IHR5cGUgYW5kIHN0cmlkZQorICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IHNpemVJbkJ5dGVz
KHR5cGUpOworICAgIGlmICghdHlwZVNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAi
aW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKChzdHJpZGUg
JSB0eXBlU2l6ZSkgfHwgKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkgJSB0eXBlU2l6
ZSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zmc2V0IG5v
dCB2YWxpZCBmb3IgdHlwZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RzaXpl
aSBieXRlc1BlckVsZW1lbnQgPSBzaXplICogdHlwZVNpemU7CisKKyAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVsZW1lbnQs
IHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4o
b2Zmc2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250
ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJj
b250ZXh0IGFscmVhZHkgbG9zdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9j
b250ZXh0R3JvdXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0
Q29udGV4dE1vZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICBtX2NvbnRleHRMb3N0TW9k
ZSA9IG1vZGU7CisKKyAgICBpZiAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpIHsKKyAgICAgICAg
Ly8gSW5mb3JtIHRoZSBlbWJlZGRlciB0aGF0IGEgbG9zdCBjb250ZXh0IHdhcyByZWNlaXZlZC4g
SW4gcmVzcG9uc2UsIHRoZSBlbWJlZGRlciBtaWdodAorICAgICAgICAvLyBkZWNpZGUgdG8gdGFr
ZSBhY3Rpb24gc3VjaCBhcyBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gdG8gdXNlIFdl
YkdMIGFnYWluLgorICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50
KCkuZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaWRMb3Nl
V2ViR0xDb250ZXh0KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCkpOworICAgIH0KKworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsK
KworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gTWFrZSBhYnNvbHV0ZWx5
IHN1cmUgd2UgZG8gbm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRlZCB0ZXh0dXJlIG9yIGZy
YW1lYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmco
MCk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOwor
ICAgIH0KKworICAgIC8vIFRoZXJlIGlzIG5vIGRpcmVjdCB3YXkgdG8gY2xlYXIgZXJyb3JzIGZy
b20gYSBHTCBpbXBsZW1lbnRhdGlvbiBhbmQKKyAgICAvLyBsb29waW5nIHVudGlsIGdldEVycm9y
KCkgYmVjb21lcyBOT19FUlJPUiBtaWdodCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGlmCisgICAg
Ly8gdGhlIGRyaXZlciBvciBjb250ZXh0IGltcGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4gU28sIGxv
b3AgYSByZWFzb25hYmx5CisgICAgLy8gbGFyZ2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFu
eSBleGlzdGluZyBlcnJvcnMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewor
ICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpO
T19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBDb25zb2xlRGlzcGxheVBy
ZWZlcmVuY2UgZGlzcGxheSA9IChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgPyBEaXNwbGF5SW5D
b25zb2xlOiBEb250RGlzcGxheUluQ29uc29sZTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMLCAibG9zZUNvbnRleHQiLCAiY29udGV4
dCBsb3N0IiwgZGlzcGxheSk7CisKKyAgICAvLyBEb24ndCBhbGxvdyByZXN0b3JhdGlvbiB1bmxl
c3MgdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVuCisgICAgLy8gZGlzcGF0Y2hl
ZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgorICAgIG1fcmVzdG9yZUFsbG93
ZWQgPSBmYWxzZTsKKworICAgIC8vIEFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGNv
bnRleHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50CisgICAgLy8gdGhlIHNwZWMgYmVoYXZpb3Ig
b2YgcXVldWVpbmcgYSB0YXNrLgorICAgIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIu
c3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VS
ZXN0b3JlQ29udGV4dCgpCit7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCBub3QgbG9zdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKSB7CisgICAgICAgIGlm
IChtX2NvbnRleHRMb3N0TW9kZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCkKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
InJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQgcmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yZXN0b3JlVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitQbGF0Zm9y
bUxheWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorewor
ICAgIHJldHVybiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKSA/IG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpIDogMDsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9i
amVjdCogb2JqZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2Nv
bnRleHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0KQor
eworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29udGV4dE9iamVjdHMucmVtb3ZlKG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2NvbnRleHRPYmpl
Y3RzLmFkZChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNo
QW5kUmVtb3ZlQWxsT2JqZWN0cygpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKG1fY29udGV4dE9iamVjdHMuc2l6
ZSgpID4gMCkgeworICAgICAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+OjppdGVyYXRv
ciBpdCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKKyAgICAgICAgKCppdCktPmRldGFjaENv
bnRleHQoKTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYXNQZW5k
aW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnN0b3AoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdCgpICYm
ICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKKyAgICAgICAgZm9yY2VMb3N0Q29udGV4
dChTeW50aGV0aWNMb3N0Q29udGV4dCk7CisgICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQz
RCgpOworICAgIH0KK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEYm9vbGVhbiB2YWx1
ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgJnZhbHVlKTsKKyAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Cit9CisKK1dlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihH
QzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX1dSSVRFTUFTSykgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKDAsIDApOworICAgIH0KKyAgICBHQzNEYm9vbGVhbiB2YWx1ZVs0XSA9
IHswfTsKKyAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CisgICAgYm9v
bCBib29sVmFsdWVbNF07CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDQ7ICsraWkpCisgICAg
ICAgIGJvb2xWYWx1ZVtpaV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtpaV0pOworICAgIHJl
dHVybiBXZWJHTEdldEluZm8oYm9vbFZhbHVlLCA0KTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgR0MzRGZsb2F0IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwg
JnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKK30KKworV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW50UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1l
KQoreworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYo
cG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cit9CisKK1dl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4
dC0+Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBw
bmFtZSkKK3sKKyAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5n
ZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgIHN3
aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJ
RFRIX1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAg
ICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORF9DT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVB
Ul9WQUxVRToKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cit9CisKK1dlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0gcG5hbWUpCit7CisgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsK
KyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJ
RVdQT1JUX0RJTVM6CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlZJRVdQT1JUOgorICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCit7CisgICAgYm9vbCByZXNl
dEFjdGl2ZVVuaXQgPSBmYWxzZTsKKyAgICBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25G
bGFnIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNp
b25GbGFnPigobV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVF
eHRlbnNpb25GbG9hdExpbmVhckVuYWJsZWQgOiAwKSB8IChtX29lc1RleHR1cmVIYWxmRmxvYXRM
aW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25IYWxmRmxvYXRMaW5lYXJFbmFi
bGVkIDogMCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1
cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRU
b1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKKyAgICAgICAgICAgIHx8IChtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0
dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkpIHsK
KyAgICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7CisgICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKKyAgICAgICAgICAgICAgICByZXNl
dEFjdGl2ZVVuaXQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNldEFjdGl2ZVVu
aXQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOworICAg
ICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXgyRDsKKyAgICAgICAgICAgIFdlYkdMVGV4dHVyZSog
dGV4Q3ViZU1hcDsKKyAgICAgICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7CisgICAgICAgICAg
ICAgICAgU3RyaW5nIG1zZyhTdHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVyZSB1bml0ICIp
ICsgU3RyaW5nOjpudW1iZXIoaWkpCisgICAgICAgICAgICAgICAgICAgICsgIiBpcyBub3QgcmVu
ZGVyYWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21wYXRpYmxlIHRl
eHR1cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgorICAgICAgICAg
ICAgICAgICAgICArICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUgd2l0aCBsaW5l
YXIgZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxmLWZsb2F0IGxp
bmVhciBleHRlbnNpb24gZW5hYmxlZC4iKTsKKyAgICAgICAgICAgICAgICBwcmludEdMV2Fybmlu
Z1RvQ29uc29sZShmdW5jdGlvbk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7CisgICAgICAgICAgICAgICAgdGV4
Q3ViZU1hcCA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJE
QmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90ZXh0dXJlVW5p
dHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1
cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVu
c2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOworICAgICAgICAgICAg
aWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJl
VW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4
dGVuc2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhDdWJlTWFwKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKKyAgICAgICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCkKK3sK
KyAgICB1bnNpZ25lZCBjaGFyIGJsYWNrW10gPSB7MCwgMCwgMCwgMjU1fTsKKyAgICBtX2JsYWNr
VGV4dHVyZTJEID0gY3JlYXRlVGV4dHVyZSgpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmxhY2tUZXh0dXJlMkQtPm9iamVjdCgp
KTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSBj
cmVhdGVUZXh0dXJlKCk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgbV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmplY3QoKSk7
CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxh
Y2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZm
ZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpCit7CisgICAgdW5zaWduZWQgbmVl
ZCA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KHRleEludGVybmFs
Rm9ybWF0KTsKKyAgICB1bnNpZ25lZCBoYXZlID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5u
ZWxCaXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3JtYXQpOworICAgIHJldHVybiAobmVlZCAmIGhh
dmUpID09IG5lZWQ7Cit9CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91
bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7CisgICAgaWYgKG1fYXR0
cmlidXRlcy5hbHBoYSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwor
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOworfQorCitpbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQoreworICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAg
IHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgpOworICAg
IHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgp
IDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Cit9CisK
K2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKQor
eworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JC
dWZmZXJIZWlnaHQoKTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVm
ZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkuaGVpZ2h0KCk7Cit9CisKK1dlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKK3sKKyAgICBXZWJHTFRleHR1
cmUqIHRleHR1cmUgPSBudWxscHRyOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVy
ZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcuZ2V0KCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgorICAgICAgICBpZiAoIXVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVy
ZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUDoKKyAgICAgICAgaWYgKHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0
aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdl
dCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKCF0ZXh0dXJlKQor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1cmUiKTsKKyAgICByZXR1cm4gdGV4dHVyZTsK
K30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBj
b25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2OworICAgIGlmIChzdHJp
bmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlU2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KQor
eworICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic2l6ZSA8IDAi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIXZhbGlkYXRlQ2hh
cmFjdGVyKHN0cmluZ1tpXSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzdHJpbmcgbm90IEFT
Q0lJIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRl
eEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQoreworICAgIHN3aXRjaCAoZm9ybWF0
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlO
QU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3Qg
ZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OlNSR0JfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKKyAgICBk
ZWZhdWx0OgorICAgICAgICBpZiAoKGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUIHx8
IGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKQorICAgICAgICAgICAgJiYg
bV9leHRzUkdCKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgaWYgKG1fb2Vz
VGV4dHVyZUZsb2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUhh
bGZGbG9hdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
OgorICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5
cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFZlcmlmeSB0aGF0
IHRoZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgorICAgIHN3
aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpI
QUxGX0ZMT0FUX09FUykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUg
Zm9yIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6U1JHQl9FWFQ6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dHlwZSBmb3IgUkdCIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgorICAgICAgICBpZiAodHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAgICAgJiYgdHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNAorICAgICAgICAgICAg
JiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMQorICAg
ICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAg
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmICghbV93ZWJn
bERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERF
UFRIX0NPTVBPTkVOVCBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9TSE9SVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQ
VEhfQ09NUE9ORU5UIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmIChsZXZlbCA+IDApIHsKKyAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxl
dmVsIG11c3QgYmUgMCBmb3IgREVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOworICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1
cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lM
IG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJ
TCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJl
IDAgZm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVs
IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2
ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAg
ICAgICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQg
ZG9uJ3QKKyAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwu
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleEZ1bmNWYWxp
ZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKK3sKKyAg
ICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBj
b21iaW5hdGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhU
TUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBv
biB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgorICAgIGlmICghdmFsaWRh
dGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwp
IHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVGb3JMZXZlbCA9
IHBvdygyLjAsIG1fbWF4VGV4dHVyZUxldmVsIC0gMSAtIGxldmVsKTsKKyAgICBzd2l0Y2ggKHRh
cmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAg
IGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVy
ZVNpemVGb3JMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFn
ZTJEICYmIHdpZHRoICE9IGhlaWdodCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9
IGhlaWdodCBmb3IgY3ViZSBtYXAiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBGb3IgdGV4SW1h
Z2Ugd2lkdGggPT0gaGVpZ2h0LgorICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2UgdGhhdCB3aWxs
IGJlIGNoZWNrZWQgd2hlbiBjaGVja2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGluIHJhbmdlLgor
ICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGJvcmRlcikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiYm9yZGVyICE9IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcq
IHBpeGVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE51bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKK3sKKyAgICBpZiAoIXBpeGVscykgeworICAg
ICAgICBpZiAoZGlzcG9zaXRpb24gPT0gTnVsbEFsbG93ZWQpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0
aW9uTmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRU
eXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlw
ZSBVTlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGlmIChwaXhlbHMt
PmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAidHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJh
eSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9h
dAorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcg
bm90IEZsb2F0MzJBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRf
T0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgIC8vIEFzIHBlciB0aGUgc3Bl
Y2lmaWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdoZW4KKyAgICAgICAg
Ly8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgorICAgICAgICBpZiAocGl4ZWxz
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9BVF9PRVMgYnV0IEFy
cmF5QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVzUmVxdWly
ZWQ7CisgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3Rh
bEJ5dGVzUmVxdWlyZWQsIDApOworICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVk
KSB7CisgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7CisgICAgICAgICAgZXJy
b3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lk
dGgsIGhlaWdodCwgMSwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7CisgICAgICAgICAgaWYgKHBp
eGVscy0+Ynl0ZUxlbmd0aCgpID09IHRvdGFsQnl0ZXNSZXF1aXJlZCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3Qg
d2l0aCBVTlBBQ0tfQUxJR05NRU5UID4gMSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVy
VmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICBy
ZXR1cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRh
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKK3sKKyAg
ICBpZiAoIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNSZXF1aXJlZCA9IDA7CisK
KyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENf
UkdCX0FNRDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4
OworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgICAgIGNv
bnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OworICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9z
cyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAgICAg
IGludCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8ga0Jsb2Nr
SGVpZ2h0OworICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51
bUJsb2Nrc0Rvd24gKiBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EOgor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9B
TFBIQV9BTUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0g
MTY7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICAgICAg
Y29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgICAgICBpbnQgbnVtQmxvY2tzQWNy
b3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOworICAgICAgICAg
ICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxv
Y2tIZWlnaHQ7CisgICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICog
bnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CisgICAgICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4OworICAgICAgICAgICAgY29uc3QgaW50IGtC
bG9ja0hlaWdodCA9IDg7CisgICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdp
ZHRoLCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiA0ICsg
NykgLyBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OworICAgICAgICAgICAgY29uc3Qg
aW50IGtCbG9ja1dpZHRoID0gMTY7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0
ID0gODsKKyAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9j
a1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAvIGtCbG9j
a1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSAhPSBieXRlc1JlcXVpcmVkKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZv
ciBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJl
c3NlZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAgY29uc3QgR0MzRHNpemVp
IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja0hlaWdodCA9
IDQ7CisgICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0YXJnZXQgPyBtX21h
eFRleHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7CisgICAgICAgIGNvbnN0IEdD
M0RzaXplaSBtYXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVyZVNpemUgPj4gbGV2ZWw7
CisgICAgICAgIGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0aCA9PSAxKSB8fCAobGV2
ZWwgJiYgd2lkdGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tXaWR0aCkgJiYgd2lkdGggPD0g
bWF4Q29tcHJlc3NlZERpbWVuc2lvbik7CisgICAgICAgIGJvb2wgaGVpZ2h0VmFsaWQgPSAobGV2
ZWwgJiYgaGVpZ2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQgPT0gMikgfHwgKCEoaGVpZ2h0
ICUga0Jsb2NrSGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7Cisg
ICAgICAgIGlmICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lN
RzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9J
TUc6CisgICAgICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBwb3dlcnMgb2YgMi4KKyAg
ICAgICAgaWYgKCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0ICYgKGhlaWdodCAtIDEp
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBm
b3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4
U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgV2ViR0xU
ZXh0dXJlKiB0ZXgpCit7CisgICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwKSB7Cisg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIpOworICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1dp
ZHRoID0gNDsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgIGlm
ICgoeG9mZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdodCkpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBs
ZSBvZiA0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHdpZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAgICAg
ICAgICAgIHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVs
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2
YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZl
bCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzogeworICAgICAgICBpZiAoeG9mZnNl
dCB8fCB5b2Zmc2V0KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlv
ZmZzZXQgbXVzdCBiZSB6ZXJvIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAg
ICAgICAgICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3Rpbmcg
bGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdl
dCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CisgICAgfQorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
bW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpQT0lOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9TVFJJUDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1A6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TElORVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVA6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBkcmF3IG1vZGUiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBpZiAo
bV9zdGVuY2lsTWFzayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5jUmVmICE9
IG1fc3RlbmNpbEZ1bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3RlbmNpbEZ1
bmNNYXNrQmFjaykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNrIHN0ZW5j
aWxzIHNldHRpbmdzIGRvIG5vdCBtYXRjaCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZ1bmMp
Cit7CisgICAgc3dpdGNoIChmdW5jKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TkVW
RVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFQVRFUjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFVQUw6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwcmludEdMRXJyb3JUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlm
ICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IC0tbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQ7CisgICAgcHJpbnRXYXJuaW5nVG9Db25z
b2xlKG1lc3NhZ2UpOworCisgICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkK
KyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDogdG9vIG1hbnkgZXJyb3JzLCBu
byBtb3JlIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBjb25zb2xlIGZvciB0aGlzIGNv
bnRleHQuIik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludFdhcm5pbmdU
b0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghY2FudmFzKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgbWVzc2Fn
ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVy
RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQpCit7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKKyAgICAgICAgICAgICYmIGF0dGFjaG1l
bnQgPiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKKyAgICAgICAgICAgICYm
IGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlVOQ19TVUJUUkFDVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0Vf
U1VCVFJBQ1Q6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQ6CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6Ok1BWF9FWFQ6CisgICAgICAgIGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1J
Tl9FWFQgfHwgbW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWlu
TWF4KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKK3sKKyAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05F
X01JTlVTX0NPTlNUQU5UX0NPTE9SKQorICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlO
VVNfQ09OU1RBTlRfQUxQSEEpKQorICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
Q09OU1RBTlRfQ09MT1IpCisgICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNE
OjpDT05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19D
T05TVEFOVF9BTFBIQSkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNy
YyBhbmQgZHN0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHko
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCit7CisgICAgc3dpdGNoIChj
YXApIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFX0NPVkVSQUdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgY2FwYWJpbGl0eSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
RmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICgh
dikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5j
dGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWly
ZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1p
blNpemUpCit7CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1N
YXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCks
IHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNp
emVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAgcmV0dXJuIHZhbGlk
YXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2Us
IHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sK
KyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxl
bmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6
ZSkKK3sKKyAgICBpZiAoIWxvY2F0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAodHJhbnNw
b3NlKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwg
KHNpemUgJSByZXF1aXJlZE1pblNpemUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNp
emUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRh
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gdXNhZ2UpCit7CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7CisgICAgc3dpdGNo
ICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUjoKKyAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKS5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlC
dWZmZXIuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICBpZiAoIWJ1ZmZlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgc3dpdGNoICh1c2FnZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNUQVRJQ19EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNf
RFJBVzoKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB1c2FnZSIpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
ICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBpbWFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvbnN0IFVSTCYg
dXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7CisgICAgaWYgKHVy
bC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7CisgICAgICAgIGVjID0gU0VDVVJJ
VFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVu
dChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigp
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7CisgICAgICAgIGVj
ID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCisjaWYgRU5BQkxFKFZJREVPKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXZp
ZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKKyAgICAgICAgZWMgPSBTRUNV
UklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJ
bXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBl
eHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdD
M0RmbG9hdCB2MykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KKyAg
ICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIHN3aXRjaCAoZXhw
ZWN0ZWRTaXplKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVy
dGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
NGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIFZlcnRleEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0
cmliVmFsdWVbaW5kZXhdOworICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7CisgICAgYXR0
cmliVmFsdWUudmFsdWVbMV0gPSB2MTsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOwor
ICAgIGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgdmVydGV4QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgsIHYtPmRh
dGEoKSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4
cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJ
biBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgorICAgIGlmIChpbmRl
eCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUp
IHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIx
ZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYjNmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgVmVydGV4QXR0cmliVmFsdWUmIGF0
dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07CisgICAgYXR0cmliVmFsdWUu
aW5pdFZhbHVlKCk7CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytp
aSkKKyAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWldID0gdltpaV07Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCit7CisgICAgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICAKKyAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
LT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSLCAwKTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KDApOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOworICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVsxXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBm
OworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKKyAgICBtX2ZvcmNl
QXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmUgPSBmYWxzZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVy
dGV4QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KQoreworICAgIGNvbnN0IFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7CisgICAgY29uc3QgVmVydGV4QXR0
cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKKyAgICBpZiAo
IW1fY3VycmVudFByb2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIHVzaW5n
VmVydGV4QXR0cmliMCA9IG1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7
CisgICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMCkKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNl
ZEJlZm9yZSA9IHRydWU7CisgICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0ZXhBdHRy
aWIwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAg
JiYgIW1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKKyAgICBtX2NvbnRleHQtPmJpbmRC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyLT5vYmplY3QoKSk7CisgICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZl
cnRleCArIDEpICogNCAqIHNpemVvZihHQzNEZmxvYXQpOworICAgIGlmIChidWZmZXJEYXRhU2l6
ZSA+IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5idWZm
ZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFTaXplOworICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1
ZmZlclJlZmlsbCA9IHRydWU7CisgICAgfQorICAgIGlmICh1c2luZ1ZlcnRleEF0dHJpYjAKKyAg
ICAgICAgJiYgKG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsCisgICAgICAgICAgICB8fCBhdHRy
aWJWYWx1ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQorICAgICAg
ICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFs
dWVbMV0KKyAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzJdCisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVszXSAh
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKKyAgICAgICAgYXV0byBidWZmZXJE
YXRhID0gc3RkOjptYWtlX3VuaXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7
CisgICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lp
KSB7CisgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsw
XTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1
ZVsxXTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJWYWx1ZS52
YWx1ZVsyXTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRyaWJWYWx1
ZS52YWx1ZVszXTsKKyAgICAgICAgfQorICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVswXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVsxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOworICAgICAgICBtX3ZlcnRleEF0dHJp
YjBCdWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOworICAgICAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOworICAgICAgICBt
X2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOworICAgICAgICBtX2NvbnRleHQtPmJ1
ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0
YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOworICAgIH0KKyAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVT
dGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKK3sKKyAgICBjb25zdCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOworICAgIGlmIChzdGF0ZS5i
dWZmZXJCaW5kaW5nICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgeworICAgICAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3Ja
ZXJvKHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6
ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOworICAgIH0KKyAgICBtX2Nv
bnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0
T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKK3sKKyAgICBSZWZQdHI8V2Vi
R0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOworICAgIGNhbnZh
cygpLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExv
c3RDb250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCisgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVz
dG9yZUNvbnRleHQoKQoreworICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKKyAgICBpZiAoIW1f
Y29udGV4dExvc3QpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSByZW5kZXJpbmcgY29u
dGV4dCBpcyBub3QgcmVzdG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZQor
ICAgIC8vIHdlYmdsY29udGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgorICAg
IC8vCisgICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1cCBm
b3IgcmVhbCB2cy4gc3ludGhldGljIGxvc3QKKyAgICAvLyBjb250ZXh0IGV2ZW50cywgd2UgZG9u
J3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZworICAgIC8v
IHRoZSByZXRyeSBsb29wIGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCisgICAgaWYgKCFt
X3Jlc3RvcmVBbGxvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgY29udGV4dExvc3RS
ZWFzb24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1
c0FSQigpOworCisgICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgorICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0
M0QgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5CisgICAgICAgIC8vIHN1cHBvcnQgR0xf
QVJCX3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCisgICAgICAg
IC8vIFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVzZWQgdG8g
Zm9yY2UKKyAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6CisgICAgICAgIC8vIFRo
ZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0IHdhcwor
ICAgICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCisgICAgICAg
IHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFn
ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3JpbmcgdGhlIGNv
bnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJTk5PQ0VO
VF9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBjb250ZXh0
IHRvIGJlIHJlc3RvcmVkLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
VU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gV2Fybi4gSWRlYWxseSwgcHJv
bXB0IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCisgICAgICAgIC8vIGNvbnRlbnQg
b24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8KKyAgICAg
ICAgLy8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRpbnVlIHJ1
bm5pbmcKKyAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInllcyIgc2hv
dWxkIHdlIHN0YXJ0CisgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgY29udGV4
dC4KKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50
IG9uIHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0
Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhcygp
LT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0
dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmll
dyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47
CisgICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3QoKTsKKyAgICBpZiAoIXJvb3QpCisg
ICAgICAgIHJldHVybjsKKyAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdp
bmRvdygpOworICAgIGlmICghaG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
bV9hdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAg
IGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCisgICAgICAgICAgICBt
X3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFw
cGVuIGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRo
ZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKKyAgICAgICAgRHJhd2lu
Z0J1ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1dGVzLnBy
ZXNlcnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJhd2luZ0J1
ZmZlcjo6RGlzY2FyZDsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJlbWVudCBh
bHBoYSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDogRHJhd2lu
Z0J1ZmZlcjo6T3BhcXVlOworICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVy
OjpjcmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHByZXNlcnZl
LCBhbHBoYSk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0KKworICAg
IG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOworICAgIHNl
dHVwRmxhZ3MoKTsKKyAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOworICAgIGNhbnZhcygpLT5k
aXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmds
Y29udGV4dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOworfQorCitTdHJpbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4dCkgY29u
c3QKK3sKKyAgICBpZiAodGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlT
dHJpbmcoKTsKKyAgICByZXR1cm4gdGV4dDsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpM
UlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKKyAg
ICA6IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj5bXT4oY2FwYWNpdHkpKQorICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKK3sKK30KKworSW1h
Z2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkg
PSAwOyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBt
X2J1ZmZlcnNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYnVmKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBidWJibGVUb0Zyb250KGkpOworICAgICAgICByZXR1cm4gYnVmOwor
ICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgMSk7CisgICAgaWYgKCF0ZW1wKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOworICAgIG1fYnVmZmVy
c1tpXSA9IFdURjo6bW92ZSh0ZW1wKTsKKworICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZl
cnNbaV0uZ2V0KCk7CisgICAgYnViYmxlVG9Gcm9udChpKTsKKyAgICByZXR1cm4gYnVmOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxl
VG9Gcm9udChpbnQgaWR4KQoreworICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCisg
ICAgICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKK30KKworbmFtZXNwYWNl
IHsKKworICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNOgorICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgorICAgICAgICAgICAgcmV0
dXJuICJJTlZBTElEX1ZBTFVFIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT046CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9OIjsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKKyAgICAgICAg
ICAgIHJldHVybiAiT1VUX09GX01FTU9SWSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgorICAgICAgICAgICAgcmV0dXJuICJJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKKyAgICAgICAgICAgIHJldHVybiAiQ09OVEVYVF9M
T1NUX1dFQkdMIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiV2ViR0wgRVJST1IoJTA0eCkiLCBlcnJvcik7CisgICAgICAgIH0KKyAgICB9CisK
K30gLy8gbmFtZXNwYWNlIGFub255bW91cworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNw
bGF5KQoreworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRpc3BsYXkg
PT0gRGlzcGxheUluQ29uc29sZSkgeworICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6
ICIpICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1l
KSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOworICAgICAgcHJpbnRHTEVycm9yVG9Db25z
b2xlKHN0cik7CisgICAgfQorICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3Ip
OworfQorCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29u
c29sZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQor
eworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7CisgICAgICAgIFN0cmlu
ZyBzdHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiAr
IFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIp
OworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRl
c3QoKQoreworICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKKworICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBtX2ZyYW1l
YnVmZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1ZmZlcigpOworICAgIGVsc2UgeworICAgICAgICBS
ZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRy
aWJ1dGVzKCk7CisgICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+c3RlbmNp
bCgpOworICAgIH0KKyAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfVEVTVCwKKyAgICAgICAgICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3Rl
bmNpbEJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRp
c2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJs
ZSkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7CisgICAgZWxzZQorICAg
ICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7Cit9CisKK0ludFNpemUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2FudmFzU2l6ZSgpCit7CisgICAgcmV0dXJuIEludFNp
emUoY2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBdKSwKKyAg
ICAgICAgICAgICAgICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3Bv
cnREaW1zWzFdKSk7Cit9CisKK0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhE
cmF3QnVmZmVycygpCit7CisgICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIGlmICghbV9tYXhEcmF3QnVmZmVycykKKyAgICAgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhE
cmF3QnVmZmVycyk7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCisgICAgICAgIG1f
Y29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNf
RVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMg
cmVxdWlyZXMgTUFYX0NPTE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCisgICAg
cmV0dXJuIHN0ZDo6bWluKG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7
Cit9CisKK0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1l
bnRzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCisgICAgICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9t
YXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVu
dW0gYnVmKQoreworICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKK3sKKyAgICBFeGNl
cHRpb25Db2RlIGVjOworICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCit7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKKyAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKSwgZWMpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNE
cmF3QnVmZmVycygpCit7CisgICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHND
aGVja2VkKSB7CisgICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQg
PSB0cnVlOworICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3QnVmZmVy
czo6c3VwcG9ydGVkKHRoaXMpOworICAgIH0KKyAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1N1cHBv
cnRlZDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJbnN0YW5j
ZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6
ZWkgcHJpbWNvdW50KQoreworICAgIGlmICghcHJpbWNvdW50KSB7CisgICAgICAgIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWxpZGF0
ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHBy
aW1jb3VudCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisK
KyAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRl
VmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0
cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0
YW5jZWQiLCB0cnVlKTsKKworICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0luc3RhbmNlZChtb2Rl
LCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
KyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwg
ZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1j
b3VudCkKK3sKKyAgICBpZiAoIXByaW1jb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5n
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
ID0gMDsKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJbnN0YW5j
ZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgcHJpbWNvdW50KSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wg
dmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11
bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1l
bnRzSW5zdGFuY2VkIiwgdHJ1ZSk7CisKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3Rh
bmNlZChtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwg
cHJpbWNvdW50KTsKKworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11
bGF0aW9uKCk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1Rl
eHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIGZhbHNlKTsKKyAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlz
b3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgs
IGRpdmlzb3IpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2
aXNvcik7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5n
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wxUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2MjM3ICsyNiwyMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxF
KFdFQkdMKQotCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0KLSNpbmNsdWRl
ICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5j
bHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFWFRT
aGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRl
ICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIK
LSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1
ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1l
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5k
ZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUg
Ik9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgot
I2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFs
ZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKLSNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5o
IgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0
dXJlUzNUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRl
ICJXZWJHTENvbnRleHRFdmVudC5oIgotI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0j
aW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdT
aGFkZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJH
TERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUg
IldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRl
ICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCi0jaW5jbHVk
ZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCIKLSNpbmNsdWRlICJXZWJHTFRleHR1cmUu
aCIKLSNpbmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgotCi0jaW5jbHVkZSA8cnVudGlt
ZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlICJXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgZG91YmxlIHNlY29uZHNCZXR3ZWVuUmVzdG9y
ZUF0dGVtcHRzID0gMS4wOwotY29uc3QgaW50IG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSA9
IDI1NjsKLQotbmFtZXNwYWNlIHsKLQotICAgIGNsYXNzIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5k
ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3
aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJp
bmRpbmcpCi0gICAgICAgICAgICA6IG1fZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQotICAg
ICAgICAgICAgLCBtX2ZyYW1lYnVmZmVyQmluZGluZyhmcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5n
LiwgZm9yIG11bHRpc2FtcGxpbmcpCi0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5k
aW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmNvbW1pdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgflNjb3BlZERyYXdpbmdCdWZmZXJCaW5k
ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYg
bmVlZGVkCi0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2lu
Z0J1ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVm
ZmVyOwotICAgICAgICBXZWJHTEZyYW1lYnVmZmVyKiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAg
ICB9OwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9i
amVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDog
MDsKLSAgICB9Ci0KLSAgICB2b2lkIGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkgcmFu
Z2UsIEdDM0RzaXplaSBzb3VyY2VSYW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNEc2l6
ZWkqIGNsaXBwZWRSYW5nZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYg
Y2xpcHBlZFJhbmdlKTsKLSAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICAgICAgcmFu
Z2UgKz0gc3RhcnQ7Ci0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAg
R0MzRGludCBlbmQgPSBzdGFydCArIHJhbmdlOwotICAgICAgICBpZiAoZW5kID4gc291cmNlUmFu
Z2UpCi0gICAgICAgICAgICByYW5nZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKLSAgICAgICAgKmNs
aXBwZWRTdGFydCA9IHN0YXJ0OwotICAgICAgICAqY2xpcHBlZFJhbmdlID0gcmFuZ2U7Ci0gICAg
fQotCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGku
ZS4sIHgsIHksIHdpZHRoLCBoZWlnaHQgc3RheSB0aGUgc2FtZS4KLSAgICBib29sIGNsaXAyRChH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzb3VyY2VXaWR0aCwgR0MzRHNpemVpIHNvdXJjZUhl
aWdodCwKLSAgICAgICAgICAgICAgICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGludCogY2xpcHBl
ZFksIEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhlaWdodCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChjbGlwcGVkWCAmJiBjbGlwcGVkWSAmJiBjbGlwcGVkV2lkdGgg
JiYgY2xpcHBlZEhlaWdodCk7Ci0gICAgICAgIGNsaXAxRCh4LCB3aWR0aCwgc291cmNlV2lkdGgs
IGNsaXBwZWRYLCBjbGlwcGVkV2lkdGgpOwotICAgICAgICBjbGlwMUQoeSwgaGVpZ2h0LCBzb3Vy
Y2VIZWlnaHQsIGNsaXBwZWRZLCBjbGlwcGVkSGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuICgqY2xp
cHBlZFggIT0geCB8fCAqY2xpcHBlZFkgIT0geSB8fCAqY2xpcHBlZFdpZHRoICE9IHdpZHRoIHx8
ICpjbGlwcGVkSGVpZ2h0ICE9IGhlaWdodCk7Ci0gICAgfQotCi0gICAgR0MzRGludCBjbGFtcChH
QzNEaW50IHZhbHVlLCBHQzNEaW50IG1pbiwgR0MzRGludCBtYXgpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUgPCBtaW4pCi0gICAgICAgICAgICB2YWx1ZSA9IG1pbjsKLSAgICAgICAgaWYgKHZh
bHVlID4gbWF4KQotICAgICAgICAgICAgdmFsdWUgPSBtYXg7Ci0gICAgICAgIHJldHVybiB2YWx1
ZTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBhIGNoYXJhY3RlciBiZWxvbmdzIHRv
IHRoZSBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbgotICAgIC8vIEdMU0wgRVMgMS4wIHNwZWMg
c2VjdGlvbiAzLjEuCi0gICAgYm9vbCB2YWxpZGF0ZUNoYXJhY3Rlcih1bnNpZ25lZCBjaGFyIGMp
Ci0gICAgewotICAgICAgICAvLyBQcmludGluZyBjaGFyYWN0ZXJzIGFyZSB2YWxpZCBleGNlcHQg
IiAkIGAgQCBcICcgREVMLgotICAgICAgICBpZiAoYyA+PSAzMiAmJiBjIDw9IDEyNgotICAgICAg
ICAgICAgJiYgYyAhPSAnIicgJiYgYyAhPSAnJCcgJiYgYyAhPSAnYCcgJiYgYyAhPSAnQCcgJiYg
YyAhPSAnXFwnICYmIGMgIT0gJ1wnJykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAvLyBIb3Jpem9udGFsIHRhYiwgbGluZSBmZWVkLCB2ZXJ0aWNhbCB0YWIsIGZvcm0gZmVlZCwg
Y2FycmlhZ2UgcmV0dXJuCi0gICAgICAgIC8vIGFyZSBhbHNvIHZhbGlkLgotICAgICAgICBpZiAo
YyA+PSA5ICYmIGMgPD0gMTMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgaXNQcmVmaXhSZXNlcnZlZChjb25zdCBTdHJp
bmcmIG5hbWUpCi0gICAgewotICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJnbF8iKSB8fCBu
YW1lLnN0YXJ0c1dpdGgoIndlYmdsXyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiX3dlYmdsXyIpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICAvLyBTdHJpcHMgY29tbWVudHMgZnJvbSBzaGFkZXIgdGV4dC4gVGhpcyBhbGxvd3Mgbm9u
LUFTQ0lJIGNoYXJhY3RlcnMKLSAgICAvLyB0byBiZSB1c2VkIGluIGNvbW1lbnRzIHdpdGhvdXQg
cG90ZW50aWFsbHkgYnJlYWtpbmcgT3BlbkdMCi0gICAgLy8gaW1wbGVtZW50YXRpb25zIG5vdCBl
eHBlY3RpbmcgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBHTFNMIEVTIHNldC4KLSAgICBjbGFzcyBT
dHJpcENvbW1lbnRzIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0cmlwQ29tbWVudHMoY29uc3Qg
U3RyaW5nJiBzdHIpCi0gICAgICAgICAgICA6IG1fcGFyc2VTdGF0ZShCZWdpbm5pbmdPZkxpbmUp
Ci0gICAgICAgICAgICAsIG1fc291cmNlU3RyaW5nKHN0cikKLSAgICAgICAgICAgICwgbV9sZW5n
dGgoc3RyLmxlbmd0aCgpKQotICAgICAgICAgICAgLCBtX3Bvc2l0aW9uKDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHBhcnNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcmVzdWx0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwot
ICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBib29sIGhhc01vcmVDaGFyYWN0ZXJz
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChtX3Bvc2l0aW9uIDwgbV9s
ZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwYXJzZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHdoaWxlIChoYXNNb3JlQ2hhcmFjdGVycygpKSB7Ci0gICAgICAgICAgICAgICAg
cHJvY2VzcyhjdXJyZW50KCkpOwotICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MoKSBtaWdodCBh
ZHZhbmNlIHRoZSBwb3NpdGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoaGFzTW9yZUNoYXJhY3Rl
cnMoKSkKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBwcm9jZXNzKFVDaGFyKTsKLQotICAgICAgICBib29sIHBl
ZWsoVUNoYXImIGNoYXJhY3RlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1f
cG9zaXRpb24gKyAxID49IG1fbGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGNoYXJhY3RlciA9IG1fc291cmNlU3RyaW5nW21fcG9zaXRpb24gKyAxXTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgVUNoYXIgY3Vy
cmVudCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbl07Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFk
dmFuY2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICArK21fcG9zaXRpb247Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGlzTmV3bGluZShVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIERvbid0IGF0dGVtcHQgdG8gY2Fub25pY2FsaXplIG5ld2xpbmUg
cmVsYXRlZCBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgcmV0dXJuIChjaGFyYWN0ZXIgPT0gJ1xu
JyB8fCBjaGFyYWN0ZXIgPT0gJ1xyJyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVtaXQo
VUNoYXIgY2hhcmFjdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5k
KGNoYXJhY3Rlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBlbnVtIFBhcnNlU3RhdGUgewotICAg
ICAgICAgICAgLy8gSGF2ZSBub3Qgc2VlbiBhbiBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0
ZXIgeWV0IG9uCi0gICAgICAgICAgICAvLyB0aGlzIGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWln
aHQgc2VlIGEgcHJlcHJvY2Vzc29yCi0gICAgICAgICAgICAvLyBkaXJlY3RpdmUuCi0gICAgICAg
ICAgICBCZWdpbm5pbmdPZkxpbmUsCi0KLSAgICAgICAgICAgIC8vIEhhdmUgc2VlbiBhdCBsZWFz
dCBvbmUgQVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyCi0gICAgICAgICAgICAvLyBvbiB0
aGlzIGxpbmUuCi0gICAgICAgICAgICBNaWRkbGVPZkxpbmUsCi0KLSAgICAgICAgICAgIC8vIEhh
bmRsaW5nIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gUGFzc2VzIHRocm91Z2ggYWxsCi0gICAg
ICAgICAgICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIERpc2FibGVz
IGNvbW1lbnQKLSAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcuCi0gICAgICAgICAgICBJblByZXBy
b2Nlc3NvckRpcmVjdGl2ZSwKLQotICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBzaW5nbGUtbGlu
ZSBjb21tZW50LiBUaGUgY29tbWVudCB0ZXh0IGlzCi0gICAgICAgICAgICAvLyByZXBsYWNlZCB3
aXRoIGEgc2luZ2xlIHNwYWNlLgotICAgICAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVudCwKLQot
ICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBtdWx0aS1saW5lIGNvbW1lbnQuIE5ld2xpbmVzIGFy
ZSBwYXNzZWQKLSAgICAgICAgICAgIC8vIHRocm91Z2ggdG8gcHJlc2VydmUgbGluZSBudW1iZXJz
LgotICAgICAgICAgICAgSW5NdWx0aUxpbmVDb21tZW50Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
UGFyc2VTdGF0ZSBtX3BhcnNlU3RhdGU7Ci0gICAgICAgIFN0cmluZyBtX3NvdXJjZVN0cmluZzsK
LSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIG1fcG9zaXRpb247
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgbV9idWlsZGVyOwotICAgIH07Ci0KLSAgICB2b2lkIFN0
cmlwQ29tbWVudHM6OnByb2Nlc3MoVUNoYXIgYykKLSAgICB7Ci0gICAgICAgIGlmIChpc05ld2xp
bmUoYykpIHsKLSAgICAgICAgICAgIC8vIE5vIG1hdHRlciB3aGF0IHN0YXRlIHdlIGFyZSBpbiwg
cGFzcyB0aHJvdWdoIG5ld2xpbmVzCi0gICAgICAgICAgICAvLyBzbyB3ZSBwcmVzZXJ2ZSBsaW5l
IG51bWJlcnMuCi0gICAgICAgICAgICBlbWl0KGMpOwotCi0gICAgICAgICAgICBpZiAobV9wYXJz
ZVN0YXRlICE9IEluTXVsdGlMaW5lQ29tbWVudCkKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3Rh
dGUgPSBCZWdpbm5pbmdPZkxpbmU7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIFVDaGFyIHRlbXAgPSAwOwotICAgICAgICBzd2l0Y2ggKG1fcGFyc2VTdGF0ZSkg
ewotICAgICAgICBjYXNlIEJlZ2lubmluZ09mTGluZToKLSAgICAgICAgICAgIGlmIChXVEY6Omlz
QVNDSUlTcGFjZShjKSkgewotICAgICAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjID09ICcjJykgewot
ICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluUHJlcHJvY2Vzc29yRGlyZWN0aXZlOwot
ICAgICAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFRyYW5zaXRpb24gdG8gbm9ybWFsIHN0YXRlIGFuZCBy
ZS1oYW5kbGUgY2hhcmFjdGVyLgotICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gTWlkZGxlT2ZM
aW5lOwotICAgICAgICAgICAgcHJvY2VzcyhjKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgTWlkZGxlT2ZMaW5lOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nICYmIHBlZWso
dGVtcCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSAnLycpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5TaW5nbGVMaW5lQ29tbWVudDsKLSAgICAgICAgICAg
ICAgICAgICAgZW1pdCgnICcpOwotICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICh0ZW1wID09ICcqJykgewotICAgICAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUg
PSBJbk11bHRpTGluZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNv
bW1lbnQgc3RhcnQgaW4gY2FzZSB0aGUgdXNlciBoYXMKLSAgICAgICAgICAgICAgICAgICAgLy8g
YW4gdW5jbG9zZWQgY29tbWVudCBhbmQgd2Ugd2FudCB0byBsYXRlcgotICAgICAgICAgICAgICAg
ICAgICAvLyBzaWduYWwgYW4gZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsK
LSAgICAgICAgICAgICAgICAgICAgZW1pdCgnKicpOwotICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU6Ci0gICAgICAgICAgICAvLyBO
byBtYXR0ZXIgd2hhdCB0aGUgY2hhcmFjdGVyIGlzLCBqdXN0IHBhc3MgaXQKLSAgICAgICAgICAg
IC8vIHRocm91Z2guIERvIG5vdCBwYXJzZSBjb21tZW50cyBpbiB0aGlzIHN0YXRlLiBUaGlzCi0g
ICAgICAgICAgICAvLyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGxvbmcgdGVy
bSwgYnV0IGl0Ci0gICAgICAgICAgICAvLyBzaG91bGQgaGFuZGxlIHRoZSAjZXJyb3IgcHJlcHJv
Y2Vzc29yIGRpcmVjdGl2ZS4KLSAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEluU2luZ2xlTGluZUNvbW1lbnQ6Ci0gICAgICAgICAgICAvLyBU
aGUgbmV3bGluZSBjb2RlIGF0IHRoZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlCi0g
ICAgICAgICAgICAvLyBvZiByZXNldHRpbmcgb3VyIHN0YXRlIHdoZW4gd2UgZ2V0IG91dCBvZiB0
aGUKLSAgICAgICAgICAgIC8vIHNpbmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVy
IGNoYXJhY3RlcnMuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEluTXVsdGlM
aW5lQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICcqJyAmJiBwZWVrKHRlbXApICYmIHRl
bXAgPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgZW1pdCgnKicpOwotICAgICAgICAgICAgICAg
IGVtaXQoJy8nKTsKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7
Ci0gICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJz
LiBVbmNsZWFyIHdoZXRoZXIgd2UgbWF5Ci0gICAgICAgICAgICAvLyB3YW50IG9yIG5lZWQgdG8g
anVzdCBlbWl0IGEgc3BhY2UgcGVyIGNoYXJhY3RlciB0byB0cnkKLSAgICAgICAgICAgIC8vIHRv
IHByZXNlcnZlIGNvbHVtbiBudW1iZXJzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0gLy8gbmFtZXNwYWNlIGFub255bW91cwot
Ci1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2sgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RD
YWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIG9uQ29udGV4dExvc3QoKSBvdmVycmlkZSB7IG1fY29udGV4dC0+Zm9y
Y2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OlJlYWxMb3N0Q29udGV4dCk7IH0K
LSAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7fQotcHJp
dmF0ZToKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKLX07Ci0KLWNsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjayB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJy
b3JNZXNzYWdlQ2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjYikgOiBtX2NvbnRleHQo
Y2IpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIEdDM0RpbnQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0LT5t
X3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKQotICAgICAgICAgICAgbV9jb250ZXh0LT5wcmlu
dEdMRXJyb3JUb0NvbnNvbGUobWVzc2FnZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYkdMUmVu
ZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKCkgeyB9Ci1wcml2YXRlOgotICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwotfTsKLQotc3RkOjp1bmlxdWVfcHRyPFdl
YkdMUmVuZGVyaW5nQ29udGV4dD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcywgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogYXR0cnMpCi17Ci0g
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzLT5kb2N1bWVudCgpOwotICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAvLyBUaGUgRnJhbWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3Jl
YXRpb24gb2YgYSBuZXcgV2ViR0wgY29udGV4dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBp
bgotICAgIC8vIHBhcnRpY3VsYXIsIGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3Ig
bW9yZSB0aW1lcyB2aWEgdGhlIEdMX0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KLSAgICBpZiAo
IWZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndl
YkdMRW5hYmxlZCgpKSkgewotICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250
ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2
ZW50LCBmYWxzZSwgdHJ1ZSwgIldlYiBwYWdlIHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBX
ZWJHTCBjb250ZXh0LiIpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gZmFsc2U7Ci0gICAgRG9jdW1lbnQmIHRv
cERvY3VtZW50ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKTsKLSAgICBQYWdlKiBwYWdlID0gdG9w
RG9jdW1lbnQucGFnZSgpOwotICAgIGlmIChwYWdlICYmICF0b3BEb2N1bWVudC51cmwoKS5pc0xv
Y2FsRmlsZSgpKSB7Ci0gICAgICAgIFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVudC51
cmwoKSk7Ci0KLSAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pIHsKLSAg
ICAgICAgICAgIExPRyhXZWJHTCwgIlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJMICglcykgaXMgdG8g
YmxvY2sgV2ViR0wuIiwgdG9wRG9jdW1lbnQudXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocG9s
aWN5ID09IFdlYkdMUGVuZGluZ0NyZWF0aW9uKSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJX
ZWJHTCBwb2xpY3kgaXMgcGVuZGluZy4gTWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQgbGF0ZXIuIik7
Ci0gICAgICAgICAgICBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMg
PSBhdHRycyA/IGF0dHJzLT5hdHRyaWJ1dGVzKCkgOiBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGlmICgh
ZnJhbWUtPnNldHRpbmdzKCkub3BlbkdMTXVsdGlzYW1wbGluZ0VuYWJsZWQoKSkKLSAgICAgICAg
ICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYXR0cmlidXRl
cy5ub0V4dGVuc2lvbnMgPSB0cnVlOwotICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBm
YWxzZTsKLSAgICBhdHRyaWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVID0gdHJ1ZTsKLQotICAgIGlm
IChmcmFtZS0+c2V0dGluZ3MoKS5mb3JjZVNvZnR3YXJlV2ViR0xSZW5kZXJpbmcoKSkKLSAgICAg
ICAgYXR0cmlidXRlcy5mb3JjZVNvZnR3YXJlUmVuZGVyZXIgPSB0cnVlOwotCi0gICAgaWYgKHBh
Z2UpCi0gICAgICAgIGF0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNj
YWxlRmFjdG9yKCk7Ci0KLSAgICBpZiAoaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAg
ICAgICBMT0coV2ViR0wsICJDcmVhdGUgYSBXZWJHTCBjb250ZXh0IHRoYXQgbG9va3MgcmVhbCwg
YnV0IHdpbGwgcmVxdWlyZSBhIHBvbGljeSByZXNvbHV0aW9uIGlmIHVzZWQuIik7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQo
bmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKLSAgICAgICAg
cmVuZGVyaW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgICAgIHJldHVybiByZW5k
ZXJpbmdDb250ZXh0OwotICAgIH0KLQotICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1
bWVudC52aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpOwotICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhv
c3RXaW5kb3cpKTsKLQotICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpIHsKLSAgICAgICAgY2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwg
ZmFsc2UsIHRydWUsICJDb3VsZCBub3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9u
cyA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9y
dHMoIkdMX0VYVF9kZWJ1Z19tYXJrZXIiKSkKLSAgICAgICAgZXh0ZW5zaW9ucy0+cHVzaEdyb3Vw
TWFya2VyRVhUKCJXZWJHTFJlbmRlcmluZ0NvbnRleHQiKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQobmV3IFdlYkdMUmVuZGVy
aW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQsIGF0dHJpYnV0ZXMpKTsKLSAgICByZW5kZXJpbmdD
b250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLQotICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0
OwotfQotCi1XZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1M
Q2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRyaWJ1dGVzKQotICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMp
Ci0gICAgLCBBY3RpdmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKLSAgICAs
IG1fY29udGV4dCgwKQotICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCi0gICAgLCBtX2Rpc3BhdGNo
Q29udGV4dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNw
YXRjaENvbnRleHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQotICAg
ICwgbV9yZXN0b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVz
dG9yZUNvbnRleHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoMCkKLSAgICAsIG1fY29u
dGV4dExvc3QoZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29u
dGV4dCkKLSAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9zeW50aGVzaXpl
ZEVycm9yc1RvQ29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93
ZWQobWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwgbV9pc1BlbmRpbmdQb2xpY3lS
ZXNvbHV0aW9uKHRydWUpCi0gICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFs
c2UpCi17Ci19Ci0KLVdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQsCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmli
dXRlcykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQotICAgICwg
QWN0aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCi0gICAgLCBtX2NvbnRl
eHQoY29udGV4dCkKLSAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQotICAgICwgbV9kaXNwYXRjaENv
bnRleHRMb3N0RXZlbnRUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KQotICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKLSAgICAs
IG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3Rv
cmVDb250ZXh0KQotICAgICwgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlKDQpCi0gICAgLCBtX2NvbnRl
eHRMb3N0KGZhbHNlKQotICAgICwgbV9jb250ZXh0TG9zdE1vZGUoU3ludGhldGljTG9zdENvbnRl
eHQpCi0gICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAsIG1fc3ludGhlc2l6ZWRF
cnJvcnNUb0NvbnNvbGUodHJ1ZSkKLSAgICAsIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2Vk
KG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSkKLSAgICAsIG1faXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbihmYWxzZSkKLSAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxz
ZSkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLSAgICBtX2NvbnRleHRHcm91cCA9IFdlYkdM
Q29udGV4dEdyb3VwOjpjcmVhdGUoKTsKLSAgICBtX2NvbnRleHRHcm91cC0+YWRkQ29udGV4dCh0
aGlzKTsKLQotICAgIG1fbWF4Vmlld3BvcnREaW1zWzBdID0gbV9tYXhWaWV3cG9ydERpbXNbMV0g
PSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
SUVXUE9SVF9ESU1TLCBtX21heFZpZXdwb3J0RGltcyk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLQotICAgIHNldHVwRmxhZ3Mo
KTsKLSAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQotewotICAgIEFTU0VSVCghbV9jb250ZXh0
TG9zdCk7Ci0gICAgbV9uZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgbV9tYXJrZWRDYW52YXNEaXJ0
eSA9IGZhbHNlOwotICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQgPSAwOwotICAgIG1fcGFja0FsaWdu
bWVudCA9IDQ7Ci0gICAgbV91bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1fdW5wYWNrRmxpcFkg
PSBmYWxzZTsKLSAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKLSAgICBtX3Vu
cGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVG
QVVMVF9XRUJHTDsKLSAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOwotICAgIG1fY3VycmVudFBy
b2dyYW0gPSAwOwotICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKLSAgICBtX3JlbmRlcmJ1
ZmZlckJpbmRpbmcgPSAwOwotICAgIG1fZGVwdGhNYXNrID0gdHJ1ZTsKLSAgICBtX3N0ZW5jaWxF
bmFibGVkID0gZmFsc2U7Ci0gICAgbV9zdGVuY2lsTWFzayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9z
dGVuY2lsTWFza0JhY2sgPSAweEZGRkZGRkZGOwotICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSAwOwot
ICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gMDsKLSAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IDB4
RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gMHhGRkZGRkZGRjsKLSAgICBt
X2xheWVyQ2xlYXJlZCA9IGZhbHNlOwotICAgIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2Vk
ID0gbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlOwotICAgIAotICAgIG1fY2xlYXJDb2xvclsw
XSA9IG1fY2xlYXJDb2xvclsxXSA9IG1fY2xlYXJDb2xvclsyXSA9IG1fY2xlYXJDb2xvclszXSA9
IDA7Ci0gICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgIG1fY2xlYXJEZXB0aCA9IDE7
Ci0gICAgbV9jbGVhclN0ZW5jaWwgPSAwOwotICAgIG1fY29sb3JNYXNrWzBdID0gbV9jb2xvck1h
c2tbMV0gPSBtX2NvbG9yTWFza1syXSA9IG1fY29sb3JNYXNrWzNdID0gdHJ1ZTsKLQotICAgIEdD
M0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBtX3RleHR1cmVVbml0
cy5jbGVhcigpOwotICAgIG1fdGV4dHVyZVVuaXRzLnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKTsKLQotICAgIEdDM0RpbnQgbnVtVmVydGV4QXR0cmlicyA9IDA7Ci0gICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJT
LCAmbnVtVmVydGV4QXR0cmlicyk7Ci0gICAgbV9tYXhWZXJ0ZXhBdHRyaWJzID0gbnVtVmVydGV4
QXR0cmliczsKLSAgICAKLSAgICBtX21heFRleHR1cmVTaXplID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9tYXhU
ZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1
dGVMZXZlbENvdW50KG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpOwotICAgIG1f
bWF4Q3ViZU1hcFRleHR1cmVTaXplID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbV9tYXhDdWJlTWFw
VGV4dHVyZVNpemUpOwotICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVy
ZTo6Y29tcHV0ZUxldmVsQ291bnQobV9tYXhDdWJlTWFwVGV4dHVyZVNpemUsIG1fbWF4Q3ViZU1h
cFRleHR1cmVTaXplKTsKLSAgICBtX21heFJlbmRlcmJ1ZmZlclNpemUgPSAwOwotICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0la
RSwgJm1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7Ci0KLSAgICAvLyBUaGVzZSB0d28gdmFsdWVzIGZy
b20gRVhUX2RyYXdfYnVmZmVycyBhcmUgbGF6aWx5IHF1ZXJpZWQuCi0gICAgbV9tYXhEcmF3QnVm
ZmVycyA9IDA7Ci0gICAgbV9tYXhDb2xvckF0dGFjaG1lbnRzID0gMDsKLQotICAgIG1fYmFja0Ry
YXdCdWZmZXIgPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzsKLSAgICBtX2RyYXdCdWZmZXJzV2Vi
R0xSZXF1aXJlbWVudHNDaGVja2VkID0gZmFsc2U7Ci0gICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRl
ZCA9IGZhbHNlOwotCi0gICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTOjpjcmVhdGUodGhpcywgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmFvVHlwZURlZmF1bHQpOwotICAgIGFkZENvbnRleHRPYmplY3QobV9kZWZhdWx0VmVydGV4QXJy
YXlPYmplY3QuZ2V0KCkpOwotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1fZGVmYXVs
dFZlcnRleEFycmF5T2JqZWN0OwotICAgIAotICAgIG1fdmVydGV4QXR0cmliVmFsdWUucmVzaXpl
KG1fbWF4VmVydGV4QXR0cmlicyk7Ci0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0g
ICAgICAgIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwotICAgIGlmICghaXNHTEVT
MkNvbXBsaWFudCgpKQotICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwotCi0gICAgSW50U2l6
ZSBjYW52YXNTaXplID0gY2xhbXBlZENhbnZhc1NpemUoKTsKLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOwotCi0gICAg
bV9jb250ZXh0LT5yZXNoYXBlKGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQo
KSk7Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXNTaXplLndpZHRoKCksIGNh
bnZhc1NpemUuaGVpZ2h0KCkpOwotICAgIG1fY29udGV4dC0+c2Npc3NvcigwLCAwLCBjYW52YXNT
aXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwotCi0gICAgbV9jb250ZXh0LT5zZXRD
b250ZXh0TG9zdENhbGxiYWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0
TG9zdENhbGxiYWNrPih0aGlzKSk7Ci0gICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxs
YmFjayhzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNh
bGxiYWNrPih0aGlzKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZs
YWdzKCkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLQotICAgIGlmIChQYWdlKiBwYWdlID0g
Y2FudmFzKCktPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlID0gcGFnZS0+c2V0dGluZ3MoKS53ZWJHTEVycm9yc1RvQ29uc29sZUVuYWJsZWQo
KTsKLQotICAgIG1faXNHTEVTMkNvbXBsaWFudCA9IG1fY29udGV4dC0+aXNHTEVTMkNvbXBsaWFu
dCgpOwotICAgIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcyA9IG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3N0cmljdF9hdHRy
aWJzIik7Ci0gICAgbV9pc1Jlc291cmNlU2FmZSA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUiKTsKLSAgICBpZiAobV9pc0dM
RVMyQ29tcGxpYW50KSB7Ci0gICAgICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfbnBvdCIpOwotICAg
ICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmlzRW5hYmxlZCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIik7Ci0gICAg
ICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+aXNFbmFibGVkKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICB9Ci0gICAg
bV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
aXNFbmFibGVkKCJHTF9FWFRfcm9idXN0bmVzcyIpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNvbnN0Ci17Ci0gICAgaWYgKFBh
Z2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybiBw
YWdlLT5zZXR0aW5ncygpLnByaXZpbGVnZWRXZWJHTEV4dGVuc2lvbnNFbmFibGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQotewotICAgIGlmICghbV9jb21wcmVz
c2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KSkKLSAgICAgICAgbV9jb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdHMuYXBwZW5kKGZvcm1hdCk7Ci19Ci0KLVdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6fldlYkdMUmVuZGVyaW5nQ29udGV4dCgpCi17Ci0gICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVu
Y2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKLSAg
ICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVmb3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3Zl
ZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgotICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxw
dHI7Ci0gICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBudWxscHRyOwotICAgIG1fYm91
bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
ID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRQcm9ncmFtID0gbnVsbHB0cjsKLSAgICBtX2ZyYW1l
YnVmZmVyQmluZGluZyA9IG51bGxwdHI7Ci0gICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVs
bHB0cjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmluZGluZyA9IG51
bGxwdHI7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9ibGFja1RleHR1cmUyRCA9IG51bGxwdHI7Ci0gICAg
bV9ibGFja1RleHR1cmVDdWJlTWFwID0gbnVsbHB0cjsKLQotICAgIGlmICghbV9pc1BlbmRpbmdQ
b2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsK
LSAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgICAgIG1fY29udGV4dEdy
b3VwLT5yZW1vdmVDb250ZXh0KHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgpCi17Ci0gICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGRyYXdp
bmcgYnVmZmVyIGhvbGRzIGEgY29udGV4dCByZWZlcmVuY2UuIEl0IG11c3QgYWxzbyBiZSBkZXN0
cm95ZWQKLSAgICAvLyBpbiBvcmRlciBmb3IgdGhlIGNvbnRleHQgdG8gYmUgcmVsZWFzZWQuCi0g
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLmNsZWFyKCk7
Ci0KLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExv
c3RDYWxsYmFjayhudWxscHRyKTsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VD
YWxsYmFjayhudWxscHRyKTsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKLXsKLSAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29u
dGV4dC0+bWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsKLQotICAgIG1f
bGF5ZXJDbGVhcmVkID0gZmFsc2U7Ci0gICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMo
KS0+cmVuZGVyQm94KCk7Ci0gICAgaWYgKGlzQWNjZWxlcmF0ZWQoKSAmJiByZW5kZXJCb3ggJiYg
cmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAgbV9tYXJr
ZWRDYW52YXNEaXJ0eSA9IHRydWU7Ci0gICAgICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdl
KCk7Ci0gICAgICAgIHJlbmRlckJveC0+Y29udGVudENoYW5nZWQoQ2FudmFzQ2hhbmdlZCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KSB7Ci0gICAgICAg
ICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGNhbnZhcygpLT5k
aWREcmF3KEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCBjbGFtcGVkQ2FudmFzU2l6ZSgpKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVh
cklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fY29udGV4
dC0+bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFyZWQKLSAgICAgICAgfHwgbV9hdHRy
aWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFzayAmJiBtX2ZyYW1lYnVmZmVyQmlu
ZGluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxXZWJHTENvbnRleHRB
dHRyaWJ1dGVzPiBjb250ZXh0QXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0K
LSAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0
aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCi0gICAgYm9vbCBjb21iaW5lZENsZWFy
ID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKLQotICAgIG1fY29udGV4dC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpZiAoY29tYmluZWRDbGVhciAm
JiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKLSAgICAgICAg
bV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9yWzBdIDog
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzFdID8gbV9jbGVh
ckNvbG9yWzFdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNr
WzJdID8gbV9jbGVhckNvbG9yWzJdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY29sb3JNYXNrWzNdID8gbV9jbGVhckNvbG9yWzNdIDogMCk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgbV9jb250ZXh0LT5jb2xv
ck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgR0MzRGJpdGZpZWxkIGNsZWFyTWFz
ayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIGlmIChjb250ZXh0
QXR0cmlidXRlcy0+ZGVwdGgoKSkgewotICAgICAgICBpZiAoIWNvbWJpbmVkQ2xlYXIgfHwgIW1f
ZGVwdGhNYXNrIHx8ICEobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklU
KSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxLjBmKTsKLSAgICAgICAgY2xl
YXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOwotICAgICAgICBt
X2NvbnRleHQtPmRlcHRoTWFzayh0cnVlKTsKLSAgICB9Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzLT5zdGVuY2lsKCkpIHsKLSAgICAgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsICYgbV9zdGVuY2lsTWFzayk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOwotICAgICAg
ICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKLSAg
ICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVCwgMHhGRkZGRkZGRik7Ci0gICAgfQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+Y2xlYXJGcmFtZWJ1ZmZlcnMoY2xlYXJNYXNrKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAw
KTsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOwotICAgIH0KLQotICAgIHJl
c3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0g
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci0gICAg
bV9sYXllckNsZWFyZWQgPSB0cnVlOwotCi0gICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVBZnRlckNsZWFyKCkKLXsK
LSAgICAvLyBSZXN0b3JlIHRoZSBzdGF0ZSB0aGF0IHRoZSBjb250ZXh0IHNldC4KLSAgICBpZiAo
bV9zY2lzc29yRW5hYmxlZCkKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY2xlYXJD
b2xvclswXSwgbV9jbGVhckNvbG9yWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Ns
ZWFyQ29sb3JbMl0sIG1fY2xlYXJDb2xvclszXSk7Ci0gICAgbV9jb250ZXh0LT5jb2xvck1hc2so
bV9jb2xvck1hc2tbMF0sIG1fY29sb3JNYXNrWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY29sb3JNYXNrWzJdLCBtX2NvbG9yTWFza1szXSk7Ci0gICAgbV9jb250ZXh0LT5jbGVhckRl
cHRoKG1fY2xlYXJEZXB0aCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0
ZW5jaWwpOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRl
eHQzRDo6RlJPTlQsIG1fc3RlbmNpbE1hc2spOwotICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKG1f
ZGVwdGhNYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtMYXllckNv
bXBvc2l0ZWQoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkK
LXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoY2FudmFzKCktPmRvY3VtZW50KCkucHJpbnRpbmcoKSkKLSAgICAgICAgY2FudmFz
KCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOwotCi0gICAgLy8gVW50aWwgdGhlIGNhbnZhcyBp
cyB3cml0dGVuIHRvIGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhlIGNsZWFyIHRoYXQKLSAgICAvLyBo
YXBwZW5lZCBhZnRlciBpdCB3YXMgY29tcG9zaXRlZCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUg
Y29tcG9zaXRvci4KLSAgICBpZiAobV9jb250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAmJiAhbV9h
dHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPnBh
aW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhjYW52YXMoKS0+YnVmZmVyKCkpOwotCi0gICAg
ICAgIGNhbnZhcygpLT5tYWtlUHJlc2VudGF0aW9uQ29weSgpOwotICAgIH0gZWxzZQotICAgICAg
ICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgY2xlYXJJZkNvbXBvc2l0
ZWQoKTsKLQotICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7Ci0g
ICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKLSAgICBtX2NvbnRleHQtPnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSwgbV9kcmF3aW5n
QnVmZmVyLmdldCgpKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFt
ZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGltYWdlRGF0YSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEo
bV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAg
ICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclpl
cm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlRGF0
YTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFRoaXMgaXMgYW4gYXBwcm94aW1hdGlvbiBiZWNhdXNlIGF0IFdl
YkdMUmVuZGVyaW5nQ29udGV4dCBsZXZlbCB3ZSBkb24ndAotICAgIC8vIGtub3cgaWYgdGhlIHVu
ZGVybHlpbmcgRkJPIHVzZXMgdGV4dHVyZXMgb3IgcmVuZGVyYnVmZmVycy4KLSAgICBHQzNEaW50
IG1heFNpemUgPSBzdGQ6Om1pbihtX21heFRleHR1cmVTaXplLCBtX21heFJlbmRlcmJ1ZmZlclNp
emUpOwotICAgIC8vIExpbWl0IGRyYXdpbmcgYnVmZmVyIHNpemUgdG8gNGsgdG8gYXZvaWQgbWVt
b3J5IGV4aGF1c3Rpb24uCi0gICAgY29uc3QgaW50IHNpemVVcHBlckxpbWl0ID0gNDA5NjsKLSAg
ICBtYXhTaXplID0gc3RkOjptaW4obWF4U2l6ZSwgc2l6ZVVwcGVyTGltaXQpOwotICAgIEdDM0Rp
bnQgbWF4V2lkdGggPSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdwb3J0RGltc1swXSk7Ci0g
ICAgR0MzRGludCBtYXhIZWlnaHQgPSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdwb3J0RGlt
c1sxXSk7Ci0gICAgd2lkdGggPSBjbGFtcCh3aWR0aCwgMSwgbWF4V2lkdGgpOwotICAgIGhlaWdo
dCA9IGNsYW1wKGhlaWdodCwgMSwgbWF4SGVpZ2h0KTsKLQotICAgIGlmIChtX25lZWRzVXBkYXRl
KSB7Ci0gICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgp
OwotICAgICAgICBpZiAocmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpKQotICAgICAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXND
aGFuZ2VkKTsKLSAgICAgICAgbV9uZWVkc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3
bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgotICAgIC8vIGNsZWFy
IChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KLSAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7Ci0gICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwotCi0gICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0
T3JaZXJvKG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRp
bmcuZ2V0KCkpKTsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fcmVuZGVyYnVmZmVyQmluZGluZy5n
ZXQoKSkpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3Ja
ZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZHJhd2lu
Z0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndp
ZHRoKCk7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQoKSBjb25zdAotewotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgIHJldHVybiBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKLQotICAgIHJldHVybiBtX2NvbnRleHQt
PmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXVuc2lnbmVkIGlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpCi17Ci0g
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihHQzNEYnl0ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdWJ5dGUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdD
M0RzaG9ydCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVzaG9ydCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RpbnQpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNE
dWludCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoR0MzRGZsb2F0KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0
dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwID49IG1f
dGV4dHVyZVVuaXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0dXJlIHVuaXQg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9hY3RpdmVUZXh0
dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7Ci0gICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRBY3RpdmVUZXh0dXJlVW5pdCh0ZXh0dXJl
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImF0dGFjaFNoYWRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXByb2dyYW0tPmF0dGFjaFNoYWRlcihzaGFkZXIpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImF0
dGFjaFNoYWRlciIsICJzaGFkZXIgYXR0YWNobWVudCBhbHJlYWR5IGhhcyBzaGFkZXIiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihvYmplY3RP
clplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXItPm9uQXR0
YWNoZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRyaWJMb2Nh
dGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYmlu
ZEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZh
bGlkYXRlTG9jYXRpb25MZW5ndGgoImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiYmluZEF0dHJpYkxvY2F0aW9uIiwg
bmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJiaW5kQXR0cmliTG9jYXRpb24iLCAicmVzZXJ2ZWQgcHJlZml4Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
V2ViR0xPYmplY3QqIG9iamVjdCwgYm9vbCYgZGVsZXRlZCkKLXsKLSAgICBkZWxldGVkID0gZmFs
c2U7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChvYmplY3QpIHsKLSAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNv
bnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qg
bm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgZGVsZXRlZCA9ICFvYmplY3QtPm9iamVjdCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNo
ZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kQnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBidWZmZXIgPSAwOwotICAgIGlm
IChidWZmZXIgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAmJiBidWZmZXItPmdldFRhcmdldCgpICE9
IHRhcmdldCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQnVmZmVyIiwgImJ1ZmZlcnMgY2FuIG5vdCBiZSB1c2Vk
IHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKLSAgICAgICAgbV9i
b3VuZEFycmF5QnVmZmVyID0gYnVmZmVyOwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+c2V0RWxlbWVudEFycmF5QnVmZmVyKGJ1ZmZlcik7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJiaW5kQnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVy
KSk7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgYnVmZmVyLT5zZXRUYXJnZXQodGFyZ2V0KTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVj
a09iamVjdFRvQmVCb3VuZCgiYmluZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBidWZmZXIgPSAwOwotICAg
IGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5k
RnJhbWVidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZyhvYmpl
Y3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBJbnN0ZWFkIG9m
IGJpbmRpbmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCi0gICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+YmluZCgpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKLSAgICBpZiAoYnVmZmVyKQot
ICAgICAgICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKLSAgICBhcHBseVN0ZW5jaWxU
ZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7
Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFJlbmRlcmJ1ZmZlciIsIHJlbmRl
ckJ1ZmZlciwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkKLSAg
ICAgICAgcmVuZGVyQnVmZmVyID0gMDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJn
ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcg
PSByZW5kZXJCdWZmZXI7Ci0gICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwg
b2JqZWN0T3JaZXJvKHJlbmRlckJ1ZmZlcikpOwotICAgIGlmIChyZW5kZXJCdWZmZXIpCi0gICAg
ICAgIHJlbmRlckJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1
cmUqIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRU
ZXh0dXJlIiwgdGV4dHVyZSwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVs
ZXRlZCkKLSAgICAgICAgdGV4dHVyZSA9IDA7Ci0gICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+
Z2V0VGFyZ2V0KCkgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImJpbmRUZXh0dXJlIiwgInRleHR1cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRh
cmdldHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHQzNEaW50IG1heExldmVsID0g
MDsKLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7Ci0g
ICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRp
bmcgPSB0ZXh0dXJlOwotICAgICAgICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOwotCi0g
ICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIgJiYgIW1fYWN0aXZlVGV4dHVyZVVuaXQpCi0gICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmcob2JqZWN0T3JaZXJv
KHRleHR1cmUpKTsKLQotICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4
dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IHRleHR1cmU7Ci0gICAgICAgIG1heExl
dmVsID0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kVGV4
dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkpOwotICAg
IGlmICh0ZXh0dXJlKQotICAgICAgICB0ZXh0dXJlLT5zZXRUYXJnZXQodGFyZ2V0LCBtYXhMZXZl
bCk7Ci0KLSAgICAvLyBOb3RlOiBwcmV2aW91c2x5IHdlIHVzZWQgdG8gYXV0b21hdGljYWxseSBz
ZXQgdGhlIFRFWFRVUkVfV1JBUF9SCi0gICAgLy8gcmVwZWF0IG1vZGUgdG8gQ0xBTVBfVE9fRURH
RSBmb3IgY3ViZSBtYXAgdGV4dHVyZXMsIGJlY2F1c2UgT3BlbkdMCi0gICAgLy8gRVMgMi4wIGRv
ZXNuJ3QgZXhwb3NlIHRoaXMgZmxhZyAoYSBidWcgaW4gdGhlIHNwZWNpZmljYXRpb24pIGFuZAot
ICAgIC8vIG90aGVyd2lzZSB0aGUgYXBwbGljYXRpb24gaGFzIG5vIGNvbnRyb2wgb3ZlciB0aGUg
c2VhbXMgaW4gdGhpcwotICAgIC8vIGRpbWVuc2lvbi4gSG93ZXZlciwgaXQgYXBwZWFycyB0aGF0
IHN1cHBvcnRpbmcgdGhpcyBwcm9wZXJseSBvbiBhbGwKLSAgICAvLyBwbGF0Zm9ybXMgaXMgZmFp
cmx5IGludm9sdmVkICh3aWxsIHJlcXVpcmUgYSBIYXNoTWFwIGZyb20gdGV4dHVyZSBJRAotICAg
IC8vIGluIGFsbCBwb3J0cyksIGFuZCB3ZSBoYXZlIG5vdCBoYWQgYW55IGNvbXBsYWludHMsIHNv
IHRoZSBsb2dpYyBoYXMKLSAgICAvLyBiZWVuIHJlbW92ZWQuCi19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwg
R0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZENvbG9y
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKK1dlYkdMMVJlbmRlcmluZ0NvbnRleHQ6
OldlYkdMMVJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBhdHRyaWJ1dGVzKQogewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRF
cXVhdGlvbiIsIG1vZGUpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVx
dWF0aW9uKG1vZGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVh
dGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24o
ImJsZW5kRXF1YXRpb24iLCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVu
ZEVxdWF0aW9uIiwgbW9kZUFscGhhKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+
YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51
bSBkZmFjdG9yKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0g
ZHN0QWxwaGEpCi17Ci0gICAgLy8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBy
ZXN0cmljdGlvbnMgYXMgUkdCLgotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0Is
IGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVu
dW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdl
YkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJE
YXRhIiwgdGFyZ2V0LCB1c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJz
aXplID09IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNz
b2NpYXRlQnVmZmVyRGF0YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19j
YXN0PEdDM0RzaXplaXB0cj4oc2l6ZSksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0
YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRh
dGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVy
RGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0
LCB1c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRh
dGEpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJidWZmZXJEYXRhIiwgIm5vIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewot
ICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVM
ZW5ndGgoKSwgZGF0YS0+ZGF0YSgpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEg
ZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRh
IGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRh
dGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIq
IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJn
ZXQsIHVzYWdlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
ZGF0YSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7
Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0
ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1
ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZl
IHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0
ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
dWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZm
ZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdl
YkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJT
dWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIGlm
ICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJi
dWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRl
QnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRh
cmdldCwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgp
LCBkYXRhLT5kYXRhKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZh
aWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3Mg
aXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAg
fQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51
bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZl
ciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAi
b2Zmc2V0IDwgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZGF0YSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nl
c3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0
YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1
YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRy
ZXNzKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVs
bCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4K
LSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi1H
QzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0Mz
RGVudW0gdGFyZ2V0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0g
ICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9DT01QTEVURTsKLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZm
ZXIgaW5jb21wbGV0ZSI7Ci0gICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPmNoZWNrU3RhdHVzKCZyZWFzb24pOwotICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIHByaW50R0xXYXJuaW5nVG9D
b25zb2xlKCJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0gICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKHRhcmdldCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobWFzayAmIH4oR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiY2xlYXIiLCAiaW52YWxpZCBtYXNrIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNz
KGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04sICJjbGVhciIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKCFjbGVhcklmQ29tcG9zaXRlZChtYXNrKSkKLSAgICAgICAgbV9jb250ZXh0LT5j
bGVhcihtYXNrKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNE
ZmxvYXQgYiwgR0MzRGZsb2F0IGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChzdGQ6OmlzbmFuKHIpKQotICAgICAgICByID0g
MDsKLSAgICBpZiAoc3RkOjppc25hbihnKSkKLSAgICAgICAgZyA9IDA7Ci0gICAgaWYgKHN0ZDo6
aXNuYW4oYikpCi0gICAgICAgIGIgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFuKGEpKQotICAgICAg
ICBhID0gMTsKLSAgICBtX2NsZWFyQ29sb3JbMF0gPSByOwotICAgIG1fY2xlYXJDb2xvclsxXSA9
IGc7Ci0gICAgbV9jbGVhckNvbG9yWzJdID0gYjsKLSAgICBtX2NsZWFyQ29sb3JbM10gPSBhOwot
ICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsZWFyRGVw
dGggPSBkZXB0aDsKLSAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGVh
clN0ZW5jaWwgPSBzOwotICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJv
b2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bG9yTWFza1swXSA9IHJlZDsKLSAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOwotICAgIG1fY29s
b3JNYXNrWzJdID0gYmx1ZTsKLSAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwotICAgIG1fY29u
dGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVy
Iiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRl
cihvYmplY3RPclplcm8oc2hhZGVyKSk7Ci0gICAgR0MzRGludCB2YWx1ZTsKLSAgICBtX2NvbnRl
eHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6
Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7Ci0gICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyog
ZGF0YSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQi
LCB0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2YWxpZGF0ZUNv
bXByZXNzZWRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1h
Z2UyRCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKGJvcmRlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBu
b3QgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVDb21wcmVz
c2VkVGV4RGltZW5zaW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3
aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdp
ZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2Vk
VGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpIHsKLSAgICAgICAgaWYgKGxldmVsICYm
IFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNz
ZWRUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgYm9y
ZGVyLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmICht
X2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8v
IFRoZSBjb21wcmVzc2VkVGV4SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdM
VGV4dHVyZSBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCi0gICAgICAg
IHRleC0+bWFya0ludmFsaWQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIHRl
eC0+c2V0Q29tcHJlc3NlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlk
YXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQo
Zm9ybWF0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRl
eEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgZGF0YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFs
aWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZm9ybWF0ICE9
IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJl
c3NlZFRleFN1YkltYWdlMkQiLCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3Nl
ZFRleFN1YkRpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0
YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKLSAgICB0ZXgtPnNldENvbXBy
ZXNzZWQoKTsKKyAgICBtX3R5cGUgPSAid2ViZ2wxIjsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBmb3JtYXQpCitXZWJHTDFSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cmlidXRlcykgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKHBhc3NlZENhbnZh
cywgY29udGV4dCwgYXR0cmlidXRlcykKIHsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dENsZWFyQml0c0J5Rm9ybWF0KGZvcm1hdCkgJiAoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JV
RkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBjYW4gbm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0
byIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAg
IG1fdHlwZSA9ICJ3ZWJnbDEiOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29w
eVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1l
dGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4SW1hZ2UyRCIsIGludGVybmFsZm9y
bWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICgh
dGV4KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JC
dWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVy
Q29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCAiZnJhbWVidWZmZXIg
aXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3
aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93
ZXIgb2YgMiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHJlYXNv
biA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgp
LCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29w
eVRleEltYWdlMkQiLCByZWFzb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFy
SWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKLSAgICAgICAgU2Nv
cGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJv
cmRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBi
aW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7
Ci0gICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwotICAgICAgICBHQzNEc2l6ZWkg
Y2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwotICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVm
ZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBl
ZEhlaWdodCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2Fm
ZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsZm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV91bnBhY2tBbGlnbm1lbnQp
OwotICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDAp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgs
IGNsaXBwZWRIZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBp
ZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91
bGQgYmUgZXhlY3V0ZWQuCi0gICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvcHlUZXhTdWJJbWFnZTJE
IiwgdGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRl
eCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0
cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVT
aXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpIHx8ICF2YWxpZGF0ZVNp
emUoImNvcHlUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAvLyBCZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBjaGVjayBpZiBv
dmVyZmxvdyBoYXBwZW5zIGZpcnN0LgotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlv
ZmZzZXQgKyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVu
c2lvbnMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoeG9mZnNldCArIHdpZHRo
ID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4
LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJy
ZWN0YW5nbGUgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleFN1YkltYWdl
MkQiLCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzVGV4SW50
ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdl
dEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1h
Z2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29t
cGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAm
cmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsIHJlYXNv
bik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAg
ICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmlu
ZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdl
dCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKLSAgICAgICAgR0MzRHNpemVpIGNs
aXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKLSAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZl
ckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRI
ZWlnaHQpKSB7Ci0gICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXgtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpOwotICAgICAgICAgICAgR0MzRGVudW0gdHlwZSA9IHRleC0+
Z2V0VHlwZSh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNp
Z25lZCBjaGFyW10+IHplcm87Ci0gICAgICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemU7Ci0gICAgICAgICAgICAgICAgR0MzRGVu
dW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlw
ZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCAwKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAiY29weVRleFN1YkltYWdl
MkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB6ZXJvID0gc3RkOjptYWtlX3VuaXF1ZTx1
bnNpZ25lZCBjaGFyW10+KHNpemUpOwotICAgICAgICAgICAgICAgIGlmICghemVybykgewotICAg
ICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKLSAgICAgICAgICAg
IGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7Ci0gICAgICAgICAg
ICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdl
dCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb250
ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFgg
LSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBw
ZWRIZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBt
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRy
PFdlYkdMQnVmZmVyPiBvID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFy
ZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xG
cmFtZWJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJHTEZyYW1lYnVmZmVyOjpj
cmVhdGUodGhpcyk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4g
bzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdM
VGV4dHVyZTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4g
byA9IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdl
dCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJl
ZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhp
cyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1Q
YXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRl
cihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY3Jl
YXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBvID0gV2ViR0xTaGFkZXI6OmNy
ZWF0ZSh0aGlzLCB0eXBlKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0
dXJuIG87Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjdWxsRmFjZShHQzNEZW51
bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1vZGUpOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAob2JqZWN0LT5vYmpl
Y3QoKSkKLSAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIGNvbnRleHQgaGVyZSBiZWNhdXNl
IHdlIHdhbnQKLSAgICAgICAgLy8gdGhpbmdzIGluIHRoaXMgY29udGV4dCB1bmJvdW5kLgotICAg
ICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihX
ZWJHTEJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghZGVsZXRlT2JqZWN0KGJ1ZmZlcikpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAobV9ib3VuZEFycmF5QnVmZmVyID09IGJ1ZmZlcikKLSAg
ICAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gMDsKLQotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC0+dW5iaW5kQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsK
LSAgICBpZiAoIWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZlcikpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKLSAgICAgICAgbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0g
ICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZygwKTsKLSAg
ICAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJh
Y2sgdG8gaW50ZXJuYWwgZmJvLgotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkK
LXsKLSAgICBkZWxldGVPYmplY3QocHJvZ3JhbSk7Ci0gICAgLy8gV2UgZG9uJ3QgcmVzZXQgbV9j
dXJyZW50UHJvZ3JhbSB0byAwIGhlcmUgYmVjYXVzZSB0aGUgZGVsZXRpb24gb2YgdGhlCi0gICAg
Ly8gY3VycmVudCBwcm9ncmFtIGlzIGRlbGF5ZWQuCi19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZl
cikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChyZW5kZXJidWZmZXIpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcpCi0gICAg
ICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudEZyb21C
b3VuZEZyYW1lYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKLXsKLSAgICBkZWxldGVP
YmplY3Qoc2hhZGVyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRl
eHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIGlmICghZGVsZXRlT2JqZWN0KHRl
eHR1cmUpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rl
eHR1cmVVbml0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1
cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nKQotICAgICAgICAgICAgbV90ZXh0dXJlVW5pdHNb
aV0udGV4dHVyZTJEQmluZGluZyA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh0ZXh0dXJlID09IG1f
dGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZykKLSAgICAgICAgICAgIG1fdGV4
dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IG51bGxwdHI7Ci0gICAgfQotICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmct
PnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcih0ZXh0dXJlKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bnRleHQtPmRlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2RlcHRoTWFzayA9IGZsYWc7Ci0gICAg
bV9jb250ZXh0LT5kZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh6
TmVhciA+IHpGYXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVwdGhSYW5nZSIsICJ6TmVhciA+IHpGYXIiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpG
YXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
ZGV0YWNoU2hhZGVyIiwgInNoYWRlciBub3QgYXR0YWNoZWQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSks
IG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3ND
b250ZXh0M0QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdD
M0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7Ci0gICAgICAgIG1fc3Rl
bmNpbEVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNz
b3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRpc2Fi
bGUoY2FwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0
dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoaW5kZXgpOwotICAgIHN0YXRlLmVuYWJsZWQgPSBmYWxzZTsKLQotICAgIGlmIChp
bmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICBtX2NvbnRleHQtPmRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0
eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1l
bnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCk7Ci0gICAgCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChvZmZzZXQgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7Ci0g
ICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBpbnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlz
aWJsZSBieSA0IGZvciBhbGlnbm1lbnQgcmVhc29ucy4KLSAgICAgICAgaWYgKG9mZnNldCAlIDQp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFu
IGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICBvZmZzZXQgLz0gNDsKLQotICAgICAgICBHQzNEc2l6
ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gNDsKLSAgICAgICAg
aWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlQpIHsKLSAgICAgICAgLy8gRm9yIGFuIHVuc2lnbmVkIHNob3J0IGFycmF5LCBvZmZz
ZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgMiBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCi0gICAgICAg
IGlmIChvZmZzZXQgJSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8v
IE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KLSAgICAgICAgb2Zmc2V0IC89IDI7Ci0K
LSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgo
KSAvIDI7Ci0gICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVt
ZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwg
Y291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
SW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCYgbnVtRWxlbWVu
dHNSZXF1aXJlZCkKLXsKLSAgICAvLyBQZXJmb3JtcyBjb25zZXJ2YXRpdmUgdmFsaWRhdGlvbiBi
eSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgotICAgIC8vIHRoZSBnaXZlbiB0eXBlIHBlciBl
bGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBib3VuZAotICAgIC8vIGFycmF5IGJ1
ZmZlcnMgaGF2ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0aXNmeSB0aGF0IG1heGltdW0KLSAgICAv
LyBpbmRleCwgc2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXItZHJhdy1jYWxsIGl0ZXJhdGlvbiBpbgot
ICAgIC8vIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UuCi0gICAgCi0gICAgUmVmUHRyPFdlYkdM
QnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDM0RzaXplaXB0ciBudW1FbGVtZW50cyA9IGVs
ZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwotICAgIC8vIFRoZSBjYXNlIGNvdW50PT0w
IGlzIGFscmVhZHkgZGVhbHQgd2l0aCBpbiBkcmF3RWxlbWVudHMgYmVmb3JlIHZhbGlkYXRlSW5k
ZXhBcnJheUNvbnNlcnZhdGl2ZS4KLSAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgY29uc3QgQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1
ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgQVNTRVJUKGJ1ZmZlcik7Ci0KLSAgICBp
bnQgbWF4SW5kZXggPSBlbGVtZW50QXJyYXlCdWZmZXItPmdldENhY2hlZE1heEluZGV4KHR5cGUp
OwotICAgIGlmIChtYXhJbmRleCA8IDApIHsKLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11
bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5kZXgu
Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0
aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBm
b3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAgICAg
ICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ld
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDogewotICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0g
c2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAgICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0
YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAg
ICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAg
ICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50Pihw
W2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6IHsKLSAgICAgICAgICAgIGlmICghbV9vZXNFbGVt
ZW50SW5kZXhVaW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdWludCk7Ci0gICAgICAgICAgICBjb25zdCBHQzNE
dWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oYnVmZmVyLT5kYXRhKCkpOwot
ICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsr
KQotICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19j
YXN0PGludD4ocFtpXSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBl
bGVtZW50QXJyYXlCdWZmZXItPnNldENhY2hlZE1heEluZGV4KHR5cGUsIG1heEluZGV4KTsKLSAg
ICB9Ci0KLSAgICBpZiAobWF4SW5kZXggPj0gMCkgewotICAgICAgICAvLyBUaGUgbnVtYmVyIG9m
IHJlcXVpcmVkIGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG1heGltdW0KLSAgICAgICAg
Ly8gaW5kZXggdGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgotICAgICAgICBudW1FbGVtZW50c1JlcXVp
cmVkID0gbWF4SW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0
ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQotewotICAgIEFTU0VSVChj
b3VudCA+PSAwICYmIG9mZnNldCA+PSAwKTsKLSAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSAwOwot
ICAgIAotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLQotICAgIGlmICgh
ZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNv
dW50KSB7Ci0gICAgICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSAwOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5
QnVmZmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGxvbmcgdW9m
ZnNldCA9IG9mZnNldDsKLSAgICB1bnNpZ25lZCBsb25nIG4gPSBjb3VudDsKLQotICAgIGlmICh0
eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAgLy8gTWFr
ZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89IHNpemVvZihH
QzNEdWludCk7Ci0gICAgICAgIGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0MzRHVpbnQqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRh
KCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlm
ICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAg
ICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVs
ZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89IHNpemVvZihHQzNEdXNob3J0KTsKLSAg
ICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQq
PihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9m
ZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlmICgqcCA+IGxh
c3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAgICAgICAgICsr
cDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSkgewotICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2Fz
dDxjb25zdCBHQzNEdWJ5dGUqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZl
cigpLT5kYXRhKCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAg
ICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAq
cDsKLSAgICAgICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZW4gc2V0
IHRoZSBsYXN0IGluZGV4IGluIHRoZSBpbmRleCBhcnJheSBhbmQgbWFrZSBzdXJlIGl0IGlzIHZh
bGlkLgotICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBsYXN0SW5kZXggKyAxOwotICAgIHJldHVy
biBudW1FbGVtZW50c1JlcXVpcmVkID4gMDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2ln
bmVkIHByaW1pdGl2ZUNvdW50KQotewotICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTG9vayBpbiBlYWNoIGVuYWJsZWQgdmVydGV4IGF0
dHJpYiBhbmQgY2hlY2sgaWYgdGhleSd2ZSBiZWVuIGJvdW5kIHRvIGEgYnVmZmVyLgotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21heFZlcnRleEF0dHJpYnM7ICsraSkgewotICAgICAg
ICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaSku
dmFsaWRhdGVCaW5kaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKGVsZW1lbnRDb3VudCA8PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotCi0gICAg
Ly8gTG9vayBpbiBlYWNoIGNvbnN1bWVkIHZlcnRleCBhdHRyaWIgKGJ5IHRoZSBjdXJyZW50IHBy
b2dyYW0pLgotICAgIGJvb2wgc2F3Tm9uSW5zdGFuY2VkQXR0cmliID0gZmFsc2U7Ci0gICAgYm9v
bCBzYXdFbmFibGVkQXR0cmliID0gZmFsc2U7Ci0gICAgaW50IG51bUFjdGl2ZUF0dHJpYkxvY2F0
aW9ucyA9IG1fY3VycmVudFByb2dyYW0tPm51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zOyArK2kpIHsKLSAg
ICAgICAgaW50IGxvYyA9IG1fY3VycmVudFByb2dyYW0tPmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9u
KGkpOwotICAgICAgICBpZiAobG9jID49IDAgJiYgbG9jIDwgc3RhdGljX2Nhc3Q8aW50PihtX21h
eFZlcnRleEF0dHJpYnMpKSB7Ci0gICAgICAgICAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGxvYyk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZW5h
YmxlZCkgewotICAgICAgICAgICAgICAgIHNhd0VuYWJsZWRBdHRyaWIgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIC8vIEF2b2lkIG9mZi1ieS1vbmUgZXJyb3JzIGluIG51bUVsZW1lbnRzIGNvbXB1
dGF0aW9uLgotICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgbGFzdCBlbGVtZW50LCB3ZSB3aWxs
IG9ubHkgdG91Y2ggdGhlIGRhdGEgZm9yIHRoZQotICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQg
YW5kIG5vdGhpbmcgYmV5b25kIGl0LgotICAgICAgICAgICAgICAgIGludCBieXRlc1JlbWFpbmlu
ZyA9IHN0YXRpY19jYXN0PGludD4oc3RhdGUuYnVmZmVyQmluZGluZy0+Ynl0ZUxlbmd0aCgpIC0g
c3RhdGUub2Zmc2V0KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN0YXRlLnN0cmlkZSA+IDApOwotICAgICAgICAgICAg
ICAgIGlmIChieXRlc1JlbWFpbmluZyA+PSBzdGF0ZS5ieXRlc1BlckVsZW1lbnQpCi0gICAgICAg
ICAgICAgICAgICAgIG51bUVsZW1lbnRzID0gMSArIChieXRlc1JlbWFpbmluZyAtIHN0YXRlLmJ5
dGVzUGVyRWxlbWVudCkgLyBzdGF0ZS5zdHJpZGU7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0
ZS5kaXZpc29yKQotICAgICAgICAgICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGlmICgoIXN0YXRlLmRpdmlzb3IgJiYgZWxlbWVudENvdW50
ID4gbnVtRWxlbWVudHMpIHx8IChzdGF0ZS5kaXZpc29yICYmIHByaW1pdGl2ZUNvdW50ID4gbnVt
RWxlbWVudHMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXNhd05vbkluc3RhbmNlZEF0dHJpYiAm
JiBzYXdFbmFibGVkQXR0cmliKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlV2ViR0xPYmpl
Y3QoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCogb2JqZWN0KQotewotICAg
IGlmICghb2JqZWN0IHx8ICFvYmplY3QtPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBvYmplY3Qgb3Igb2JqZWN0IGRlbGV0ZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVu
Y3Rpb25OYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGZpcnN0IDwgMCB8
fCBjb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChwcmltY291bnQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJwcmltY291bnQgPCAw
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICAvLyBFbnN1cmUgd2UgaGF2
ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkRmlyc3QoZmlyc3QpOwotICAgICAgICBDaGVja2VkPEdDM0RpbnQs
IFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOwotICAgICAgICBDaGVja2VkPEdD
M0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkU3VtID0gY2hlY2tlZEZpcnN0ICsgY2hlY2tl
ZENvdW50OwotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2Vk
UHJpbUNvdW50KHByaW1jb3VudCk7Ci0gICAgICAgIGlmIChjaGVja2VkU3VtLmhhc092ZXJmbG93
ZWQoKSB8fCBjaGVja2VkUHJpbUNvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCAhdmFsaWRhdGVWZXJ0
ZXhBdHRyaWJ1dGVzKGNoZWNrZWRTdW0udW5zYWZlR2V0KCksIGNoZWNrZWRQcmltQ291bnQudW5z
YWZlR2V0KCkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNz
IG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXZhbGlkYXRlVmVydGV4QXR0cmlidXRl
cygwKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3Jy
ZWN0bHkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
emVpIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
Ci0gICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXMiLCBtb2RlLCBmaXJzdCwg
Y291bnQsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwot
Ci0gICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7Ci0gICAgaWYgKCFpc0dM
RVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0
ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwotICAgIGlmICghaXNHTEVTMk5QT1RT
dHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwg
dHJ1ZSk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0g
ICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKLSAg
ICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKLSAgICBp
ZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVz
cygiZHJhd0FycmF5cyIsIGZhbHNlKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHMpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5jdGlv
bk5hbWUsIG1vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXZhbGlkYXRl
U3RlbmNpbFNldHRpbmdzKGZ1bmN0aW9uTmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAg
ICAgICAgaWYgKG1fb2VzRWxlbWVudEluZGV4VWludCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGNvdW50IDwgMCB8fCBvZmZzZXQgPCAwKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJjb3VudCBvciBvZmZzZXQgPCAwIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0Q2hh
bmdlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJBWV9CVUZGRVIgYm91bmQiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVy
aW5nIHN0YXRlCi0gICAgICAgIGlmICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKGNvdW50LCB0
eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJB
WV9CVUZGRVIiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoIWNvdW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXZh
bGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlk
YXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cykpIHsKLSAgICAgICAgICAgIGlmICghdmFs
aWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0
cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVt
RWxlbWVudHMpKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFj
Y2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgh
dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVm
ZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVh
c29uKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1v
ZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLQotICAgIHVuc2lnbmVk
IG51bUVsZW1lbnRzID0gMDsKLSAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxl
bWVudHMiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAgICBib29sIHZlcnRleEF0
dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewot
ICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5
UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVt
RWxlbWVudHMpOwotICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKLSAgICB9Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmlj
dCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIHRy
dWUpOwotICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
LSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHMiLCBmYWxzZSk7
Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwgY2FwKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewot
ICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgYXBwbHlTdGVuY2lsVGVz
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsK
LSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7Ci0gICAgfQotICAgIG1fY29u
dGV4dC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0gICAgc3RhdGUuZW5hYmxlZCA9IHRydWU7Ci0KLSAg
ICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZmluaXNoKCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Zmx1
c2goKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVu
ZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChidWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRh
dGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVi
dWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMg
dXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJP
LgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJubyBmcmFt
ZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZlcik7Ci0gICAgc3dpdGNoIChh
dHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRh
cmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHJl
bmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICB9Ci0g
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVy
KGF0dGFjaG1lbnQsIGJ1ZmZlcik7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFy
Z2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChsZXZlbCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91
cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0dXJl
IG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0
YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRl
cm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJPLgotICAgIGlmICghbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZU9iamVj
dCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKLSAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAg
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7
Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3Qs
IGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1F
TlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAg
IH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVi
dWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci0gICAgYXBwbHlT
dGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNl
KEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdlbmVyYXRlTWlw
bWFwIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBt
YXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxsIHRoZSBzYW1lIHNpemUiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3NlZCB0ZXh0dXJlcyBzaG91bGQg
YmUgYWxsb3dlZCBpbiBXZWJHTCAyOgotICAgIGlmICh0ZXgtPmlzQ29tcHJlc3NlZCgpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5lcmF0ZSBtaXBtYXBzIGZyb20g
Y29tcHJlc3NlZCB0ZXh0dXJlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCF2
YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1hcCIsIHRleC0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIGdlbmVyYXRl
TWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVyIGlzIG5vdCBORUFSRVNUX01J
UE1BUF9MSU5FQVIKLSAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhlIGhhY2sgb25jZSB0aGlzIGRy
aXZlciBidWcgaXMgZml4ZWQuCi0jaWYgT1MoREFSV0lOKQotICAgIGJvb2wgbmVlZFRvUmVzZXRN
aW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5nZXRNaW5GaWx0ZXIoKSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpOwotICAgICAgICBu
ZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgbV9jb250ZXh0
LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotI2lmIE9TKERBUldJTikKLSAgICBpZiAobmVlZFRv
UmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHRleC0+Z2V0TWluRmlsdGVy
KCkpOwotI2VuZGlmCi0gICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExldmVsSW5mbygpOwotfQotCi1Q
YXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3Rp
dmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVBdHRyaWIiLCBw
cm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwot
ICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTE9HKFdlYkdM
LCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwgaW5kZXgsIGluZm8ubmFtZS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIHJldHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZv
Lm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTEFjdGl2
ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9ncmFtKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICghbV9jb250ZXh0LT5nZXRB
Y3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8pKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAg
aWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0aCgiWzBdIikpCi0gICAgICAg
ICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKLQotICAgIExPRyhXZWJHTCwgIlJldHVybmlu
ZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkp
OwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50
eXBlLCBpbmZvLnNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0
YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVjdG9yPFJlZlB0cjxXZWJHTFNo
YWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBdHRhY2hlZFNoYWRl
cnMiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgR0MzRGVu
dW0gc2hhZGVyVHlwZVtdID0gewotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NI
QURFUiwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUgotICAgIH07
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihzaGFkZXJUeXBlKSAvIHNpemVv
ZihHQzNEZW51bSk7ICsraSkgewotICAgICAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gcHJvZ3Jh
bS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7Ci0gICAgICAgIGlmIChzaGFkZXIp
Ci0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIpOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJp
YkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
ImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBp
ZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0g
ICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRBdHRyaWJMb2Nh
dGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2
ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXByb2dyYW0tPmdldExpbmtT
dGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5r
ZWQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5n
ZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVO
VF9BUlJBWV9CVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdl
dCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgaWYgKHBu
YW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAmJiBwbmFtZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0g
ICAgfQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRCdWZmZXJQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIGlmIChwbmFtZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pih2YWx1ZSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIC8vIFdl
IGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIG9iamVj
dCB0bwotICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRhdGluZyBhbnkgY2FjaGVkIHZl
cnNpb24uCi0KLSAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2UgcmVxdWVzdGVkIHZhbHVl
cyBvZiAiZmFsc2UiIGZvciBkZXB0aAotICAgIC8vIGFuZCBzdGVuY2lsLCByZWdhcmRsZXNzIG9m
IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8gR3JhcGhpY3NDb250ZXh0
M0Qgb3IgRHJhd2luZ0J1ZmZlci4KLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4g
YXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZShtX2NvbnRleHQtPmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkpOwotICAgIGlmICghbV9hdHRyaWJ1dGVzLmRlcHRoKQotICAg
ICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZXMu
c3RlbmNpbCkKLSAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNpbChmYWxzZSk7Ci0gICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBUaGUgRHJhd2luZ0J1ZmZlciBvYnRhaW5z
IGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1
dGVzKCksCi0gICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3duIGRldGVybWluYXRpb24gb2Yg
d2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KLSAgICAgICAgYXR0cmlidXRlcy0+
c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1wbGUoKSk7Ci0gICAgfQotICAg
IHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKLX0KLQotR0MzRGVudW0gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1
dGlvbikKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwotfQotCi1XZWJHTEV4dGVuc2lvbiogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9k
IikKLSAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKSkgewotICAgICAgICBpZiAoIW1f
ZXh0U2hhZGVyVGV4dHVyZUxPRCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICAg
ICAgICAgIG1fZXh0U2hhZGVyVGV4dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVy
VGV4dHVyZUxPRD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVy
VGV4dHVyZUxPRC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKLSAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMiKSkgewotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0gICAgICAgICAgICBt
X2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9l
eHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShuYW1lLCAiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMiKSkgewotICAgICAgICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgewot
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdM
X09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERl
cml2YXRpdmVzID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlz
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdl
dCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJl
X2Zsb2F0IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxv
YXQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFi
bGVkKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxv
YXQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0LmdldCgpOwotICAgIH0KLSAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCi0gICAg
ICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1
cmVfZmxvYXRfbGluZWFyIikpIHsKLSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVh
cikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOwotICAgICAgICAgICAgbV9vZXNUZXh0
dXJlRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4o
dGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFy
LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSkgewotICAgICAgICBpZiAoIW1f
b2VzVGV4dHVyZUhhbGZGbG9hdCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICAg
ICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVy
ZUhhbGZGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgewotICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVI
YWxmRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5l
YXI+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxv
YXRMaW5lYXIuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
T0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKLSAgICAg
ICAgaWYgKCFtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKTsKLSAgICAgICAgICAgIG1fb2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9FU1ZlcnRleEFycmF5T2JqZWN0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gbV9vZXNWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJPRVNfZWxlbWVudF9pbmRleF91aW50IikKLSAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91
aW50IikpIHsKLSAgICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxl
bWVudF9pbmRleF91aW50Iik7Ci0gICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU0VsZW1lbnRJbmRleFVpbnQ+KHRoaXMpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBtX29lc0VsZW1lbnRJbmRleFVpbnQuZ2V0KCk7Ci0gICAgfQotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKLSAgICAg
ICAgaWYgKCFtX3dlYmdsTG9zZUNvbnRleHQpCi0gICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRl
eHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOwotICAgICAgICBy
ZXR1cm4gbV93ZWJnbExvc2VDb250ZXh0LmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQot
ICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsK
LSAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMpCi0gICAgICAgICAgICBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEM+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlQVRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIikpCi0gICAgICAgICYmIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICAgIGlm
ICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29t
cHJlc3NlZFRleHR1cmVQVlJUQyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4
dHVyZVBWUlRDPih0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldF
QkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIikKLSAgICAgICAgJiYgV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fd2ViZ2xDb21w
cmVzc2VkVGV4dHVyZVMzVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVT
M1RDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7
Ci0gICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOwotICAg
IH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUi
KQotICAgICAgICAmJiBXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4
dDNEKCkpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVN
X2RlcHRoX3RleHR1cmUiKTsKLSAgICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6
Om1ha2VfdW5pcXVlPFdlYkdMRGVwdGhUZXh0dXJlPih0aGlzKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbV93ZWJnbERlcHRoVGV4dHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdC
dWZmZXJzKCkpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJh
d19idWZmZXJzIik7Ci0gICAgICAgICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFdlYkdMRHJhd0J1ZmZlcnM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBtX3dlYmdsRHJhd0J1ZmZlcnMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJy
YXlzOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJy
YXlzKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwotICAgICAgICAgICAgbV9hbmdsZUlu
c3RhbmNlZEFycmF5cyA9IHN0ZDo6bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRo
aXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdl
dCgpOwotICAgIH0KLSAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5m
byIpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAg
ICAgICAgICAgICBtX3dlYmdsRGVidWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkdMRGVidWdSZW5kZXJlckluZm8+KHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xE
ZWJ1Z1JlbmRlcmVySW5mby5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlYnVnX3NoYWRlcnMiKQotICAgICAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3No
YWRlcl9zb3VyY2UiKSkgewotICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQot
ICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkdMRGVidWdTaGFkZXJzPih0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdT
aGFkZXJzLmdldCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZm
ZXJGdW5jUGFyYW1ldGVycygiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFy
Z2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotCi0gICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVj
dCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBm
cmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
fQotCi0gICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5nZXRBdHRhY2htZW50T2JqZWN0KGF0dGFjaG1lbnQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0g
ICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfVFlQRSkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PTkUpOwotICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJ
TlZBTElEX0VOVU0gaW4gdGhpcyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgICAgIC8vIHNw
ZWNpZmllcyBJTlZBTElEX09QRVJBVElPTi4KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBv
YmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpOwotICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7
Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOwotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4o
cmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9U
RVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0Mz
RGludCB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUp
OwotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQi
KTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUik7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX05BTUU6Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2Vi
R0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmpl
Y3QpKSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRh
Y2htZW50Iik7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFt
ZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY29uc3QgaW50IGludFplcm8gPSAwOwotICAgIHN3aXRj
aCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgICAgIHJl
dHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgICAgcmV0dXJuIGdl
dFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxQSEFfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFy
cmF5QnVmZmVyKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6Ci0gICAgICAg
IHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX0FM
UEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9SR0I6Ci0gICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJ
T05fUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQToKLSAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORF9TUkNfUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMVUVfQklUUzoKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1B
VFM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oVWludDMyQXJyYXk6OmNyZWF0ZShtX2Nv
bXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRz
LnNpemUoKSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKLSAgICAg
ICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJP
R1JBTToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUHJvZ3Jh
bT4obV9jdXJyZW50UHJvZ3JhbSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRl
cy5kZXB0aCkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oaW50WmVybyk7Ci0gICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0ZVTkM6Ci0gICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1BU0s6Ci0gICAgICAgIHJldHVybiBn
ZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
SVRIRVI6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRp
bmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9GQUNFOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVO
X0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJ
WkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6Ci0gICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5H
X1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUzoKLSAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZP
Uk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHJldHVy
biBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgotICAgICAgICAvLyBGSVhNRTogc2hv
dWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8KLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1F
TlQ6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKLSAgICAgICAgcmV0dXJuIGdl
dEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZ
R09OX09GRlNFVF9GSUxMOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6Ci0g
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVEX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+
KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkVSOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IFdlYkdM
IikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9CVUZGRVJTOgotICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVS
QUdFX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9Y
OgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgotICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hB
RElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJH
TCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNE
OjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIikiKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JB
Q0tfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlM
OgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6Ci0gICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNL
X1ZBTFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVuY2lsKQotICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRToK
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRlVO
QzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKLSAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKLSAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgotICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9WQUxVRV9NQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgot
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklO
RElOR18yRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
ZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR19DVUJFX01B
UDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4o
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5n
KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKLSAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyht
X3VucGFja0ZsaXBZKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVM
VElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09M
T1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1f
dW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlZFTkRPUjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhTdHJpbmcoIldlYktpdCIpKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0Nv
bnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJ
RVdQT1JUOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRf
T0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAgICAgICAgaWYgKG1fb2VzU3RhbmRh
cmREZXJpdmF0aXZlcykKLSAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwot
ICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6
Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCi0gICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJFUikpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdF
QkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURf
VkVORE9SX1dFQkdMOgotICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQotICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGlj
c0NvbnRleHQzRDo6VkVORE9SKSk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOwotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9B
UlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICAgICAgaWYg
KG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKLSAgICAgICAgICAgIGlmICghbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4obV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0KSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBP
RVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklT
T1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgICAgIGlm
IChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykKLSAgICAgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RS
T1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhU
X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFD
SE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBCRUdJTgotICAgICAgICBpZiAobV93ZWJn
bERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xv
ckF0dGFjaG1lbnRzKCkpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhU
OgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICht
X3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMzRDo6
RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNE
ZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMo
KSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgICAgICAg
ICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKLSAg
ICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgotICAgICAgICAgICAgICAgIHZh
bHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAgICBHQzNEaW50IHZhbHVlID0gMDsK
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRF
X1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQo
KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkFMSURBVEVfU1RBVFVTOgotICAgICAg
ICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAm
dmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZh
bHVlKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVM6Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTOgotICAgICAgICBtX2NvbnRleHQt
PmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJ
VkVfVU5JRk9STVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJv
bENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQcm9ncmFtUGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgIH0KLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiAiIjsKLSAg
ICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVj
dE9yWmVybyhwcm9ncmFtKSkpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICBpZiAoIW1fcmVuZGVyYnVmZmVy
QmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVyYnVmZmVyIGJvdW5kIik7Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBpZiAobV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9TVEVOQ0lMCi0gICAgICAgICYmICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkg
ewotICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpOwotICAgICAgICBp
bnQgdmFsdWUgPSAwOwotICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKLSAgICAgICAgICAgIHZhbHVlID0g
bV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6Ci0gICAg
ICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SGVpZ2h0KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJ
WkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDI0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6Ci0gICAg
ICAgICAgICB2YWx1ZSA9IDg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZv
cm1hdCgpKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUp
OwotICAgIH0KLQotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lEVEg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfU1RFTkNJTF9TSVpFOgotICAgICAgICBtX2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8odmFsdWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJi
dWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIs
IEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xP
YmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRlZCgpKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKLSAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJp
dihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTSEFERVJfVFlQRToKLSAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihv
YmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1TdHJpbmcgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFs
aWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xvZyIsIHNoYWRlcikpCi0gICAgICAgIHJl
dHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFNoYWRlcklu
Zm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFNoYWRl
clByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBzd2l0Y2gg
KHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZh
bGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBz
d2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1df
RkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0ZMT0FUOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1fSU5UOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5UOgotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgcHJlY2lz
aW9uIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgR0MzRGlu
dCByYW5nZVsyXSA9IHswLCAwfTsKLSAgICBHQzNEaW50IHByZWNpc2lvbiA9IDA7Ci0gICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlw
ZSwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIHJldHVybiBXZWJHTFNoYWRlclByZWNpc2lvbkZv
cm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwgcHJlY2lzaW9uKTsKLX0KLQotU3RyaW5n
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVyU291cmNlIiwgc2hhZGVyKSkKLSAg
ICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291
cmNlKCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1
cHBvcnRlZEV4dGVuc2lvbnMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLQotICAg
IGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0KLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNf
dGV4dHVyZV9mbG9hdCIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9h
dCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09F
U190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4
dHVyZV9mbG9hdF9saW5lYXIiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIp
KQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIp
OwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIikpCi0gICAgICAg
IHJlc3VsdC5hcHBlbmQoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICBpZiAobV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX0VYVF90ZXh0dXJlX2Zp
bHRlcl9hbmlzb3Ryb3BpYyIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpKQotICAg
ICAgICByZXN1bHQuYXBwZW5kKCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik7Ci0gICAgcmVzdWx0
LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7Ci0gICAgaWYgKFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lU
X1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiKTsKLSAgICBpZiAoV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldF
QktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTsKLSAgICBpZiAoV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTsKLSAgICBpZiAoV2ViR0xEZXB0aFRl
eHR1cmU6OnN1cHBvcnRlZChncmFwaGljc0NvbnRleHQzRCgpKSkKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpOwotICAgIGlmIChzdXBwb3J0c0RyYXdCdWZmZXJz
KCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RyYXdfYnVmZmVycyIpOwotICAgIGlm
IChBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7Ci0KLSAgICBpZiAoYWxsb3dQcml2aWxl
Z2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpKQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfc2hhZGVycyIpOwotICAgICAgICByZXN1
bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIik7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2V0VGV4UGFyYW1ldGVyIiwgdGFy
Z2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X1dSQVBfVDoKLSAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBu
YW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4odmFsdWUpKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhf
QU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgICAg
ICBpZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkp
OwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiB1bmlmb3JtTG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdCgiZ2V0VW5pZm9ybSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7Ci0gICAgaWYgKCF1bmlmb3JtTG9jYXRpb24gfHwgdW5pZm9ybUxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtIiwgIm5vIHVuaWZvcm1sb2Nh
dGlvbiBvciBub3QgdmFsaWQgZm9yIHRoaXMgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIEdDM0RpbnQgbG9jYXRpb24gPSB1bmlmb3JtTG9jYXRp
b24tPmxvY2F0aW9uKCk7Ci0KLSAgICBHQzNEZW51bSBiYXNlVHlwZTsKLSAgICB1bnNpZ25lZCBs
ZW5ndGg7Ci0gICAgc3dpdGNoICh1bmlmb3JtTG9jYXRpb24tPnR5cGUoKSkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFw
aGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUMzOgotICAgICAgICBiYXNlVHlw
ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAzOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzQ6Ci0gICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKLSAgICAg
ICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAx
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMjoK
LSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5n
dGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRf
VkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAg
ICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwot
ICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMzOgotICAgICAgICBiYXNlVHlwZSA9IEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDNDoKLSAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDI6Ci0g
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5n
dGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VF9NQVQzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAg
ICAgICAgbGVuZ3RoID0gOTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVRfTUFUNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE2OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRVJfQ1VCRToKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
OwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmhhbmRs
ZWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIHN3
aXRjaCAoYmFzZVR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogewot
ICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9OwotICAgICAgICBpZiAobV9pc1JvYnVz
dG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+Z2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCAxNiAq
IHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZh
bHVlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyh2YWx1ZVswXSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQzMkFy
cmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ6IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICAgICAg
aWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBs
b2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxv
Y2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci0gICAgfQotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsK
LSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJv
Z3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPiAxKSB7Ci0gICAg
ICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgICAgYm9vbFZhbHVlW2pd
ID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbal0pOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhib29sVmFsdWUsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZVswXSkpOwotICAgIH0KLSAgICBkZWZh
dWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGdl
dCBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiBvdXIgdW5mb3J0dW5hdGVseSBjb21wbGV4
IGxvZ2ljIGFib3ZlCi0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVua25vd24gZXJyb3IiKTsKLSAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm1Mb2NhdGlvbiIsIHByb2dyYW0pKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldFVuaWZv
cm1Mb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZh
bGlkYXRlU3RyaW5nKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImdldFVuaWZvcm1Mb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIEdDM0RpbnQgdW5pZm9ybUxvY2F0aW9uID0gbV9jb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKLSAg
ICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVp
bHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsKLSAgICBmb3IgKEdDM0Rp
bnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsrKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8g
aW5mbzsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1lIGlmIGl0J3MgYW4gYXJyYXkuCi0gICAg
ICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIpKQotICAgICAgICAgICAgaW5mby5uYW1l
ID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0aCgpIC0gMyk7Ci0gICAgICAgIC8vIElm
IGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCwg
YXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4KLSAgICAgICAgZm9yIChHQzNEaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFN0cmlu
ZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSArICJbIiArIFN0cmluZzo6bnVtYmVyKGluZGV4KSAr
ICJdIjsKLQotICAgICAgICAgICAgaWYgKG5hbWUgPT0gdW5pZm9ybU5hbWUgfHwgbmFtZSA9PSBp
bmZvLm5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpj
cmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9uLCBpbmZvLnR5cGUpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OwotCi0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFZlcnRl
eEF0dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVy
dGV4QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgaWYgKG1fYW5nbGVJbnN0YW5jZWRBcnJheXMg
JiYgcG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNP
Ul9BTkdMRSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5kaXZpc29yKTsKLQot
ICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICBpZiAoKCFpc0dMRVMyQ29tcGxp
YW50KCkgJiYgIWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoMCkuYnVmZmVyQmluZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpCi0gICAg
ICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZwotICAgICAgICAgICAgfHwgIXN0YXRlLmJ1
ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KHN0
YXRlLmJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUu
ZW5hYmxlZCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJB
WV9OT1JNQUxJWkVEOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm5vcm1hbGl6
ZWQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0la
RToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5zaXplKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5vcmlnaW5hbFN0cmlkZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRlLnR5cGUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJF
TlRfVkVSVEVYX0FUVFJJQjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJy
YXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCkpOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1sb25nIGxvbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgs
IEdDM0RlbnVtIHBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIEdDM0RzaXplaXB0ciByZXN1bHQgPSBtX2NvbnRleHQtPmdl
dFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KHJlc3VsdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpo
aW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBpc1ZhbGlkID0gZmFs
c2U7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpH
RU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9I
SU5UX09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCi0gICAgICAgIGlmIChtX29lc1N0
YW5kYXJkRGVyaXZhdGl2ZXMpCi0gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGlmICghaXNWYWxpZCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiaGludCIsICJpbnZhbGlkIHRh
cmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+aGludCh0YXJn
ZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVm
ZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIgfHwgaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYnVmZmVyLT5o
YXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNCdWZmZXIoYnVmZmVyLT5vYmplY3QoKSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0
TG9zdDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQ29udGV4dExvc3RPclBl
bmRpbmcoKQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gJiYgIW1faGFz
UmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBMT0coV2ViR0wsICJDb250ZXh0
IGlzIGJlaW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgcG9saWN5LiIpOwotICAgICAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgp
OwotICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpOwotICAgICAgICBpZiAocGFn
ZSAmJiAhZG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgICAgIHBhZ2UtPm1h
aW5GcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLnJlc29sdmVXZWJHTFBvbGljeUZvclVSTChkb2N1
bWVudC51cmwoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkgZG8gYW55
dGhpbmcgd2l0aCB0aGUgcmVzdWx0IGZyb20gcmVzb2x1dGlvbi4gQSBtb3JlCi0gICAgICAgIC8v
IGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG1pZ2h0IHRyeSB0byBjb25zdHJ1Y3QgYSByZWFsIGNv
bnRleHQsIGV0YyBhbmQgcHJvY2VlZAotICAgICAgICAvLyB3aXRoIG5vcm1hbCBvcGVyYXRpb24u
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkx
MjIKLSAgICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0TG9zdCB8fCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b247Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVkKEdD
M0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIsIGNhcCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkKLSAgICAgICAgcmV0
dXJuIG1fc3RlbmNpbEVuYWJsZWQ7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNh
cCk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNGcmFtZWJ1ZmZl
cihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVy
IHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBp
ZiAoIWZyYW1lYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0
KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtIHx8IGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0
LT5pc1Byb2dyYW0ocHJvZ3JhbS0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJi
dWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghcmVuZGVyYnVmZmVyLT5oYXNFdmVy
QmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+
aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFu
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKLXsK
LSAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNTaGFkZXIoc2hhZGVyLT5vYmplY3Qo
KSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKFdl
YkdMVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUgfHwgaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghdGV4dHVyZS0+aGFz
RXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRl
eHQtPmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmxpbmVX
aWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3Jh
bShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgibGlua1Byb2dyYW0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiB2ZXJ0
ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6
VkVSVEVYX1NIQURFUik7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiBmcmFnbWVudFNoYWRlciA9IHBy
b2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFE
RVIpOwotICAgICAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5pc1ZhbGlk
KCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNWYWxpZCgpIHx8ICFt
X2NvbnRleHQtPnByZWNpc2lvbnNNYXRjaChvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2Jq
ZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkgfHwgIW1fY29udGV4dC0+Y2hlY2tWYXJ5aW5nc1Bh
Y2tpbmcob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciksIG9iamVjdE9yWmVybyhmcmFnbWVudFNo
YWRlcikpKSB7Ci0gICAgICAgICAgICBwcm9ncmFtLT5zZXRMaW5rU3RhdHVzKGZhbHNlKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bGlu
a1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAgICBwcm9ncmFtLT5pbmNyZWFzZUxp
bmtDb3VudCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWko
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgotICAgICAgICBtX3Vu
cGFja0ZsaXBZID0gcGFyYW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKLSAgICAgICAgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhID0gcGFyYW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6Ci0gICAgICAg
IGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMIHx8
IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKQotICAgICAgICAgICAgbV91bnBhY2tD
b2xvcnNwYWNlQ29udmVyc2lvbiA9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihwYXJhbSk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3Ig
VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlBBQ0tfQUxJR05NRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElH
Tk1FTlQ6Ci0gICAgICAgIGlmIChwYXJhbSA9PSAxIHx8IHBhcmFtID09IDIgfHwgcGFyYW0gPT0g
NCB8fCBwYXJhbSA9PSA4KSB7Ci0gICAgICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UKQotICAgICAgICAgICAgICAgIG1fcGFja0FsaWdubWVudCA9
IHBhcmFtOwotICAgICAgICAgICAgZWxzZSAvLyBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVDoKLSAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCA9IHBhcmFtOwotICAg
ICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgYWxp
Z25tZW50Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBEdWUgdG8g
V2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMsIGl0IGlzIG5vdCBwb3NzaWJsZSB0bwot
ICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhlIFdlYkdMIEFQSS4KLSAgICBBU1NFUlQo
Y2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOwotICAgIC8vIFZhbGlkYXRlIGlucHV0IHBhcmFtZXRl
cnMuCi0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFkUGl4ZWxzIiwgIm5vIGRlc3RpbmF0aW9u
IEFycmF5QnVmZmVyVmlldyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN3aXRjaCAo
Zm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQg
Zm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgdHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwg
ImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJR05FRF9CWVRFIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgLy8gVmFsaWRhdGUgYXJyYXkgdHlwZSBhZ2FpbnN0IHBpeGVsIHR5
cGUuCi0gICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4KSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVy
IGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2Fm
ZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgcmVhc29u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBDYWxjdWxhdGUgYXJyYXkgc2l6ZSwg
dGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FMSUdOTUVOVC4KLSAgICB1bnNpZ25l
ZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgcGFkZGluZyA9
IDA7Ci0gICAgaWYgKCFtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgewotICAgICAgICBHQzNE
ZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0
eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQs
ICZwYWRkaW5nKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJyZWFkUGl4ZWxz
IiwgImludmFsaWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IGxhcmdlIGVu
b3VnaCBmb3IgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICB2b2lkKiBkYXRhID0gcGl4ZWxz
LT5iYXNlQWRkcmVzcygpOwotCi0gICAgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmlu
ZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdl
dCgpKTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlYWRuUGl4ZWxzRVhUKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5ieXRlTGVuZ3RoKCksIGRhdGEpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAgICB9Ci0KLSNpZiBPUyhEQVJXSU4pCi0g
ICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKSAvLyB3ZSBoYXZlbid0IGNvbXB1dGVk
IHBhZGRpbmcKLSAgICAgICAgbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3Jt
YXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1
aXJlZCwgJnBhZGRpbmcpOwotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBzZWN0aW9uIHdoZW4g
R0wgZHJpdmVyIGJ1ZyBvbiBNYWMgQU5EIHRoZSBHTEVTIGRyaXZlciBidWcKLSAgICAvLyBvbiBR
QyBpcyBmaXhlZCwgaS5lLiwgd2hlbiBhbHBoYSBpcyBvZmYsIHJlYWRQaXhlbHMgc2hvdWxkCi0g
ICAgLy8gc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCi0gICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFscGhhKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGRhdGEpOwotICAgICAgICBmb3IgKEdDM0RzaXplaSBpeSA9IDA7IGl5IDwgaGVp
Z2h0OyArK2l5KSB7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaSBpeCA9IDA7IGl4IDwgd2lk
dGg7ICsraXgpIHsKLSAgICAgICAgICAgICAgICBwaXhlbHNbM10gPSAyNTU7Ci0gICAgICAgICAg
ICAgICAgcGl4ZWxzICs9IDQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwaXhlbHMgKz0g
cGFkZGluZzsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5yZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAi
aW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fcmVu
ZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVTaXplKCJyZW5kZXJidWZm
ZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2gg
KGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09N
UE9ORU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6Ci0gICAg
ICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRl
cm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+c2V0SXNWYWxpZCh0cnVlKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRT
aXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBpZiAoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0
ZWQoKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdl
dCwgRXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAg
ICAgfQotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3Rl
bmNpbFN1cHBvcnRlZCgpKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRl
cm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFsdWUsIEdD
M0Rib29sZWFuIGludmVydCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52
ZXJ0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNjaXNzb3IoR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2
YWxpZGF0ZVNpemUoInNjaXNzb3IiLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBj
b25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm47Ci0gICAg
U3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9IFN0cmlwQ29tbWVudHMoc3RyaW5nKS5yZXN1
bHQoKTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJzaGFkZXJTb3VyY2UiLCBzdHJpbmdXaXRo
b3V0Q29tbWVudHMpKQotICAgICAgICByZXR1cm47Ci0gICAgc2hhZGVyLT5zZXRTb3VyY2Uoc3Ry
aW5nKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShvYmplY3RPclplcm8oc2hhZGVyKSwg
c3RyaW5nV2l0aG91dENvbW1lbnRzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jIiwgZnVuYykpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAgIG1fc3RlbmNpbEZ1bmNS
ZWZCYWNrID0gcmVmOwotICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKLSAgICBtX3N0ZW5j
aWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywg
cmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5j
U2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1
aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYygic3RlbmNpbEZ1bmNTZXBhcmF0
ZSIsIGZ1bmMpKQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1
bmNSZWYgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgICAg
ICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFj
ayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
T05UOgotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAgICAgICBtX3N0ZW5jaWxG
dW5jTWFzayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgICAgICBt
X3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVu
YywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxN
YXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgIG1fc3RlbmNp
bE1hc2tCYWNrID0gbWFzazsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKG1hc2spOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51
bSBmYWNlLCBHQzNEdWludCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKGZhY2UpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1h
c2s7Ci0gICAgICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sg
PSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNL
OgotICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShm
YWNlLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcChH
QzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWls
LCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE9w
U2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogRm9y
IG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZC4KLSAgICBlYyA9IDA7Ci0gICAgV2Vi
R0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFy
Z2V0LCB0cnVlKTsKLSAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1h
Z2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpOwotICAgIEFTU0VSVCh0ZXgpOwot
ICAgIEFTU0VSVCghbGV2ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQp
KTsKLSAgICBpZiAoIXBpeGVscykgewotICAgICAgICAvLyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5H
TCBpbXBsZW1lbnRhdGlvbiBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMg
dGhlcmVmb3JlIHRydWUuCi0gICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGlm
IHRoZXkgYXJlIHVzaW5nIEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVz
Ci0gICAgICAgIC8vIGNhbiBub3QgYmUgY2xlYXJlZCB3aXRoIHRleEltYWdlMkQgYW5kIG11c3Qg
YmUgY2xlYXJlZCBieSBiaW5kaW5nIHRvIGFuIGZibyBhbmQgY2FsbGluZwotICAgICAgICAvLyBj
bGVhci4KLSAgICAgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCi0gICAgICAgICAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBib29sIHN1Y2NlZWQgPSBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVy
LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgICAgIGlmICghc3Vj
Y2VlZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGlu
dGVybmFsZm9ybWF0KSk7Ci0gICAgICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgICAgICBpZiAobV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAgICAgLy8g
VGhlIHRleEltYWdlMkQgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQg
ZG9lc24ndCBoYXZlIHRoZSBkYXRhIGZvciB0aGlzIGxldmVsLgotICAgICAgICAgICAgdGV4LT5t
YXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
KiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3VyY2Us
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgZWMgPSAwOwotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBw
cmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dDNEOjpOT05FKTsKLSAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVk
ZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRh
Rm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKLSAgICBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9w
KCk7Ci0gICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFn
ZVBpeGVsRGF0YSgpOwotCi0gICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYg
KHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpB
bHBoYURvTm90aGluZyAmJiAhZmxpcFkpCi0gICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdl
LCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0
YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFn
ZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBk
YXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBm
b3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0
YSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0
aW9uVHlwZSBmdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSBzb3VyY2VU
eXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0KQotewotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhmdW5jdGlvbk5h
bWUsIGZ1bmN0aW9uVHlwZSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyhmdW5jdGlv
bk5hbWUsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vdFRleFN1YkltYWdlMkQpIHsKLSAg
ICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRm9yIFNvdXJjZUFy
cmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVUZXhGdW5jRGF0YSgpIHdvdWxkIGhhbmRs
ZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJsZVRleEZvcm1hdAotICAgICAgICAvLyBi
eSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3IGlzIG51bGwgb3Igbm90LgotICAgICAg
ICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZpZXcpIHsKLSAgICAgICAgICAg
IGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVNpemUo
ZnVuY3Rpb25OYW1lLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hl
Y2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KLSAgICAgICAgaWYgKHhvZmZzZXQgKyB3aWR0
aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJi
YWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxl
dmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2
ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGV4dHVy
ZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8IHRleHR1cmUt
PmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleEltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxBbGxvd2VkKQotICAgICAgICB8fCAhdmFsaWRh
dGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZm
ZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0gICAgdm9pZCogZGF0
YSA9IHBpeGVscyA/IHBpeGVscy0+YmFzZUFkZHJlc3MoKSA6IDA7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHRlbXBEYXRhOwotICAgIGJvb2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0g
ICAgaWYgKGRhdGEgJiYgKG1fdW5wYWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
KSkgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3VucGFja0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YSkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7Ci0gICAgICAgIGNoYW5n
ZVVucGFja0FsaWdubWVudCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGln
bm1lbnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCi0gICAgICAgICAgICAgICAg
ICAgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVu
dCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwg
Tm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0g
ICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFn
ZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4KLSAgICAvLyBObyBjb252ZXJzaW9uIGlz
IG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVE
X0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgot
ICAgIGlmICghbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAg
IGVsc2UgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMs
IGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBk
YXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50
ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZv
cm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgp
LT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UqIGltYWdlLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICBJbnRTaXplIHNpemUo
d2lkdGgsIGhlaWdodCk7Ci0gICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAg
SW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXpl
KTsKLSAgICBpZiAoIWJ1ZikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChG
bG9hdFBvaW50KCksIGltYWdlLT5zaXplKCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9h
dFBvaW50KCksIHNpemUpOwotICAgIGJ1Zi0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICByZXR1cm4gYnVmLT5j
b3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VF
bGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgi
dGV4SW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5k
ZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0lt
YWdlKCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFn
ZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0K
LSAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQi
LCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVy
LT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1h
Z2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFz
RWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRl
eEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIs
IHRhcmdldCwgdHJ1ZSk7Ci0gICAgLy8gSWYgcG9zc2libGUsIGNvcHkgZnJvbSB0aGUgY2FudmFz
IGVsZW1lbnQgZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUKLSAgICAvLyB2aWEgdGhlIEdQVSwgd2l0
aG91dCBhIHJlYWQtYmFjayB0byBzeXN0ZW0gbWVtb3J5LgotICAgIC8vCi0gICAgLy8gRklYTUU6
IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkvVU5TSUdORURfQllURSBzaG91bGQgYmUgbGlm
dGVkIHdoZW4KLSAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGltcGxl
bWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4KLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1cmUgJiYgdHlwZSA9PSB0ZXh0dXJlLT5n
ZXRUeXBlKHRhcmdldCwgbGV2ZWwpCi0gICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpICYmIHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgSW1hZ2VCdWZm
ZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0gICAgICAgIGlmIChidWZmZXIgJiYgYnVm
ZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2Jq
ZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
RmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgdHlw
ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOwotICAgIGlmIChp
bWFnZURhdGEpCi0gICAgICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7Ci0gICAgZWxzZQotICAgICAg
ICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0
eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2Fu
dmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQot
I2lmIEVOQUJMRShWSURFTykKLVBhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEJhY2tpbmdTdG9y
ZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSW50U2l6ZSBz
aXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpKTsKLSAgICBJbWFn
ZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOwot
ICAgIGlmICghYnVmKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBJbnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgLy8gRklYTUU6IFR1cm4gdGhpcyBpbnRv
IGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBvZiBDUFUgcmVhZGJhY2suCi0gICAgdmlk
ZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7
Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tpbmdTdG9yZUNvcHkpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVu
dCgidGV4SW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygi
dGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+
dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gR28gdGhyb3VnaCB0aGUgZmFzdCBwYXRoIGRvaW5nIGEgR1BVLUdQVSB0ZXh0dXJl
cyBjb3B5IHdpdGhvdXQgYSByZWFkYmFjayB0byBzeXN0ZW0gbWVtb3J5IGlmIHBvc3NpYmxlLgot
ICAgIC8vIE90aGVyd2lzZSwgaXQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBTVyBwYXRo
LgotICAgIC8vIEZJWE1FOiBUaGUgY3VycmVudCByZXN0cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZv
cm1hdCBzaG91ZCBiZSBSR0Igb3IgUkdCQSwKLSAgICAvLyB0eXBlIHNob3VsZCBiZSBVTlNJR05F
RF9CWVRFIGFuZCBsZXZlbCBzaG91bGQgYmUgMC4gSXQgbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0
dXJlLgotICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmco
InRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCA9PSB0YXJnZXQgJiYgdGV4dHVyZQotICAgICAgICAmJiAoZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KQotICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0g
ICAgICAgICYmICh0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwp
KQotICAgICAgICAmJiAhbGV2ZWwpIHsKLSAgICAgICAgaWYgKHZpZGVvLT5jb3B5VmlkZW9UZXh0
dXJlVG9QbGF0Zm9ybVRleHR1cmUobV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwg
bGV2ZWwsIHR5cGUsIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrRmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRl
b0hlaWdodCgpLCB0eXBlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUo
KSwgZWMpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICB0ZXhJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQgcGFyYW1mLCBHQzNEaW50IHBhcmFtaSwgYm9vbCBpc0Zsb2F0KQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFBhcmFtZXRlciIsIHRh
cmdldCwgZmFsc2UpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNo
IChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgotICAgICAgICBpZiAo
KGlzRmxvYXQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYm
IHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtZiAh
PSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKQotICAgICAgICAgICAgfHwgKCFpc0Zsb2F0ICYm
IHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJFUEVBVCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoaXNGbG9hdCkgewotICAgICAgICB0ZXgtPnNldFBhcmFtZXRl
cmYocG5hbWUsIHBhcmFtZik7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0YXJn
ZXQsIHBuYW1lLCBwYXJhbWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRleC0+c2V0UGFyYW1l
dGVyaShwbmFtZSwgcGFyYW1pKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRh
cmdldCwgcG5hbWUsIHBhcmFtaSk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQgcGFyYW0pCi17Ci0gICAgdGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIHBhcmFtLCAw
LCB0cnVlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmko
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICB0
ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFyYW0sIGZhbHNlKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1F
OiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCi0gICAgZWMgPSAwOwotICAg
IEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFy
YW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlKSk7Ci0gICAgQVNTRVJUKHZhbGlk
YXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpKTsKLSAgICBBU1NFUlQo
dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCkpOwotICAg
IFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2Uy
RCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpIHsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKCh4b2Zmc2V0ICsg
d2lkdGgpID49IDApOwotICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdodCkgPj0gMCk7Ci0gICAg
QVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhvZmZzZXQgKyB3aWR0aCkp
OwotICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSA+PSAoeW9mZnNldCAr
IGhlaWdodCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpID09IGZvcm1hdCk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9
PSB0eXBlKTsKLSAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBW
ZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0
b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91
bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7ICAK
LSAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1
YkltYWdlMkQiLCAiYmFkIGltYWdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFj
dG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3Ag
YWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwotICAgIGNvbnN0IHZvaWQq
IGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKLQotICAg
IGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYgIWZs
aXBZKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAg
ICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZv
cm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlRXh0cmFj
dG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VFeHRy
YWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4
SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwgIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwgZWMpOwotICAgIGlmICht
X3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFnZTJEIiwgbGV2ZWwsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsTm90QWxsb3dlZCkKLSAgICAgICAg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJj
ZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAw
LCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0gICAg
dm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKLSAgICBWZWN0b3I8dWludDhfdD4g
dGVtcERhdGE7Ci0gICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKLSAgICBp
ZiAoZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7
Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdW5wYWNrQWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKLSAgICAgICAgY2hhbmdlVW5w
YWNrQWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVu
dCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7
Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhl
bFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGln
bm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1h
Z2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsICBwaXhlbHMtPndp
ZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGJv
b2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRh
IGlzIGFsd2F5cyBvZiBmb3JtYXQgUkdCQTguCi0gICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVk
ZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRF
IGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBp
ZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3Jt
YXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAh
PSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIGZv
cm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgp
LT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgidGV4U3Vi
SW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJl
cihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdl
KCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFnZUZv
clJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0KLSAg
ICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQi
LCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBm
b3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1s
RG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZhcywgZWMp
Ci0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFn
ZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52
YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwg
eW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdl
RGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7Ci0gICAgaWYgKGltYWdlRGF0YSkKLSAgICAg
ICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwotICAgIGVsc2UKLSAgICAgICAgdGV4U3ViSW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBj
YW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVO
QUJMRShWSURFTykKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgdmlkZW8s
IGVjKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3Vi
SW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB2
aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBl
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdl
PiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJ
bWFnZU1vZGUoKSwgZWMpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICB0
ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLSNlbmRpZgotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
bG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5v
dCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgMSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCksIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVuaWZvcm0xaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3Jh
bSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKChsb2NhdGlvbi0+dHlwZSgp
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkgJiYgeCA+PSAoaW50KW1fdGV4dHVyZVVu
aXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaSIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobG9jYXRp
b24tPmxvY2F0aW9uKCksIHgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygi
dW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCAxKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9j
YXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdi0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHYtPmRhdGEoKVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNp
emUoKSkpIHsKLSAgICAgICAgICAgICAgICBMT0coV2ViR0wsICJUZXh0dXJlIHVuaXQgc2l6ZT0l
enUsIHZbJWRdPSVkLiBMb2NhdGlvbiB0eXBlID0gJTA0WC4iLCBtX3RleHR1cmVVbml0cy5zaXpl
KCksIGksIHYtPmRhdGEoKVtpXSwgbG9jYXRpb24tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlm
b3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpLCB2LT5kYXRhKCkpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2Nh
dGlvbiwgdiwgc2l6ZSwgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+
dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBl
KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoKChHQzNEaW50Kil2KVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVy
ZVVuaXRzLnNpemUoKSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0
dXJlIHVuaXQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
c2l6ZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTJmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgeCwgeSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkg
LyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigp
LCBzaXplIC8gMiwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkg
LyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
c2l6ZSAvIDIsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNm
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJy
ZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2YiLCAibG9jYXRpb24gbm90IGZvciBjdXJy
ZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+
dW5pZm9ybTNmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCAzKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJv
Z3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNpIiwgImxvY2F0
aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRp
b24sIHYsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2Iiwg
bG9jYXRpb24sIHYsIHNpemUsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQt
PnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdD
M0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3Jh
bSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIDQpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwg
NCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24t
PnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00aSIsICJs
b2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHks
IHosIHcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIs
IGxvY2F0aW9uLCB2LCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlm
b3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHYtPmRhdGEoKSk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9y
bTRpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYs
IDQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHRyYW5zcG9zZSwgdi0+ZGF0YSgp
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdHJh
bnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRpb24s
IHRyYW5zcG9zZSwgdiwgOSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZv
cm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gOSwgdHJhbnNw
b3NlLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0
cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgOSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyA5LCB0cmFuc3Bvc2UsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0
ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0
aCgpIC8gMTYsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIHYpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxl
dGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoInVzZVByb2dyYW0iLCBwcm9ncmFt
LCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBw
cm9ncmFtID0gMDsKLSAgICBpZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVzZVByb2dyYW0iLCAicHJvZ3JhbSBub3QgdmFsaWQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7Ci0g
ICAgICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtKQotICAgICAgICAgICAgbV9jdXJyZW50UHJvZ3Jh
bS0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICAgICAgbV9jdXJyZW50UHJv
Z3JhbSA9IHByb2dyYW07Ci0gICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmplY3RPclpl
cm8ocHJvZ3JhbSkpOwotICAgICAgICBpZiAocHJvZ3JhbSkKLSAgICAgICAgICAgIHByb2dyYW0t
Pm9uQXR0YWNoZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInZhbGlkYXRlUHJvZ3JhbSIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCi17Ci0gICAgdmVydGV4QXR0cmli
ZkltcGwoInZlcnRleEF0dHJpYjFmIiwgaW5kZXgsIDEsIHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVy
dGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIDEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2Iiwg
aW5kZXgsIHYsIHNpemUsIDEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQot
ewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIsIGluZGV4LCAyLCB2MCwg
djEsIDAuMGYsIDEuMGYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCi17Ci0gICAgdmVydGV4
QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgMik7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2
ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgc2l6ZSwgMik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgi
dmVydGV4QXR0cmliM2YiLCBpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZs
b2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNm
diIsIGluZGV4LCB2LCAzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkK
LXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCBz
aXplLCAzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRm
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYy
LCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjRm
IiwgaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQot
ewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIDQp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIHZlcnRleEF0
dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIHNpemUsIDQpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBp
bmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVk
LCBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpCWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQ
b2ludGVyIiwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVy
IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUgPCAwIHx8IHN0cmlkZSA+IDI1NSB8fCBv
ZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQgc2l6ZSwgc3RyaWRl
IG9yIG9mZnNldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9ib3VuZEFy
cmF5QnVmZmVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAibm8gYm91bmQgQVJS
QVlfQlVGRkVSIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRGV0ZXJtaW5lIHRo
ZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhl
IG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCi0gICAgdW5zaWduZWQgaW50IHR5cGVTaXpl
ID0gc2l6ZUluQnl0ZXModHlwZSk7Ci0gICAgaWYgKCF0eXBlU2l6ZSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0
cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zm
c2V0KSAlIHR5cGVTaXplKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgInN0cmlk
ZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiB0eXBlU2l6ZTsKLQotICAg
IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGJ5
dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJyYXlCdWZmZXIpOwotICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3Ry
aWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKCJ2aWV3cG9ydCIs
IHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT52aWV3cG9y
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE1vZGUg
bW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImxv
c2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX2NvbnRleHRHcm91cC0+bG9zZUNvbnRleHRHcm91cChtb2RlKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dExvc3QgPSB0cnVlOwotICAgIG1f
Y29udGV4dExvc3RNb2RlID0gbW9kZTsKLQotICAgIGlmIChtb2RlID09IFJlYWxMb3N0Q29udGV4
dCkgewotICAgICAgICAvLyBJbmZvcm0gdGhlIGVtYmVkZGVyIHRoYXQgYSBsb3N0IGNvbnRleHQg
d2FzIHJlY2VpdmVkLiBJbiByZXNwb25zZSwgdGhlIGVtYmVkZGVyIG1pZ2h0Ci0gICAgICAgIC8v
IGRlY2lkZSB0byB0YWtlIGFjdGlvbiBzdWNoIGFzIGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlz
c2lvbiB0byB1c2UgV2ViR0wgYWdhaW4uCi0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjYW52
YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLmNs
aWVudCgpLmRpZExvc2VXZWJHTENvbnRleHQobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSk7Ci0gICAgfQotCi0gICAgZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBN
YWtlIGFic29sdXRlbHkgc3VyZSB3ZSBkbyBub3QgcmVmZXIgdG8gYW4gYWxyZWFkeS1kZWxldGVk
IHRleHR1cmUgb3IgZnJhbWVidWZmZXIuCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4
dHVyZTJEQmluZGluZygwKTsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZl
ckJpbmRpbmcoMCk7Ci0gICAgfQotCi0gICAgLy8gVGhlcmUgaXMgbm8gZGlyZWN0IHdheSB0byBj
bGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0aW9uIGFuZAotICAgIC8vIGxvb3Bpbmcg
dW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRl
IGxvb3AgaWYKLSAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQgaW1wbGVtZW50YXRpb24gaGFk
IGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKLSAgICAvLyBsYXJnZSBudW1iZXIgb2YgdGlt
ZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDEwMDsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIENv
bnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0gKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0
KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5SW5Db25zb2xlOwotICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wsICJsb3NlQ29u
dGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsKLQotICAgIC8vIERvbid0IGFsbG93IHJl
c3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0IGV2ZW50IGhhcyBib3RoIGJlZW4KLSAg
ICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBwcmV2ZW50ZWQuCi0gICAg
bV9yZXN0b3JlQWxsb3dlZCA9IGZhbHNlOwotCi0gICAgLy8gQWx3YXlzIGRlZmVyIHRoZSBkaXNw
YXRjaCBvZiB0aGUgY29udGV4dCBsb3N0IGV2ZW50LCB0byBpbXBsZW1lbnQKLSAgICAvLyB0aGUg
c3BlYyBiZWhhdmlvciBvZiBxdWV1ZWluZyBhIHRhc2suCi0gICAgbV9kaXNwYXRjaENvbnRleHRM
b3N0RXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpmb3JjZVJlc3RvcmVDb250ZXh0KCkKLXsKLSAgICBpZiAoIWlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IG5vdCBsb3N0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQp
IHsKLSAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFN5bnRoZXRpY0xvc3RDb250ZXh0
KQotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCByZXN0b3JhdGlvbiBub3Qg
YWxsb3dlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc3RvcmVU
aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGxhdGZvcm1MYXll
cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICghaXNDb250ZXh0TG9zdCgpICYmICFtX2lzUGVuZGlu
Z1BvbGljeVJlc29sdXRpb24pID8gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCkgOiAwOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hh
cmVkT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZU9iamVjdChv
YmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkU2hhcmVkT2JqZWN0
KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0
KCkpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRPYmplY3Qob2JqZWN0KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0T2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZENvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOwotICAg
IG1fY29udGV4dE9iamVjdHMuYWRkKG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCkKLXsKLSAgICBpZiAobV9pc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAobV9jb250
ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0T2Jq
ZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdpbigpOwotICAgICAgICAo
Kml0KS0+ZGV0YWNoQ29udGV4dCgpOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RvcCgpCi17Ci0gICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBm
b3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKLSAgICAgICAgZGVzdHJveUdy
YXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdD
M0Rib29sZWFuIHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCAm
dmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUp
KTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9vbGVhbkFy
cmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIGlmIChwbmFtZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLKSB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oMCwgMCk7Ci0gICAgfQotICAgIEdDM0Rib29s
ZWFuIHZhbHVlWzRdID0gezB9OwotICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZh
bHVlKTsKLSAgICBib29sIGJvb2xWYWx1ZVs0XTsKLSAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwg
NDsgKytpaSkKLSAgICAgICAgYm9vbFZhbHVlW2lpXSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVl
W2lpXSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29sVmFsdWUsIDQpOwotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKLXsKLSAgICBHQzNEZmxvYXQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0
RmxvYXR2KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwot
fQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRJbnRQYXJhbWV0ZXIo
R0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZh
bHVlKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7
Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpKTsKLX0KLQotV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdDM0RmbG9hdCB2YWx1ZVs0XSA9IHswfTsKLSAg
ICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpB
TElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfUkFOR0U6Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsK
LX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xJbnRBcnJh
eVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9
OwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
fQotICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5n
dGgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrVGV4dHVyZUNvbXBs
ZXRlbmVzcyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRvRHJhdykKLXsK
LSAgICBib29sIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwotICAgIFdlYkdMVGV4dHVyZTo6VGV4
dHVyZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PFdlYkdMVGV4dHVyZTo6
VGV4dHVyZUV4dGVuc2lvbkZsYWc+KChtX29lc1RleHR1cmVGbG9hdExpbmVhciA/IFdlYkdMVGV4
dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFyRW5hYmxlZCA6IDApIHwgKG1fb2VzVGV4
dHVyZUhhbGZGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkhhbGZG
bG9hdExpbmVhckVuYWJsZWQgOiAwKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlpID0gMDsgaWkg
PCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraWkpIHsKLSAgICAgICAgaWYgKChtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJE
QmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKQotICAgICAgICAgICAg
fHwgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJl
VW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4
dGVuc2lvbnMpKSkgewotICAgICAgICAgICAgaWYgKGlpICE9IG1fYWN0aXZlVGV4dHVyZVVuaXQp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOwotICAgICAg
ICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHJlc2V0QWN0aXZlVW5pdCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4
dHVyZShpaSk7Ci0gICAgICAgICAgICAgICAgcmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleDJEOwotICAgICAgICAgICAg
V2ViR0xUZXh0dXJlKiB0ZXhDdWJlTWFwOwotICAgICAgICAgICAgaWYgKHByZXBhcmVUb0RyYXcp
IHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbXNnKFN0cmluZygidGV4dHVyZSBib3VuZCB0byB0
ZXh0dXJlIHVuaXQgIikgKyBTdHJpbmc6Om51bWJlcihpaSkKLSAgICAgICAgICAgICAgICAgICAg
KyAiIGlzIG5vdCByZW5kZXJhYmxlLiBJdCBtYXliZSBub24tcG93ZXItb2YtMiBhbmQgaGF2ZSBp
bmNvbXBhdGlibGUgdGV4dHVyZSBmaWx0ZXJpbmcgb3IgaXMgbm90ICd0ZXh0dXJlIGNvbXBsZXRl
JywiCi0gICAgICAgICAgICAgICAgICAgICsgIiBvciBpdCBpcyBhIGZsb2F0L2hhbGYtZmxvYXQg
dHlwZSB3aXRoIGxpbmVhciBmaWx0ZXJpbmcgYW5kIHdpdGhvdXQgdGhlIHJlbGV2YW50IGZsb2F0
L2hhbGYtZmxvYXQgbGluZWFyIGV4dGVuc2lvbiBlbmFibGVkLiIpOwotICAgICAgICAgICAgICAg
IHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGZ1bmN0aW9uTmFtZSwgbXNnLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICAgICAgICAgIHRleDJEID0gbV9ibGFja1RleHR1cmUyRC5nZXQoKTsKLSAgICAg
ICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV9ibGFja1RleHR1cmVDdWJlTWFwLmdldCgpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0ZXgyRCA9IG1fdGV4dHVyZVVuaXRz
W2lpXS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOwotICAgICAgICAgICAgICAgIHRleEN1YmVNYXAg
PSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5k
aW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFj
a1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKHRleDJEKSk7
Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGlu
ZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VC
bGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgb2JqZWN0T3JaZXJv
KHRleEN1YmVNYXApKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVzZXRBY3RpdmVVbml0
KQotICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlVW5pdCk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4
dHVyZXMxeDEoKQotewotICAgIHVuc2lnbmVkIGNoYXIgYmxhY2tbXSA9IHswLCAwLCAwLCAyNTV9
OwotICAgIG1fYmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9ibGFja1RleHR1
cmUyRC0+b2JqZWN0KCkpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotICAgIG1fYmxhY2tUZXh0
dXJlQ3ViZU1hcCA9IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBtX2JsYWNrVGV4dHVyZUN1YmVN
YXAtPm9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJs
YWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQLCAwKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4SW50ZXJuYWxG
b3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJuYWxGb3Jt
YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCkKLXsKLSAg
ICB1bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxCaXRzQnlGb3Jt
YXQodGV4SW50ZXJuYWxGb3JtYXQpOwotICAgIHVuc2lnbmVkIGhhdmUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChjb2xvckJ1ZmZlckZvcm1hdCk7Ci0gICAgcmV0
dXJuIChuZWVkICYgaGF2ZSkgPT0gbmVlZDsKLX0KLQotR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKQotewotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsK
LSAgICBpZiAobV9hdHRyaWJ1dGVzLmFscGhhKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkE7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Ci19Ci0KLWlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpCi17Ci0g
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmpl
Y3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZl
cldpZHRoKCk7Ci0gICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+
c2l6ZSgpLndpZHRoKCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCku
d2lkdGgoKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1
ZmZlckhlaWdodCgpCi17Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5nZXRDb2xvckJ1ZmZlckhlaWdodCgpOwotICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIg
PyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJu
YWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotV2ViR0xUZXh0dXJlKiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQotewot
ICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IG51bGxwdHI7Ci0gICAgc3dpdGNoICh0YXJnZXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgotICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGlmICghdXNlU2l4RW51bXNG
b3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0
Iik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBC
aW5kaW5nLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQOgotICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0dXJlID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBp
ZiAoIXRleHR1cmUpCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOwotICAgIHJl
dHVybiB0ZXh0dXJlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVM
b2NhdGlvbkxlbmd0aChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQotewotICAgIGNvbnN0IHVuc2lnbmVkIG1heFdlYkdMTG9jYXRpb25MZW5ndGggPSAyNTY7
Ci0gICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IG1heFdlYkdMTG9jYXRpb25MZW5ndGgpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGxlbmd0aCA+IDI1NiIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4
LCBHQzNEaW50IHkpCi17Ci0gICAgaWYgKHggPCAwIHx8IHkgPCAwKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJzaXplIDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdHJpbmco
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
InN0cmluZyBub3QgQVNDSUkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAg
c3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRl
eHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGggdGV4dHVy
ZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQ6Ci0gICAgICAgIGlmIChtX29lc1RleHR1cmVGbG9hdCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVM6Ci0gICAgICAgIGlmIChtX29lc1RleHR1cmVIYWxmRmxvYXQpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0
aFRleHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgZm9ybWF0
IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxV
TUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0g
ICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAg
ICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAotICAgICAgICAgICAg
JiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBmb3JtYXQiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlw
ZSBmb3IgUkdCIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAg
ICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAg
ICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80
Ci0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzVfNV8xCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0JBIGZv
cm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAg
ICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBlbmFibGVkIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxldmVsID4gMCkgewotICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAibGV2ZWwgbXVzdCBiZSAwIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7
Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Ci0gICAgICAgIGlmICghbV93
ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQu
IERFUFRIX1NURU5DSUwgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UXzI0XzgpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZv
ciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKLSAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNMZXZlbChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkKLXsK
LSAgICBpZiAobGV2ZWwgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA8IDAiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGlmIChsZXZlbCA+PSBt
X21heFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiBy
YW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9aOgotICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVs
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IC8vIFRoaXMgZnVuY3Rpb24gb25seSBjaGVja3MgaWYgbGV2ZWwgaXMgbGVnYWwsIHNvIHdlIHJl
dHVybiB0cnVlIGFuZCBkb24ndAotICAgIC8vIGdlbmVyYXRlIElOVkFMSURfRU5VTSBpZiB0YXJn
ZXQgaXMgaWxsZWdhbC4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlKQotewotICAgIC8vIFdlIGFic29sdXRlbHkgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgZm9y
bWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgotICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGVudHJ5IHBv
aW50cyB0YWtpbmcgSFRNTEltYWdlLCBldGMuIHdpbGwgcHJvZHVjZQotICAgIC8vIHRlbXBvcmFy
eSBkYXRhIGJhc2VkIG9uIHRoaXMgY29tYmluYXRpb24sIHNvIGl0IG11c3QgYmUgbGVnYWwuCi0g
ICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0aW9uTmFtZSwgZm9ybWF0
LCB0eXBlLCBsZXZlbCkgfHwgIXZhbGlkYXRlVGV4RnVuY0xldmVsKGZ1bmN0aW9uTmFtZSwgdGFy
Z2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh3aWR0aCA8IDAg
fHwgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR0MzRGludCBtYXhUZXh0dXJl
U2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwgLSAxIC0gbGV2ZWwpOwot
ICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRDoKLSAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCB8fCBoZWln
aHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lk
dGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBpZiAoZnVuY3Rpb25UeXBl
ICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgaGVpZ2h0IGhl
cmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQuCi0gICAgICAgIC8vIEZvciB0ZXhTdWJJ
bWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5nIHlvZmZzZXQgKyBoZWlnaHQg
aXMgaW4gcmFuZ2UuCi0gICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZv
ciBjdWJlIG1hcCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IGlu
dGVybmFsZm9ybWF0KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0ICE9IGludGVybmFs
Zm9ybWF0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoYm9yZGVy
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3JkZXIgIT0gMCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFy
cmF5QnVmZmVyVmlldyogcGl4ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTnVsbERpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uKQotewotICAgIGlmICgh
cGl4ZWxzKSB7Ci0gICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBOdWxsQWxsb3dlZCkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1h
dEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5h
bWUsIGZvcm1hdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGlm
IChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWlu
dDhBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAg
ICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQxNikgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX1NIT1JUIGJ1dCBBcnJheUJ1ZmZlclZpZXcg
bm90IFVpbnQxNkFycmF5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9F
U190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5
cGVGbG9hdDMyKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgRkxPQVQgYnV0IEFy
cmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKLSAgICAgICAgLy8g
QXMgcGVyIHRoZSBzcGVjaWZpY2F0aW9uLCBBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJlIG51bGwg
d2hlbgotICAgICAgICAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGlzIGVuYWJsZWQuCi0gICAg
ICAgIGlmIChwaXhlbHMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBIQUxGX0ZM
T0FUX09FUyBidXQgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBOVUxMIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IHRv
dGFsQnl0ZXNSZXF1aXJlZDsKLSAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0
ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFja0Fs
aWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7Ci0gICAgaWYgKGVycm9yICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJv
ciwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGRpbWVuc2lvbnMiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3Rh
bEJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpIHsK
LSAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9y
bWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKLSAg
ICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPT0gdG90YWxCeXRlc1JlcXVpcmVkKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3Vn
aCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElHTk1FTlQgPiAxIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9y
bWF0KQotewotICAgIHJldHVybiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250YWlucyhm
b3JtYXQpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVz
c2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyog
cGl4ZWxzKQotewotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhl
bHMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod2lkdGggPCAwIHx8
IGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBieXRlc1Jl
cXVpcmVkID0gMDsKLQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX0FUQ19SR0JfQU1EOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0Owot
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgICAgICBpbnQg
bnVtQmxvY2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRo
OwotICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0
IC0gMSkgLyBrQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxv
Y2tzQWNyb3NzICogbnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJ
VF9BTFBIQV9BTUQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFf
SU5URVJQT0xBVEVEX0FMUEhBX0FNRDoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50
IGtCbG9ja1NpemUgPSAxNjsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7
Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgICAgIGlu
dCBudW1CbG9ja3NBY3Jvc3MgPSAod2lkdGggKyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lk
dGg7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWln
aHQgLSAxKSAvIGtCbG9ja0hlaWdodDsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1C
bG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENf
NEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRD
XzRCUFBWMV9JTUc6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXpl
ID0gODsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDg7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQg
PSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2Nr
SGVpZ2h0KSAqIDQgKyA3KSAvIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1H
OgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAg
ICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSAxNjsKLSAgICAgICAgICAgIGNvbnN0IGlu
dCBrQmxvY2tIZWlnaHQgPSA4OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1h
eCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICog
MiArIDcpIC8ga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpICE9IGJ5dGVzUmVx
dWlyZWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxlbmd0aCBvZiBBcnJheUJ1ZmZlclZpZXcgaXMg
bm90IGNvcnJlY3QgZm9yIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogewotICAgICAgICBj
b25zdCBHQzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICBjb25zdCBHQzNEc2l6ZWkg
a0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgY29uc3QgR0MzRGludCBtYXhUZXh0dXJlU2l6ZSA9
IHRhcmdldCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKLSAg
ICAgICAgY29uc3QgR0MzRHNpemVpIG1heENvbXByZXNzZWREaW1lbnNpb24gPSBtYXhUZXh0dXJl
U2l6ZSA+PiBsZXZlbDsKLSAgICAgICAgYm9vbCB3aWR0aFZhbGlkID0gKGxldmVsICYmIHdpZHRo
ID09IDEpIHx8IChsZXZlbCAmJiB3aWR0aCA9PSAyKSB8fCAoISh3aWR0aCAlIGtCbG9ja1dpZHRo
KSAmJiB3aWR0aCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKLSAgICAgICAgYm9vbCBoZWln
aHRWYWxpZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0gMSkgfHwgKGxldmVsICYmIGhlaWdodCA9PSAy
KSB8fCAoIShoZWlnaHQgJSBrQmxvY2tIZWlnaHQpICYmIGhlaWdodCA8PSBtYXhDb21wcmVzc2Vk
RGltZW5zaW9uKTsKLSAgICAgICAgaWYgKCF3aWR0aFZhbGlkIHx8ICFoZWlnaHRWYWxpZCkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBmb3IgbGV2
ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BW
UlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BW
UlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9Q
VlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
UFZSVENfMkJQUFYxX0lNRzoKLSAgICAgICAgLy8gSGVpZ2h0IGFuZCB3aWR0aCBtdXN0IGJlIHBv
d2VycyBvZiAyLgotICAgICAgICBpZiAoKHdpZHRoICYgKHdpZHRoIC0gMSkpIHx8IChoZWlnaHQg
JiAoaGVpZ2h0IC0gMSkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhl
aWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBXZWJHTFRleHR1cmUqIHRleCkKLXsKLSAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9m
ZnNldCA8IDApIHsKLSAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgPCAwIik7Ci0g
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogewotICAgICAgICBjb25z
dCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0g
NDsKLSAgICAgICAgaWYgKCh4b2Zmc2V0ICUga0Jsb2NrV2lkdGgpIHx8ICh5b2Zmc2V0ICUga0Js
b2NrSGVpZ2h0KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZz
ZXQgbm90IG11bHRpcGxlIG9mIDQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAod2lkdGggLSB4b2Zmc2V0ID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQs
IGxldmVsKQotICAgICAgICAgICAgfHwgaGVpZ2h0IC0geW9mZnNldCA+IHRleC0+Z2V0SGVpZ2h0
KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rpb25OYW1l
LCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOwotICAgIH0KLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOiB7Ci0gICAg
ICAgIGlmICh4b2Zmc2V0IHx8IHlvZmZzZXQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
eG9mZnNldCBhbmQgeW9mZnNldCBtdXN0IGJlIHplcm8iKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAod2lkdGggIT0gdGV4LT5nZXRXaWR0aCh0YXJn
ZXQsIGxldmVsKQotICAgICAgICAgICAgfHwgaGVpZ2h0ICE9IHRleC0+Z2V0SGVpZ2h0KHRhcmdl
dCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgbXVzdCBt
YXRjaCBleGlzdGluZyBsZXZlbCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0
aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICB9Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
X1NUUklQOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
UklBTkdMRV9TVFJJUDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU46
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGRyYXcgbW9kZSIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
KQotewotICAgIGlmIChtX3N0ZW5jaWxNYXNrICE9IG1fc3RlbmNpbE1hc2tCYWNrIHx8IG1fc3Rl
bmNpbEZ1bmNSZWYgIT0gbV9zdGVuY2lsRnVuY1JlZkJhY2sgfHwgbV9zdGVuY2lsRnVuY01hc2sg
IT0gbV9zdGVuY2lsRnVuY01hc2tCYWNrKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQg
YW5kIGJhY2sgc3RlbmNpbHMgc2V0dGluZ3MgZG8gbm90IG1hdGNoIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gZnVuYykKLXsKLSAgICBzd2l0Y2ggKGZ1bmMpIHsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpORVZFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMRVNTOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpHUkVBVEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFUVVBTDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpOT1RFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFdBWVM6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZnVu
Y3Rpb24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLS1tX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKLSAgICBwcmlu
dFdhcm5pbmdUb0NvbnNvbGUobWVzc2FnZSk7Ci0KLSAgICBpZiAoIW1fbnVtR0xFcnJvcnNUb0Nv
bnNvbGVBbGxvd2VkKQotICAgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoIldlYkdMOiB0b28g
bWFueSBlcnJvcnMsIG5vIG1vcmUgZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWQgdG8gdGhlIGNvbnNv
bGUgZm9yIHRoaXMgY29udGV4dC4iKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYg
KCFjYW52YXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNhbnZhcygpLT5kb2N1bWVudCgpLmFk
ZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlJlbmRlcmluZywgTWVzc2FnZUxldmVsOjpX
YXJuaW5nLCBtZXNzYWdlKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCkKLXsKLSAgICBpZiAodGFyZ2V0ICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHN3aXRjaCAo
YXR0YWNobWVudCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycwotICAgICAgICAg
ICAgJiYgYXR0YWNobWVudCA+IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMAot
ICAgICAgICAgICAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkp
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVu
dCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX0FERDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGVU5DX1NVQlRSQUNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5k
RnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0Rl
bnVtIGRzdCkKLXsKLSAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5U
X0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0NP
TE9SKQotICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQ
SEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEp
KQotICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1Ig
fHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCi0g
ICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8
fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNyYyBhbmQgZHN0Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBjYXApCi17Ci0gICAgc3dpdGNoIChjYXApIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxM
X0ZBQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9MWUdPTl9PRkZTRVRfRklMTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVf
QUxQSEFfVE9fQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NP
VkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgY2FwYWJpbGl0eSIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBH
QzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAgIGlmICghdikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9u
LCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1
bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1
aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXpl
aSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYsIHNpemUsIHJlcXVpcmVk
TWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJB
cnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAgICBpZiAoIXYpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1l
LCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1p
blNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3Jt
TWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAgICBpZiAoIWxv
Y2F0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFt
KCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9u
IGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIGlmICghdikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAodHJhbnNwb3NlKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwgKHNpemUgJSByZXF1aXJlZE1p
blNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotV2ViR0xCdWZmZXIqIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpCi17Ci0g
ICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgYnVm
ZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKS5n
ZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSOgotICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0
Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBpZiAoIWJ1ZmZlcikgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgc3dpdGNoICh1c2FnZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUUkVBTV9EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFX
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVzoKLSAgICAgICAgcmV0
dXJuIGJ1ZmZlcjsKLSAgICB9Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB1c2FnZSIpOwotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVI
VE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVu
dCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghaW1hZ2UgfHwgIWltYWdl
LT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBpbWFnZSIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0IFVSTCYgdXJsID0gaW1hZ2UtPmNhY2hl
ZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7Ci0gICAgaWYgKHVybC5pc051bGwoKSB8fCB1cmwu
aXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IGltYWdlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHdvdWxkVGFp
bnRPcmlnaW4oaW1hZ2UpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJubyBjYW52YXMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAo
d291bGRUYWludE9yaWdpbihjYW52YXMpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYg
RU5BQkxFKFZJREVPKQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSFRNTFZp
ZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlk
ZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bm8gdmlkZW8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod291bGRU
YWludE9yaWdpbih2aWRlbykpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW5kZXgg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gSW4gR0wsIHdl
IHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KLSAgICBpZiAoaW5kZXggfHwgaXNH
TEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRTaXplKSB7Ci0gICAg
ICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWYoaW5kZXgs
IHYwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
M2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
NDoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwg
djIsIHYzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIFZlcnRl
eEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0cmliVmFsdWVbaW5kZXhdOwot
ICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7Ci0gICAgYXR0cmliVmFsdWUudmFsdWVbMV0g
PSB2MTsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOwotICAgIGF0dHJpYlZhbHVlLnZh
bHVlWzNdID0gdjM7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgRmxvYXQz
MkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQotewotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXYpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdmVydGV4
QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCks
IGV4cGVjdGVkU2l6ZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSkKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0g
bV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFu
Z2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0
aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxp
YW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKLSAgICAgICAgY2FzZSAx
OgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHYpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIG1fY29udGV4dC0+
dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIDM6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmRleCwgdik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0
ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0cmliVmFsdWUuaW5pdFZhbHVlKCk7Ci0gICAg
Zm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytpaSkKLSAgICAgICAgYXR0cmli
VmFsdWUudmFsdWVbaWldID0gdltpaV07Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppbml0VmVydGV4QXR0cmliMCgpCi17Ci0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKLSAgICAKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBj
cmVhdGVCdWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmplY3QoKSk7Ci0gICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOwotICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAw
KTsKLSAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOwotICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAw
KTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOwotICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVl
WzBdID0gMC4wZjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXSA9IDAuMGY7Ci0g
ICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBmOwotICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKLSAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmls
bCA9IGZhbHNlOwotICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSBmYWxzZTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVydGV4QXR0cmliMChHQzNEc2l6
ZWkgbnVtVmVydGV4KQotewotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVy
dGV4QXR0cmliU3RhdGUoMCk7Ci0gICAgY29uc3QgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZh
bHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKLSAgICBpZiAoIW1fY3VycmVudFByb2dyYW0p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIHVzaW5nVmVydGV4QXR0cmliMCA9IG1f
Y3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7Ci0gICAgaWYgKHVzaW5nVmVy
dGV4QXR0cmliMCkKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IHRydWU7Ci0g
ICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0ZXhBdHRyaWIwKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAgJiYgIW1fdmVydGV4QXR0cmli
MFVzZWRCZWZvcmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3ZlcnRleEF0dHJpYjBV
c2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmplY3QoKSk7Ci0g
ICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZlcnRleCArIDEpICogNCAqIHNp
emVvZihHQzNEZmxvYXQpOwotICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+IG1fdmVydGV4QXR0cmli
MEJ1ZmZlclNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IGJ1
ZmZlckRhdGFTaXplOwotICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IHRydWU7
Ci0gICAgfQotICAgIGlmICh1c2luZ1ZlcnRleEF0dHJpYjAKLSAgICAgICAgJiYgKG1fZm9yY2VB
dHRyaWIwQnVmZmVyUmVmaWxsCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVswXSAh
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQotICAgICAgICAgICAgfHwgYXR0cmliVmFs
dWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0KLSAgICAgICAgICAg
IHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJd
Ci0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVszXSAhPSBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVszXSkpIHsKLSAgICAgICAgYXV0byBidWZmZXJEYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7Ci0gICAgICAgIGZvciAoR0Mz
RHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lpKSB7Ci0gICAgICAgICAgICBi
dWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVswXTsKLSAgICAgICAgICAgIGJ1
ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsxXTsKLSAgICAgICAgICAg
IGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsyXTsKLSAgICAgICAg
ICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRyaWJWYWx1ZS52YWx1ZVszXTsKLSAgICAg
ICAgfQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IGF0dHJpYlZhbHVl
LnZhbHVlWzBdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXSA9IGF0dHJp
YlZhbHVlLnZhbHVlWzFdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9
IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwotICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZl
clJlZmlsbCA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEoR3JhcGhp
Y3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0YVNpemUsIGJ1ZmZlckRhdGEu
Z2V0KCkpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgNCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0
dHJpYjBTaW11bGF0aW9uKCkKLXsKLSAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nICE9IG1f
dmVydGV4QXR0cmliMEJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKHN0YXRlLmJ1ZmZlckJp
bmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAs
IHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFs
U3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKG1fYm91bmRBcnJh
eUJ1ZmZlci5nZXQoKSkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KCkKLXsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2
ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0
bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOwotICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50
KGV2ZW50KTsKLSAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKLSAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExvc3RDb250ZXh0ICYmIG1fcmVz
dG9yZUFsbG93ZWQpCi0gICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQoKQotewot
ICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKLSAgICBpZiAoIW1fY29udGV4dExvc3QpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9y
ZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZQotICAgIC8vIHdlYmdsY29udGV4
dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgotICAgIC8vCi0gICAgLy8gQmVjYXVz
ZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1cCBmb3IgcmVhbCB2cy4gc3ludGhl
dGljIGxvc3QKLSAgICAvLyBjb250ZXh0IGV2ZW50cywgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBh
Ym91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZwotICAgIC8vIHRoZSByZXRyeSBsb29wIGZv
ciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCi0gICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgY29udGV4dExvc3RSZWFzb24gPSBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOwotCi0gICAgc3dp
dGNoIChjb250ZXh0TG9zdFJlYXNvbikgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SOgotICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24g
bWlnaHQgbm90IGZ1bGx5Ci0gICAgICAgIC8vIHN1cHBvcnQgR0xfQVJCX3JvYnVzdG5lc3Mgc2Vt
YW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCi0gICAgICAgIC8vIFdFQkdMX2xvc2VfY29u
dGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVzZWQgdG8gZm9yY2UKLSAgICAgICAgLy8g
YSBsb3N0IGNvbnRleHQuCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpH
VUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6Ci0gICAgICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4
dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0IHdhcwotICAgICAgICAvLyBndWlsdHkg
b2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCi0gICAgICAgIHByaW50V2FybmluZ1RvQ29u
c29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFnZSBjYXVzZWQgdGhlIGdyYXBo
aWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3JpbmcgdGhlIGNvbnRleHQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJTk5PQ0VOVF9DT05URVhUX1JFU0VUX0FS
QjoKLSAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBjb250ZXh0IHRvIGJlIHJlc3RvcmVkLgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VU5LTk9XTl9DT05URVhUX1JF
U0VUX0FSQjoKLSAgICAgICAgLy8gV2Fybi4gSWRlYWxseSwgcHJvbXB0IHRoZSB1c2VyIHRlbGxp
bmcgdGhlbSB0aGF0IFdlYkdMCi0gICAgICAgIC8vIGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQg
aGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8KLSAgICAgICAgLy8gcmVzZXQgYW5kIGFz
ayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRpbnVlIHJ1bm5pbmcKLSAgICAgICAgLy8g
dGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInllcyIgc2hvdWxkIHdlIHN0YXJ0Ci0gICAg
ICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgY29udGV4dC4KLSAgICAgICAgcHJpbnRX
YXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50IG9uIHRoZSBwYWdlIG1pZ2h0
IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0Iik7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLmZyYW1l
KCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFmcmFtZS0+
bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJs
ZWQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52
aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0gICAgU2Nyb2xsVmlldyog
cm9vdCA9IHZpZXctPnJvb3QoKTsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsKLSAg
ICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdpbmRvdygpOwotICAgIGlmICgh
aG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUobV9hdHRyaWJ1dGVzLCBob3N0
V2luZG93KSk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHRMb3N0
TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCi0gICAgICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFy
dE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBpcyB0aGUgYmVz
dCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCi0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICIiLCAiZXJy
b3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250
ZXh0M0QuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKLSAgICAgICAgRHJhd2luZ0J1ZmZlcjo6UHJlc2VydmVE
cmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZl
ciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJhd2luZ0J1ZmZlcjo6RGlzY2FyZDsKLSAg
ICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJlbWVudCBhbHBoYSA9IG1fYXR0cmlidXRl
cy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDogRHJhd2luZ0J1ZmZlcjo6T3BhcXVlOwot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoY29udGV4dC5n
ZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHByZXNlcnZlLCBhbHBoYSk7Ci0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0KLQotICAgIG1fY29udGV4dCA9IGNvbnRl
eHQ7Ci0gICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwotICAgIHNldHVwRmxhZ3MoKTsKLSAgICBp
bml0aWFsaXplTmV3Q29udGV4dCgpOwotICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KFdlYkdM
Q29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dHJlc3RvcmVkRXZl
bnQsIGZhbHNlLCB0cnVlLCAiIikpOwotfQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4dCkgY29uc3QKLXsKLSAgICBpZiAodGV4
dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1
cm4gdGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hl
OjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKLSAgICA6IG1fYnVmZmVycyhzdGQ6
Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5bXT4oY2FwYWNpdHkpKQot
ICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKLXsKLX0KLQotSW1hZ2VCdWZmZXIqIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKLXsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9jYXBhY2l0
eTsgKytpKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICghYnVmKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChidWYt
PmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBi
dWJibGVUb0Zyb250KGkpOwotICAgICAgICByZXR1cm4gYnVmOwotICAgIH0KLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
MSk7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpID0gc3Rk
OjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwotICAgIG1fYnVmZmVyc1tpXSA9IFdURjo6bW92ZSh0
ZW1wKTsKLQotICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7Ci0gICAg
YnViYmxlVG9Gcm9udChpKTsKLSAgICByZXR1cm4gYnVmOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxlVG9Gcm9udChpbnQgaWR4KQot
ewotICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCi0gICAgICAgIG1fYnVmZmVyc1tp
XS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKLX0KLQotbmFtZXNwYWNlIHsKLQotICAgIFN0cmluZyBH
ZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZXJy
b3IpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNOgotICAg
ICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX1ZBTFVF
IjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT046Ci0g
ICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9OIjsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKLSAgICAgICAgICAgIHJldHVybiAiT1VUX09G
X01FTU9SWSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTiI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9T
VF9XRUJHTDoKLSAgICAgICAgICAgIHJldHVybiAiQ09OVEVYVF9MT1NUX1dFQkdMIjsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiV2ViR0wgRVJS
T1IoJTA0eCkiLCBlcnJvcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0gLy8gbmFtZXNwYWNlIGFu
b255bW91cwotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3ludGhlc2l6ZUdMRXJyb3Io
R0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVz
Y3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5KQotewotICAgIGlmICht
X3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRpc3BsYXkgPT0gRGlzcGxheUluQ29uc29s
ZSkgewotICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsgR2V0RXJyb3JTdHJp
bmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1lKSArICI6ICIgKyBTdHJpbmco
ZGVzY3JpcHRpb24pOwotICAgICAgcHJpbnRHTEVycm9yVG9Db25zb2xlKHN0cik7Ci0gICAgfQot
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwotfQotCi0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29uc29sZShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQotewotICAgIGlmIChtX3N5bnRo
ZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmcoIldl
YkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlv
bik7Ci0gICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIpOwotICAgIH0KLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRlc3QoKQotewotICAgIGJvb2wg
aGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKLQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZykKLSAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+aGFz
U3RlbmNpbEJ1ZmZlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8V2ViR0xDb250ZXh0
QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgICAg
IGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+c3RlbmNpbCgpOwotICAgIH0KLSAgICBl
bmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCwKLSAgICAgICAg
ICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3RlbmNpbEJ1ZmZlcik7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2Fw
YWJpbGl0eSwgYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSkKLSAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7Ci0gICAgZWxzZQotICAgICAgICBtX2NvbnRleHQtPmRp
c2FibGUoY2FwYWJpbGl0eSk7Ci19Ci0KLUludFNpemUgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
bGFtcGVkQ2FudmFzU2l6ZSgpCi17Ci0gICAgcmV0dXJuIEludFNpemUoY2xhbXAoY2FudmFzKCkt
PndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBdKSwKLSAgICAgICAgICAgICAgICAgICBj
bGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzFdKSk7Ci19Ci0K
LUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhEcmF3QnVmZmVycygpCi17Ci0g
ICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlm
ICghbV9tYXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRl
bnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhEcmF3QnVmZmVycyk7Ci0gICAg
aWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0
dGFjaG1lbnRzKTsKLSAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMgcmVxdWlyZXMgTUFYX0NPTE9S
X0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCi0gICAgcmV0dXJuIHN0ZDo6bWluKG1f
bWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7Ci19Ci0KLUdDM0RpbnQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKLXsKLSAgICBpZiAo
IXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX21h
eENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5z
aW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRz
KTsKLSAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVudW0gYnVmKQotewotICAgIG1f
YmFja0RyYXdCdWZmZXIgPSBidWY7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKLXsKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAg
IGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCi17Ci0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAg
ICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlVW5p
dHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSwgZWMpOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNEcmF3QnVmZmVycygpCi17Ci0g
ICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkKSB7Ci0gICAgICAg
IG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSB0cnVlOwotICAgICAgICBt
X2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKHRoaXMp
OwotICAgIH0KLSAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1N1cHBvcnRlZDsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwg
R0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewot
ICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgbW9kZSwg
Zmlyc3QsIGNvdW50LCBwcmltY291bnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJp
bWNvdW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImRyYXdBcnJheXNJbnN0YW5jZWQiLCAicHJpbWNvdW50IDwgMCIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFwcmltY291bnQpIHsKLSAgICAg
ICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
bGVhcklmQ29tcG9zaXRlZCgpOwotCi0gICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
ZmFsc2U7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwot
ICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxl
dGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgdHJ1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBy
aW1jb3VudCk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0
LCBjb3VudCwgcHJpbWNvdW50KTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0
ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRy
aWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgZmFsc2UpOwot
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsK
LSAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7Ci0gICAgaWYgKCF2YWxpZGF0ZURyYXdFbGVt
ZW50cygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgbW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwg
bnVtRWxlbWVudHMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJpbWNvdW50IDwgMCkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImRyYXdFbGVtZW50c0luc3RhbmNlZCIsICJwcmltY291bnQgPCAwIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXByaW1jb3VudCkgewotICAgICAgICBtYXJrQ29u
dGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNsZWFySWZDb21w
b3NpdGVkKCk7Ci0KLSAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQot
ICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGlj
X2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpOwotICAgICAgICB2ZXJ0ZXhB
dHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKLSAg
ICB9Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVD
b21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIHRydWUpOwotICAgIG1fY29udGV4
dC0+ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpLCBwcmltY291bnQpOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRl
clZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgp
KQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNl
ZCIsIGZhbHNlKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1
aW50IGRpdmlzb3IpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InZlcnRleEF0dHJpYkRpdmlzb3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0
dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
RGl2aXNvcihpbmRleCwgZGl2aXNvcik7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMTc2OTk0KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDox
NzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRfaAorI2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAorCisjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgor
I2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRl
ICJXZWJHTEdldEluZm8uaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8cnVudGltZS9G
bG9hdDMyQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBB
TkdMRUluc3RhbmNlZEFycmF5czsKK2NsYXNzIEVYVEJsZW5kTWluTWF4OworY2xhc3MgRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljOworY2xhc3MgRVhUU2hhZGVyVGV4dHVyZUxPRDsKK2NsYXNz
IEVYVHNSR0I7CitjbGFzcyBFWFRGcmFnRGVwdGg7CitjbGFzcyBIVE1MSW1hZ2VFbGVtZW50Owor
Y2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VE
YXRhOworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM7CitjbGFz
cyBPRVNUZXh0dXJlRmxvYXQ7CitjbGFzcyBPRVNUZXh0dXJlRmxvYXRMaW5lYXI7CitjbGFzcyBP
RVNUZXh0dXJlSGFsZkZsb2F0OworY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKK2Ns
YXNzIE9FU1ZlcnRleEFycmF5T2JqZWN0OworY2xhc3MgT0VTRWxlbWVudEluZGV4VWludDsKK2Ns
YXNzIFdlYkdMQWN0aXZlSW5mbzsKK2NsYXNzIFdlYkdMQnVmZmVyOworY2xhc3MgV2ViR0xDb250
ZXh0R3JvdXA7CitjbGFzcyBXZWJHTENvbnRleHRPYmplY3Q7CitjbGFzcyBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDOworY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOworY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM7CitjbGFzcyBXZWJHTENvbnRleHRBdHRyaWJ1dGVz
OworY2xhc3MgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzsKK2NsYXNzIFdlYkdMRGVidWdTaGFkZXJz
OworY2xhc3MgV2ViR0xEZXB0aFRleHR1cmU7CitjbGFzcyBXZWJHTERyYXdCdWZmZXJzOworY2xh
c3MgV2ViR0xFeHRlbnNpb247CitjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOworY2xhc3MgV2ViR0xM
b3NlQ29udGV4dDsKK2NsYXNzIFdlYkdMT2JqZWN0OworY2xhc3MgV2ViR0xQcm9ncmFtOworY2xh
c3MgV2ViR0xSZW5kZXJidWZmZXI7CitjbGFzcyBXZWJHTFNoYWRlcjsKK2NsYXNzIFdlYkdMU2hh
cmVkT2JqZWN0OworY2xhc3MgV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ7CitjbGFzcyBXZWJH
TFRleHR1cmU7CitjbGFzcyBXZWJHTFVuaWZvcm1Mb2NhdGlvbjsKK2NsYXNzIFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0
LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50Kiwg
V2ViR0xDb250ZXh0QXR0cmlidXRlcyopOworICAgIHZpcnR1YWwgfldlYkdMUmVuZGVyaW5nQ29u
dGV4dCgpOworCisgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisjaWYgUExBVEZPUk0oV0lOKQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYWNj
ZWxlcmF0ZWQgM2QgY2FudmFzIG9uIFdpbmRvd3MuCisgICAgdmlydHVhbCBib29sIGlzQWNjZWxl
cmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorI2Vsc2UKKyAgICB2aXJ0
dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
KyNlbmRpZgorCisgICAgaW50IGRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0OworICAgIGludCBk
cmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3Q7CisKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYXR0YWNoU2hhZGVyKFdl
YkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmlu
ZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBXZWJHTEJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJpbmRGcmFt
ZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5k
ZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51
bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJsZW5k
Q29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0Mz
RGZsb2F0IGFscGhhKTsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSk7Cisg
ICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0g
bW9kZUFscGhhKTsKKyAgICB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51
bSBkZmFjdG9yKTsKKyAgICB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwg
R0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpOwor
CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUsIEdD
M0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJW
aWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYnVm
ZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVy
KiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVt
IHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRp
b25Db2RlJik7CisKKyAgICBHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVt
IHRhcmdldCk7CisgICAgdm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzayk7CisgICAgdm9pZCBj
bGVhckNvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0IGJsdWUs
IEdDM0RmbG9hdCBhbHBoYSk7CisgICAgdm9pZCBjbGVhckRlcHRoKEdDM0RmbG9hdCk7CisgICAg
dm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCk7CisgICAgdm9pZCBjb2xvck1hc2soR0MzRGJvb2xl
YW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4g
YWxwaGEpOworICAgIHZvaWQgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNv
ZGUmKTsKKworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSk7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVy
VmlldyogZGF0YSk7CisKKyAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKTsK
KyAgICB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworCisgICAgUGFzc1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4gY3JlYXRlQnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVm
ZmVyPiBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBj
cmVhdGVQcm9ncmFtKCk7CisgICAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRl
UmVuZGVyYnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gY3JlYXRlU2hhZGVy
KEdDM0RlbnVtIHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4gY3JlYXRlVGV4dHVyZSgpOworCisgICAgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2Rl
KTsKKworICAgIHZvaWQgZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKik7CisgICAgdm9pZCBkZWxl
dGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7CisgICAgdm9pZCBkZWxldGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSopOworICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVy
YnVmZmVyKik7CisgICAgdm9pZCBkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKyAgICB2b2lk
IGRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlKik7CisKKyAgICB2b2lkIGRlcHRoRnVuYyhHQzNE
ZW51bSk7CisgICAgdm9pZCBkZXB0aE1hc2soR0MzRGJvb2xlYW4pOworICAgIHZvaWQgZGVwdGhS
YW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKTsKKyAgICB2b2lkIGRldGFjaFNo
YWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKTsKKyAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJhd0FycmF5
cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsK
KworICAgIHZvaWQgZW5hYmxlKEdDM0RlbnVtIGNhcCk7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZmlu
aXNoKCk7CisgICAgdm9pZCBmbHVzaCgpOworICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJi
dWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSosIEdDM0RpbnQgbGV2ZWwsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGZyb250RmFjZShHQzNEZW51bSBtb2RlKTsKKyAgICB2
b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCk7CisKKyAgICBQYXNzUmVmUHRyPFdl
YkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGlu
ZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdl
dEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBib29sIGdldEF0dGFjaGVkU2hhZGVycyhXZWJHTFByb2dyYW0qLCBWZWN0b3I8
UmVmUHRyPFdlYkdMU2hhZGVyPj4mLCBFeGNlcHRpb25Db2RlJik7CisgICAgR0MzRGludCBnZXRB
dHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIFdl
YkdMR2V0SW5mbyBnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmli
dXRlcz4gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBHQzNEZW51bSBnZXRFcnJvcigpOwor
ICAgIFdlYkdMRXh0ZW5zaW9uKiBnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAg
ICBXZWJHTEdldEluZm8gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQ
cm9ncmFtKiwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgZ2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdM
R2V0SW5mbyBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdMR2V0SW5mbyBnZXRTaGFkZXJQYXJh
bWV0ZXIoV2ViR0xTaGFkZXIqLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IGdldFNoYWRlclByZWNp
c2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBF
eGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIGdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlcios
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNp
b25zKCk7CisgICAgV2ViR0xHZXRJbmZvIGdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFVu
aWZvcm0oV2ViR0xQcm9ncmFtKiwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBFeGNlcHRp
b25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gZ2V0VW5pZm9y
bUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBXZWJHTEdldEluZm8gZ2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIGxvbmcgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJP
ZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKTsKKworICAgIHZvaWQgaGludChH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpOworICAgIEdDM0Rib29sZWFuIGlzQnVmZmVy
KFdlYkdMQnVmZmVyKik7CisgICAgYm9vbCBpc0NvbnRleHRMb3N0KCkgY29uc3Q7CisgICAgR0Mz
RGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNhcCk7CisgICAgR0MzRGJvb2xlYW4gaXNGcmFt
ZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7CisgICAgR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFdl
YkdMUHJvZ3JhbSopOworICAgIEdDM0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVy
YnVmZmVyKik7CisgICAgR0MzRGJvb2xlYW4gaXNTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKyAgICBH
QzNEYm9vbGVhbiBpc1RleHR1cmUoV2ViR0xUZXh0dXJlKik7CisKKyAgICB2b2lkIGxpbmVXaWR0
aChHQzNEZmxvYXQpOworICAgIHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQg
cGFyYW0pOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxv
YXQgdW5pdHMpOworICAgIHZvaWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2
YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KTsKKyAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAgdm9pZCBz
aGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVp
bnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdD
M0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5j
aWxNYXNrKEdDM0R1aW50KTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0g
ZmFjZSwgR0MzRHVpbnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51
bSB6cGFzcyk7CisKKyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZp
ZXcqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKKworICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pOworICAgIHZvaWQg
dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBh
cmFtKTsKKworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
RGF0YSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBI
VE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2lmIEVOQUJM
RShWSURFTykKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50
KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKyAgICB2b2lkIHVuaWZvcm0xZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3Jt
MWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTFpKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTFp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMmYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
ZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlm
b3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0
MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTNmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00
Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtNGZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwg
R0MzRGludCB3LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5z
cG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Ri
b29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSog
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
M0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2
b2lkIHVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZv
aWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KTsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVl
cywgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
R0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXpl
KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmli
M2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVy
dGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVp
IHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0Mz
RGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0
LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworCisgICAgLy8gV0VCS0lU
X2xvc2VfY29udGV4dCBzdXBwb3J0CisgICAgZW51bSBMb3N0Q29udGV4dE1vZGUgeworICAgICAg
ICAvLyBMb3N0IGNvbnRleHQgb2NjdXJyZWQgYXQgdGhlIGdyYXBoaWNzIHN5c3RlbSBsZXZlbC4K
KyAgICAgICAgUmVhbExvc3RDb250ZXh0LAorCisgICAgICAgIC8vIExvc3QgY29udGV4dCBwcm92
b2tlZCBieSBXRUJLSVRfbG9zZV9jb250ZXh0LgorICAgICAgICBTeW50aGV0aWNMb3N0Q29udGV4
dAorICAgIH07CisgICAgdm9pZCBmb3JjZUxvc3RDb250ZXh0KExvc3RDb250ZXh0TW9kZSk7Cisg
ICAgdm9pZCBmb3JjZVJlc3RvcmVDb250ZXh0KCk7CisgICAgdm9pZCBsb3NlQ29udGV4dEltcGwo
TG9zdENvbnRleHRNb2RlKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRl
eHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIFdlYkdMQ29udGV4
dEdyb3VwKiBjb250ZXh0R3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRHcm91cC5nZXQo
KTsgfQorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAg
ICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKSBvdmVycmlkZTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKworICAgIHZvaWQgcmVtb3Zl
U2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0
T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOworICAgIAorICAgIHVuc2lnbmVkIGdldE1heFZl
cnRleEF0dHJpYnMoKSBjb25zdCB7IHJldHVybiBtX21heFZlcnRleEF0dHJpYnM7IH0KKworICAg
IC8vIEFOR0xFX2luc3RhbmNlZF9hcnJheXMgZXh0ZW5zaW9uIGZ1bmN0aW9ucy4KKyAgICB2b2lk
IGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
emVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKKyAgICB2b2lkIGRyYXdFbGVtZW50c0lu
c3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxv
bmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpOworICAgIHZvaWQgdmVydGV4QXR0
cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcik7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMRHJhd0J1ZmZlcnM7CisgICAgZnJpZW5kIGNsYXNzIFdl
YkdMRnJhbWVidWZmZXI7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMT2JqZWN0OworICAgIGZyaWVu
ZCBjbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xEZWJ1
Z1NoYWRlcnM7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM7Cisg
ICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzsKKyAgICBmcmllbmQg
Y2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrOworICAgIGZyaWVuZCBjbGFzcyBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOworCisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhU
TUxDYW52YXNFbGVtZW50KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOworICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CisgICAgdm9pZCBp
bml0aWFsaXplTmV3Q29udGV4dCgpOworICAgIHZvaWQgc2V0dXBGbGFncygpOworCisgICAgLy8g
QWN0aXZlRE9NT2JqZWN0CisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gIldlYkdMUmVuZGVyaW5nQ29udGV4dCI7IH0KKworICAgIHZvaWQgYWRkU2hhcmVkT2Jq
ZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdM
Q29udGV4dE9iamVjdCopOworICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwor
CisgICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB2b2lkIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOworCisgICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBvbiB0b3Ag
b2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9uLgorICAgIGJvb2wgaXNHTEVTMkNvbXBs
aWFudCgpIHsgcmV0dXJuIG1faXNHTEVTMkNvbXBsaWFudDsgfQorICAgIC8vIFF1ZXJ5IGlmIHRo
ZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KKyAgICBib29sIGlzR0xFUzJOUE9U
U3RyaWN0KCkgeyByZXR1cm4gbV9pc0dMRVMyTlBPVFN0cmljdDsgfQorICAgIC8vIFF1ZXJ5IGlm
IHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1vZi1ib3VuZHMg
YnVmZmVyIGFjY2Vzc2VzLgorICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNB
Y2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
czsgfQorICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0aWFsaXplcyB0
ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCisgICAgYm9vbCBpc1Jlc291cmNlU2FmZSgpIHsg
cmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7IH0KKyAgICAvLyBRdWVyeSBpZiBkZXB0aF9zdGVuY2ls
IGJ1ZmZlciBpcyBzdXBwb3J0ZWQuCisgICAgYm9vbCBpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgp
IHsgcmV0dXJuIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7IH0KKworICAgIC8vIEhlbHBlciB0
byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKKyAgICAvLyBs
aWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KKyAgICB1bnNpZ25lZCBpbnQgc2l6ZUluQnl0ZXMo
R0MzRGVudW0gdHlwZSk7CisKKyAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIGNvdW50IGFuZCBv
ZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVudCBhcnJheSBidWZmZXIK
KyAgICBib29sIHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKKworICAgIC8vIENvbnNlcnZhdGl2ZSBidXQg
cXVpY2sgaW5kZXggdmFsaWRhdGlvbgorICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29uc2Vy
dmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKKwor
ICAgIC8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlvbiAtLSBvbmx5IGRvbmUgaWYg
Y29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCisgICAgYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlQcmVj
aXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVu
c2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKKyAgICBib29sIHZhbGlkYXRlVmVydGV4QXR0
cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50ID0g
MCk7CisKKyAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciosIFdlYkdMT2Jq
ZWN0Kik7CisKKyAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RHNpemVpIHByaW1jb3VudCk7CisgICAgYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6
ZWkgcHJpbWNvdW50KTsKKworICAgIC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0
LgorICAgIHZvaWQgYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOworCisgICAg
UGFzc1JlZlB0cjxJbWFnZT4gZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSosIGludCB3aWR0aCwg
aW50IGhlaWdodCwgaW50IGRldmljZVNjYWxlRmFjdG9yKTsKKworI2lmIEVOQUJMRShWSURFTykK
KyAgICBQYXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50
KiwgQmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKyAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0
R3JvdXA+IG1fY29udGV4dEdyb3VwOworCisgICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciBy
ZW5kZXJpbmcgdG8gYSBEcmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5CisgICAgLy8g
dG8gdGhlIGJhY2stYnVmZmVyIG9mIG1fY29udGV4dC4KKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZl
cj4gbV9kcmF3aW5nQnVmZmVyOworCisgICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBl
dmVudCBvbmNlIGl0IGlzIGRldGVybWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgorICAgIC8vIFRo
aXMgaXMgdXNlZCBib3RoIGZvciBzeW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZv
ciByZWFsIG9uZXMsIGl0J3MKKyAgICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3Jp
cHQgb24gdGhlIHN0YWNrLCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKKyAgICAvLyBvbiBo
b3cgZXhhY3RseSB0aGUgcGxhdGZvcm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxv
c3QuIEZvciBiZXR0ZXIKKyAgICAvLyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRp
c3BhdGNoIG9mIHRoZSBldmVudC4KKyAgICBUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVu
dFRpbWVyOworICAgIGJvb2wgbV9yZXN0b3JlQWxsb3dlZDsKKyAgICBUaW1lciBtX3Jlc3RvcmVU
aW1lcjsKKworICAgIGJvb2wgbV9uZWVkc1VwZGF0ZTsKKyAgICBib29sIG1fbWFya2VkQ2FudmFz
RGlydHk7CisgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3Rz
OworCisgICAgLy8gTGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFi
b3V0IHNpemVzIGZvciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRf
QVJSQVlfQlVGRkVSCisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7
CisgICAgCisgICAgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZl
cnRleEFycmF5T2JqZWN0OworICAgIFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3Q7CisgICAgdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2Jq
ZWN0KFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCisg
ICAgeworICAgICAgICBpZiAoYXJyYXlPYmplY3QpCisgICAgICAgICAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QgPSBhcnJheU9iamVjdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CisgICAg
fQorICAgIAorICAgIGNsYXNzIFZlcnRleEF0dHJpYlZhbHVlIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFZlcnRleEF0dHJpYlZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5pdFZhbHVl
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgaW5pdFZhbHVlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFsdWVbMF0gPSAwLjBmOworICAgICAgICAgICAgdmFsdWVbMV0g
PSAwLjBmOworICAgICAgICAgICAgdmFsdWVbMl0gPSAwLjBmOworICAgICAgICAgICAgdmFsdWVb
M10gPSAxLjBmOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBHQzNEZmxvYXQgdmFsdWVb
NF07CisgICAgfTsKKyAgICBWZWN0b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0cmli
VmFsdWU7CisgICAgdW5zaWduZWQgbV9tYXhWZXJ0ZXhBdHRyaWJzOworICAgIFJlZlB0cjxXZWJH
TEJ1ZmZlcj4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOworICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyU2l6ZTsKKyAgICBHQzNEZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07
CisgICAgYm9vbCBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbDsKKyAgICBib29sIG1fdmVydGV4
QXR0cmliMFVzZWRCZWZvcmU7CisKKyAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQ
cm9ncmFtOworICAgIFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGlu
ZzsKKyAgICBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsK
KyAgICBzdHJ1Y3QgVGV4dHVyZVVuaXRTdGF0ZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1
cmU+IHRleHR1cmUyREJpbmRpbmc7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1
cmVDdWJlTWFwQmluZGluZzsKKyAgICB9OworICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBt
X3RleHR1cmVVbml0czsKKyAgICB1bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7CisK
KyAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZTJEOworICAgIFJlZlB0cjxX
ZWJHTFRleHR1cmU+IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcDsKKworICAgIFZlY3RvcjxHQzNEZW51
bT4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CisKKyAgICAvLyBGaXhlZC1zaXplIGNhY2hl
IG9mIHJldXNhYmxlIGltYWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCisg
ICAgY2xhc3MgTFJVSW1hZ2VCdWZmZXJDYWNoZSB7CisgICAgcHVibGljOgorICAgICAgICBMUlVJ
bWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSk7CisgICAgICAgIC8vIFRoZSBwb2ludGVyIHJl
dHVybmVkIGlzIG93bmVkIGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgorICAgICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdm9pZCBidWJibGVUb0Zyb250KGludCBpZHgpOworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7CisgICAgICAgIGlu
dCBtX2NhcGFjaXR5OworICAgIH07CisgICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRl
ZEltYWdlQ2FjaGU7CisKKyAgICBHQzNEaW50IG1fbWF4VGV4dHVyZVNpemU7CisgICAgR0MzRGlu
dCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKKyAgICBHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVy
U2l6ZTsKKyAgICBHQzNEaW50IG1fbWF4Vmlld3BvcnREaW1zWzJdOworICAgIEdDM0RpbnQgbV9t
YXhUZXh0dXJlTGV2ZWw7CisgICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisK
KyAgICBHQzNEaW50IG1fbWF4RHJhd0J1ZmZlcnM7CisgICAgR0MzRGludCBtX21heENvbG9yQXR0
YWNobWVudHM7CisgICAgR0MzRGVudW0gbV9iYWNrRHJhd0J1ZmZlcjsKKyAgICBib29sIG1fZHJh
d0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQ7CisgICAgYm9vbCBtX2RyYXdCdWZmZXJz
U3VwcG9ydGVkOworCisgICAgR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7CisgICAgR0MzRGludCBt
X3VucGFja0FsaWdubWVudDsKKyAgICBib29sIG1fdW5wYWNrRmxpcFk7CisgICAgYm9vbCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGE7CisgICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29u
dmVyc2lvbjsKKyAgICBib29sIG1fY29udGV4dExvc3Q7CisgICAgTG9zdENvbnRleHRNb2RlIG1f
Y29udGV4dExvc3RNb2RlOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0
cmlidXRlczsKKworICAgIGJvb2wgbV9sYXllckNsZWFyZWQ7CisgICAgR0MzRGZsb2F0IG1fY2xl
YXJDb2xvcls0XTsKKyAgICBib29sIG1fc2Npc3NvckVuYWJsZWQ7CisgICAgR0MzRGZsb2F0IG1f
Y2xlYXJEZXB0aDsKKyAgICBHQzNEaW50IG1fY2xlYXJTdGVuY2lsOworICAgIEdDM0Rib29sZWFu
IG1fY29sb3JNYXNrWzRdOworICAgIEdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOworCisgICAgYm9v
bCBtX3N0ZW5jaWxFbmFibGVkOworICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNp
bE1hc2tCYWNrOworICAgIEdDM0RpbnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1Jl
ZkJhY2s7IC8vIE5vdGUgdGhhdCB0aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywg
bm90IHRoZSBpbnRlcm5hbCBjbGFtcGVkIHZhbHVlLgorICAgIEdDM0R1aW50IG1fc3RlbmNpbEZ1
bmNNYXNrLCBtX3N0ZW5jaWxGdW5jTWFza0JhY2s7CisKKyAgICBib29sIG1faXNHTEVTMkNvbXBs
aWFudDsKKyAgICBib29sIG1faXNHTEVTMk5QT1RTdHJpY3Q7CisgICAgYm9vbCBtX2lzRXJyb3JH
ZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7CisgICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZl
OworICAgIGJvb2wgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKKyAgICBib29sIG1faXNSb2J1
c3RuZXNzRVhUU3VwcG9ydGVkOworCisgICAgYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25z
b2xlOworICAgIGludCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKKworICAgIC8vIEEg
V2ViR0xSZW5kZXJpbmdDb250ZXh0IGNhbiBiZSBjcmVhdGVkIGluIGEgc3RhdGUgd2hlcmUgaXQg
YXBwZWFycyBhcworICAgIC8vIGEgdmFsaWQgYW5kIGFjdGl2ZSBjb250ZXh0LCBidXQgd2lsbCBu
b3QgZXhlY3V0ZSBhbnkgaW1wb3J0YW50IG9wZXJhdGlvbnMKKyAgICAvLyB1bnRpbCBpdHMgbG9h
ZCBwb2xpY3kgaXMgY29tcGxldGVseSByZXNvbHZlZC4KKyAgICBib29sIG1faXNQZW5kaW5nUG9s
aWN5UmVzb2x1dGlvbjsKKyAgICBib29sIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbjsK
KyAgICBib29sIGlzQ29udGV4dExvc3RPclBlbmRpbmcoKTsKKworICAgIC8vIEVuYWJsZWQgZXh0
ZW5zaW9uIG9iamVjdHMuCisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVEZyYWdEZXB0aD4gbV9leHRG
cmFnRGVwdGg7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVEJsZW5kTWluTWF4PiBtX2V4dEJsZW5k
TWluTWF4OworICAgIHN0ZDo6dW5pcXVlX3B0cjxFWFRzUkdCPiBtX2V4dHNSR0I7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRUZXh0dXJlRmls
dGVyQW5pc290cm9waWM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRleHR1cmVMT0Q+
IG1fZXh0U2hhZGVyVGV4dHVyZUxPRDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZs
b2F0PiBtX29lc1RleHR1cmVGbG9hdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZs
b2F0TGluZWFyPiBtX29lc1RleHR1cmVGbG9hdExpbmVhcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVIYWxmRmxvYXRM
aW5lYXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+IG1fb2Vz
U3RhbmRhcmREZXJpdmF0aXZlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVmVydGV4QXJyYXlP
YmplY3Q+IG1fb2VzVmVydGV4QXJyYXlPYmplY3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9FU0Vs
ZW1lbnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViR0xMb3NlQ29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJlckluZm87Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFkZXJz
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDPiBtX3dlYmds
Q29tcHJlc3NlZFRleHR1cmVBVEM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVTM1RDOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVyZT4gbV93ZWJn
bERlcHRoVGV4dHVyZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVmZmVycz4gbV93
ZWJnbERyYXdCdWZmZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3RhbmNlZEFycmF5
cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKKworICAgIC8vIEhlbHBlcnMgZm9yIGdldFBhcmFt
ZXRlciBhbmQgb3RoZXJzCisgICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJhbWV0ZXIoR0Mz
RGVudW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVu
dW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSk7CisgICAg
V2ViR0xHZXRJbmZvIGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7CisgICAgV2ViR0xHZXRJbmZv
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0
V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0
V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CisKKyAgICAvLyBDbGVhciB0aGUgYmFj
a2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVyYXRpb24uCisg
ICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55IGNsZWFyIHRoYXQg
d291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKKyAgICAvLyBhbmQgdGhlIGZ1bmN0aW9u
IHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4KKyAgICBib29s
IGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAwKTsKKworICAgIC8v
IEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1lYnVmZmVyIG1h
eSBkZXN0cm95LgorICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworCisgICAgdm9p
ZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4SW1hZ2UyREltcGwoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0
bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2Uy
REltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBjaGVja1RleHR1cmVD
b21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOworCisgICAgdm9pZCBjcmVhdGVGYWxsYmFj
a0JsYWNrVGV4dHVyZXMxeDEoKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29weVRl
eHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0CisgICAgLy8gYW5k
IHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVmZmVy
IGNvbWJpbmF0aW9uCisgICAgLy8gaXMgdmFsaWQuCisgICAgYm9vbCBpc1RleEludGVybmFsRm9y
bWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBmb3JtYXQuCisgICAg
R0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7CisKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgorICAgIGlu
dCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0
byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgorICAgIGludCBnZXRCb3VuZEZy
YW1lYnVmZmVySGVpZ2h0KCk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5IGxp
bWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbnMuCisg
ICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgc2l6
ZSBpcyBub24tbmVnYXRpdmUuCisgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVybiBm
YWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgorICAgIGJv
b2wgdmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNE
aW50IHkpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFsbCBjaGFyYWN0
ZXJzIGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQorICAgIC8vIEFTQ0lJIHN1YnNldCBhcyBk
ZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCisgICAgYm9vbCB2YWxpZGF0
ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOworCisgICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQgdGV4dHVyZSBib3VuZCB0byB0
aGUgdGFyZ2V0LgorICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0dXJuIDAgaWYgdGFy
Z2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcworICAgIC8vIG51bGwuICBPdGhlcndp
c2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgorICAgIFdlYkdMVGV4
dHVyZSogdmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApOworCisgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBmdW5jdGlvbnMge2Nv
cHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMg
ZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVu
Y0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4K
KyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwgaXMg
aW52YWxpZC4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKKworICAgIGVudW0gVGV4
RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgeworICAgICAgICBOb3RUZXhTdWJJbWFnZTJELAor
ICAgICAgICBUZXhTdWJJbWFnZTJELAorICAgIH07CisKKyAgICBlbnVtIFRleEZ1bmNWYWxpZGF0
aW9uU291cmNlVHlwZSB7CisgICAgICAgIFNvdXJjZUFycmF5QnVmZmVyVmlldywKKyAgICAgICAg
U291cmNlSW1hZ2VEYXRhLAorICAgICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LAorICAgICAg
ICBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwKKyAgICAgICAgU291cmNlSFRNTFZpZGVvRWxlbWVu
dCwKKyAgICB9OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQg
dG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3RhcmdldC93aWR0aC9oZWln
aHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCisgICAgLy8gT3RoZXJ3aXNlLCBp
dCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdvcmsuCisgICAgYm9v
bCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRh
dGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkg
d2lkdGgsCisgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzIGZv
ciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJy
b3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICBib29s
IHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9u
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlKTsKKworICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKKyAgICAgICAgTnVsbEFsbG93ZWQs
CisgICAgICAgIE51bGxOb3RBbGxvd2VkCisgICAgfTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKKyAgICAvLyBpcyBv
ZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3IgdGhlIHRleElt
YWdlIGNhbGwuCisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlm
IHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRhKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24pOworCisgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQgaXMgc2V0dGFibGUg
YXMgaW4KKyAgICAvLyB5b3UgY2FuIHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9yIGNhbGwg
dGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5kCisgICAgLy8gY29weVRleFN1YkltYWdlMkQu
CisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBmb3Jt
YXQgaXMgbm90IHNldHRhYmxlLgorICAgIGJvb2wgdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgaXMgY29ycmVj
dCBzaXplCisgICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVuc2lvbnMuCisgICAg
Ym9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKKworICAgIC8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0
cy4KKyAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQp
OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVy
ZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKKyAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorICAg
IGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOworCisgICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBm
b3IKKyAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2Vk
VGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqKTsKKworICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0FycmF5cy9FbGVt
ZW50c30uCisgICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0pOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlmIGZy
b250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdzIGFyZSB0aGUgc2Ft
ZS4KKyAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc3RlbmNpbCBmdW5j
LgorICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBh
bmQgdGV4UGFyYW1ldGVyaS4KKyAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFtZiwgYm9vbCBp
c0Zsb2F0KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCBHTCBlcnJvcnMgdG8g
Y29uc29sZS4KKyAgICB2b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBj
b25zdCBjaGFyKiByZWFzb24pOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50IHdh
cm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQorICAgIC8vIHVzZWQgb25seSB0byB3YXJuIGFi
b3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCisgICAgdm9pZCBwcmludFdhcm5pbmdUb0Nv
bnNvbGUoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRh
dGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25zLgorICAgIC8vIEdl
bmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCisgICAgYm9vbCB2YWxp
ZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOworCisgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCisgICAgYm9vbCB2YWxpZGF0
ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0b3JzLgorICAg
IGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KKyAgICBib29sIHZhbGlkYXRlQ2FwYWJpbGl0eShj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKworICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1bmN0aW9ucy4K
KyAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSosIEdDM0RzaXpl
aSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJBcnJheSosIEdD
M0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgdm9pZCosIEdD
M0RzaXplaSwgR0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBt
b2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKKworICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJEYXRhLgorICAg
IC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAwIGlmIHBh
cmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVmZmVyRGF0
YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHVzYWdlKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFn
ZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2lu
LgorICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBjYW52YXMgaXMgcmVh
ZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KKyAgICBib29sIHZhbGlkYXRlSFRNTENhbnZh
c0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVhZHkgd291bGRu
J3QgdGFpbnQgT3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsK
KyNlbmRpZgorCisgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ7dn0u
CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0RmbG9h
dCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOworICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSosIEdD
M0RzaXplaSBleHBlY3RlZFNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCosIEdDM0RzaXpl
aSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9y
IGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBmdW5jdGlvbnMuCisg
ICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVydGhl
ciBwcm9jZXNzaW5nLgorICAgIGJvb2wgZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0Kik7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBiaW5kVGV4dHVyZSwg
ZXRjKSBhbmQgdXNlUHJvZ3JhbS4KKyAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJl
ZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8gdHJ1ZSB1cG9uIHJldHVybi4KKyAgICAvLyBSZXR1
cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3Np
bmcuCisgICAgYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7CisKKyAgICAvLyBIZWxwZXJzIGZvciBz
aW11bGF0aW5nIHZlcnRleEF0dHJpYjAKKyAgICB2b2lkIGluaXRWZXJ0ZXhBdHRyaWIwKCk7Cisg
ICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCk7CisgICAg
dm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworCisgICAg
dm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKTsKKyAgICAvLyBIZWxwZXIgZm9yIHJlc3Rv
cmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KKyAgICB2b2lkIG1heWJlUmVzdG9yZUNvbnRleHQo
KTsKKworICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxlZ2VkIGNvZGUg
aW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAorICAgIC8vIGEgU2FmYXJpIG9yIENocm9tZSBl
eHRlbnNpb24uCisgICAgYm9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3Q7CisK
KyAgICBlbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7CisgICAgICAgIERpc3BsYXlJbkNv
bnNvbGUsCisgICAgICAgIERvbnREaXNwbGF5SW5Db25zb2xlCisgICAgfTsKKworICAgIC8vIFdy
YXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0aGF0IHNlbmRz
IGEgbWVzc2FnZQorICAgIC8vIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCisgICAgdm9pZCBz
eW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25z
dCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0gRGlzcGxheUlu
Q29uc29sZSk7CisKKyAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBjb25z
dDsKKworICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBiYXNlZCBvbiB1c2Vy
IHNldHRpbmcgYW5kCisgICAgLy8gd2hldGhlciB0aGUgY3VycmVudCBGQk8gaGFzIGEgc3RlbmNp
bCBidWZmZXIuCisgICAgdm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7CisKKyAgICAvLyBIZWxwZXIg
Zm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCisgICAgdm9pZCBlbmFibGVP
ckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOworCisgICAgLy8gQ2xh
bXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMuCisgICAgSW50
U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworCisgICAgLy8gRmlyc3QgdGltZSBjYWxsZWQsIGlm
IEVYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFsdWU7IG90aGVyd2lz
ZSByZXR1cm4gMC4KKyAgICAvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUuCisgICAg
R0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOworICAgIEdDM0RpbnQgZ2V0TWF4Q29sb3JBdHRh
Y2htZW50cygpOworCisgICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7CisKKyAg
ICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKKyAgICB2b2lkIHJlc3RvcmVDdXJy
ZW50VGV4dHVyZTJEKCk7CisKKyAgICAvLyBDaGVjayBpZiBFWFRfZHJhd19idWZmZXJzIGV4dGVu
c2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wgcmVxdWlyZW1l
bnRzLgorICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMMVJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNzg0ICsyNiwxNiBAQAogI2lmbmRlZiBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAog
I2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkRy
YXdpbmdCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJXZWJHTEdldElu
Zm8uaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXku
aD4KLSNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQU5HTEVJbnN0YW5jZWRBcnJheXM7Ci1jbGFzcyBF
WFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7Ci1jbGFzcyBFWFRTaGFkZXJUZXh0dXJlTE9EOwot
Y2xhc3MgSFRNTEltYWdlRWxlbWVudDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Ci1jbGFzcyBJ
bWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBPRVNT
dGFuZGFyZERlcml2YXRpdmVzOwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0OwotY2xhc3MgT0VTVGV4
dHVyZUZsb2F0TGluZWFyOwotY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdDsKLWNsYXNzIE9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXI7Ci1jbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKLWNsYXNz
IE9FU0VsZW1lbnRJbmRleFVpbnQ7Ci1jbGFzcyBXZWJHTEFjdGl2ZUluZm87Ci1jbGFzcyBXZWJH
TEJ1ZmZlcjsKLWNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xDb250ZXh0T2Jq
ZWN0OwotY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLWNsYXNzIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOwotY2xh
c3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKLWNsYXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87
Ci1jbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLWNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlOwotY2xh
c3MgV2ViR0xEcmF3QnVmZmVyczsKLWNsYXNzIFdlYkdMRXh0ZW5zaW9uOwotY2xhc3MgV2ViR0xG
cmFtZWJ1ZmZlcjsKLWNsYXNzIFdlYkdMTG9zZUNvbnRleHQ7Ci1jbGFzcyBXZWJHTE9iamVjdDsK
LWNsYXNzIFdlYkdMUHJvZ3JhbTsKLWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwotY2xhc3MgV2Vi
R0xTaGFkZXI7Ci1jbGFzcyBXZWJHTFNoYXJlZE9iamVjdDsKLWNsYXNzIFdlYkdMU2hhZGVyUHJl
Y2lzaW9uRm9ybWF0OwotY2xhc3MgV2ViR0xUZXh0dXJlOwotY2xhc3MgV2ViR0xVbmlmb3JtTG9j
YXRpb247Ci1jbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwotCi10eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwotCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJs
aWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitjbGFz
cyBXZWJHTDFSZW5kZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENvbnRleHRBdHRy
aWJ1dGVzKik7Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCk7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNpZiBQ
TEFURk9STShXSU4pCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBhY2NlbGVyYXRlZCAzZCBjYW52
YXMgb24gV2luZG93cy4KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZWxzZQotICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vs
ZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICBp
bnQgZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3Q7Ci0gICAgaW50IGRyYXdpbmdCdWZmZXJIZWln
aHQoKSBjb25zdDsKLQotICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2Vi
R0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24o
V2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVm
ZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJp
bmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xU
ZXh0dXJlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmxlbmRDb2xvcihHQzNEZmxvYXQg
cmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwot
ICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGJsZW5kRXF1
YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpOwotICAg
IHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOwotICAg
IHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0Is
IEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7Ci0KLSAgICB2b2lkIGJ1ZmZl
ckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJh
eUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0Rl
bnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxv
bmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAg
IEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsKLSAgICB2
b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKLSAgICB2b2lkIGNsZWFyQ29sb3IoR0MzRGZs
b2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhh
KTsKLSAgICB2b2lkIGNsZWFyRGVwdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGNsZWFyU3RlbmNp
bChHQzNEaW50KTsKLSAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29s
ZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7Ci0gICAgdm9p
ZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZm
ZXJWaWV3KiBkYXRhKTsKLSAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKTsKLQot
ICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOwotICAgIHZvaWQgY29weVRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAgICBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVh
dGVCdWZmZXIoKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZUZyYW1l
YnVmZmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsK
LSAgICBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5kZXJidWZmZXIoKTsK
LSAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKCk7Ci0KLSAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOwotCi0gICAgdm9pZCBk
ZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFdl
YkdMRnJhbWVidWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7
Ci0gICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKLSAgICB2
b2lkIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciopOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShX
ZWJHTFRleHR1cmUqKTsKLQotICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsKLSAgICB2b2lk
IGRlcHRoTWFzayhHQzNEYm9vbGVhbik7Ci0gICAgdm9pZCBkZXB0aFJhbmdlKEdDM0RmbG9hdCB6
TmVhciwgR0MzRGZsb2F0IHpGYXIpOwotICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3Jh
bSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZGlzYWJsZShHQzNE
ZW51bSBjYXApOwotICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGlu
ZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUs
IEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0g
dHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBlbmFi
bGUoR0MzRGVudW0gY2FwKTsKLSAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1
aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmaW5pc2goKTsKLSAgICB2b2lk
IGZsdXNoKCk7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2Vi
R0xSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoR0MzRGVudW0gdGFyZ2V0KTsKLQotICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBn
ZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5pZm9ybShX
ZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wg
Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSosIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFk
ZXI+PiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEJ1
ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBnZXRDb250ZXh0
QXR0cmlidXRlcygpOwotICAgIEdDM0RlbnVtIGdldEVycm9yKCk7Ci0gICAgV2ViR0xFeHRlbnNp
b24qIGdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIFdlYkdMR2V0SW5mbyBn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdM
R2V0SW5mbyBnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBXZWJHTEdldEluZm8gZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qLCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhX
ZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRl
ciosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIGdldFNoYWRl
ckluZm9Mb2coV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxX
ZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0Rl
bnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFZlY3RvcjxTdHJpbmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKLSAgICBXZWJH
TEdldEluZm8gZ2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9ybShXZWJHTFByb2dy
YW0qLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQ
cm9ncmFtKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0SW5m
byBnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgbG9uZyBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBp
bmRleCwgR0MzRGVudW0gcG5hbWUpOwotCi0gICAgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gbW9kZSk7Ci0gICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZmZXIqKTsK
LSAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKLSAgICBHQzNEYm9vbGVhbiBpc0VuYWJs
ZWQoR0MzRGVudW0gY2FwKTsKLSAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJh
bWVidWZmZXIqKTsKLSAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7Ci0g
ICAgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKLSAgICBH
QzNEYm9vbGVhbiBpc1NoYWRlcihXZWJHTFNoYWRlciopOwotICAgIEdDM0Rib29sZWFuIGlzVGV4
dHVyZShXZWJHTFRleHR1cmUqKTsKLQotICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCk7Ci0g
ICAgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9p
ZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7Ci0gICAg
dm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZm
ZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbGVhc2VTaGFkZXJD
b21waWxlcigpOwotICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpOwotICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVh
biBpbnZlcnQpOwotICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHNoYWRlclNvdXJjZShXZWJH
TFNoYWRlciosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHN0ZW5j
aWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKLSAgICB2
b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0Mz
RGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE1hc2soR0MzRHVpbnQp
OwotICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBt
YXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwg
R0MzRGVudW0genBhc3MpOwotICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFj
ZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKLQotICAg
IHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNpZiBFTkFCTEUo
VklERU8pCi0gICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKLSNlbmRpZgotCi0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwotCi0gICAgdm9p
ZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENh
bnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZv
aWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQg
eG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0jZW5kaWYKLQotICAgIHZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5
KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNp
emVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yaShjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5p
Zm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2YoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zaXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxv
YXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00ZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1
bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRy
aXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJy
YXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgdXNlUHJvZ3JhbShX
ZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0o
V2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIx
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2
KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6
ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwg
RmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwotICAgIHZvaWQgdmVy
dGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0Mz
RGZsb2F0IHopOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhB
dHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxv
YXQgeiwgR0MzRGZsb2F0IHcpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGlu
ZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0Rl
bnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSBzdHJpZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAgICAvLyBXRUJLSVRfbG9zZV9jb250ZXh0IHN1
cHBvcnQKLSAgICBlbnVtIExvc3RDb250ZXh0TW9kZSB7Ci0gICAgICAgIC8vIExvc3QgY29udGV4
dCBvY2N1cnJlZCBhdCB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGxldmVsLgotICAgICAgICBSZWFsTG9z
dENvbnRleHQsCi0KLSAgICAgICAgLy8gTG9zdCBjb250ZXh0IHByb3Zva2VkIGJ5IFdFQktJVF9s
b3NlX2NvbnRleHQuCi0gICAgICAgIFN5bnRoZXRpY0xvc3RDb250ZXh0Ci0gICAgfTsKLSAgICB2
b2lkIGZvcmNlTG9zdENvbnRleHQoTG9zdENvbnRleHRNb2RlKTsKLSAgICB2b2lkIGZvcmNlUmVz
dG9yZUNvbnRleHQoKTsKLSAgICB2b2lkIGxvc2VDb250ZXh0SW1wbChMb3N0Q29udGV4dE1vZGUp
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0gICAgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRH
cm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9Ci0gICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLQotICAgIHZvaWQgbWFya0xheWVy
Q29tcG9zaXRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcygpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwotCi0gICAgdm9pZCByZW1vdmVTaGFyZWRPYmplY3QoV2Vi
R0xTaGFyZWRPYmplY3QqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0Kik7Ci0gICAgCi0gICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmlicygpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4VmVydGV4QXR0cmliczsgfQotCi0gICAgLy8gQU5HTEVfaW5zdGFu
Y2VkX2FycmF5cyBleHRlbnNpb24gZnVuY3Rpb25zLgotICAgIHZvaWQgZHJhd0FycmF5c0luc3Rh
bmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rz
aXplaSBwcmltY291bnQpOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwg
R0MzRHNpemVpIHByaW1jb3VudCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1
aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xh
c3MgV2ViR0xEcmF3QnVmZmVyczsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsK
LSAgICBmcmllbmQgY2xhc3MgV2ViR0xPYmplY3Q7Ci0gICAgZnJpZW5kIGNsYXNzIE9FU1ZlcnRl
eEFycmF5T2JqZWN0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLSAgICBm
cmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLSAgICBmcmllbmQgY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQzsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0
RXJyb3JNZXNzYWdlQ2FsbGJhY2s7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM7Ci0KLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQq
LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKTsKLSAgICB2b2lkIGluaXRpYWxpemVOZXdDb250
ZXh0KCk7Ci0gICAgdm9pZCBzZXR1cEZsYWdzKCk7Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QK
LSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRkU2hhcmVkT2Jq
ZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7Ci0gICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdM
Q29udGV4dE9iamVjdCopOwotICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwot
Ci0gICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLSAgICB2b2lkIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOwotCi0gICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBvbiB0b3Ag
b2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9uLgotICAgIGJvb2wgaXNHTEVTMkNvbXBs
aWFudCgpIHsgcmV0dXJuIG1faXNHTEVTMkNvbXBsaWFudDsgfQotICAgIC8vIFF1ZXJ5IGlmIHRo
ZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KLSAgICBib29sIGlzR0xFUzJOUE9U
U3RyaWN0KCkgeyByZXR1cm4gbV9pc0dMRVMyTlBPVFN0cmljdDsgfQotICAgIC8vIFF1ZXJ5IGlm
IHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1vZi1ib3VuZHMg
YnVmZmVyIGFjY2Vzc2VzLgotICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNB
Y2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
czsgfQotICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0aWFsaXplcyB0
ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgYm9vbCBpc1Jlc291cmNlU2FmZSgpIHsg
cmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7IH0KLSAgICAvLyBRdWVyeSBpZiBkZXB0aF9zdGVuY2ls
IGJ1ZmZlciBpcyBzdXBwb3J0ZWQuCi0gICAgYm9vbCBpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgp
IHsgcmV0dXJuIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7IH0KLQotICAgIC8vIEhlbHBlciB0
byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKLSAgICAvLyBs
aWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KLSAgICB1bnNpZ25lZCBpbnQgc2l6ZUluQnl0ZXMo
R0MzRGVudW0gdHlwZSk7Ci0KLSAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIGNvdW50IGFuZCBv
ZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVudCBhcnJheSBidWZmZXIK
LSAgICBib29sIHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKLQotICAgIC8vIENvbnNlcnZhdGl2ZSBidXQg
cXVpY2sgaW5kZXggdmFsaWRhdGlvbgotICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29uc2Vy
dmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKLQot
ICAgIC8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlvbiAtLSBvbmx5IGRvbmUgaWYg
Y29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCi0gICAgYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlQcmVj
aXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVu
c2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKLSAgICBib29sIHZhbGlkYXRlVmVydGV4QXR0
cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50ID0g
MCk7Ci0KLSAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciosIFdlYkdMT2Jq
ZWN0Kik7Ci0KLSAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RHNpemVpIHByaW1jb3VudCk7Ci0gICAgYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzKTsKLQotICAg
IC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0LgotICAgIHZvaWQgYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOwotCi0gICAgUGFzc1JlZlB0cjxJbWFnZT4gZHJh
d0ltYWdlSW50b0J1ZmZlcihJbWFnZSosIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRldmlj
ZVNjYWxlRmFjdG9yKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBQYXNzUmVmUHRyPEltYWdl
PiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgQmFja2luZ1N0b3JlQ29weSwg
RXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IG1fY29udGV4dDsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4dEdyb3Vw
OwotCi0gICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBEcmF3aW5n
QnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5Ci0gICAgLy8gdG8gdGhlIGJhY2stYnVmZmVyIG9m
IG1fY29udGV4dC4KLSAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOwot
Ci0gICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0IGlzIGRldGVy
bWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgotICAgIC8vIFRoaXMgaXMgdXNlZCBib3RoIGZvciBz
eW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMsIGl0J3MKLSAg
ICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0YWNrLCBidXQg
dGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKLSAgICAvLyBvbiBob3cgZXhhY3RseSB0aGUgcGxhdGZv
cm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBiZXR0ZXIKLSAgICAv
LyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBldmVudC4K
LSAgICBUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOwotICAgIGJvb2wgbV9y
ZXN0b3JlQWxsb3dlZDsKLSAgICBUaW1lciBtX3Jlc3RvcmVUaW1lcjsKLQotICAgIGJvb2wgbV9u
ZWVkc1VwZGF0ZTsKLSAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7Ci0gICAgSGFzaFNldDxX
ZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3RzOwotCi0gICAgLy8gTGlzdCBvZiBi
b3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFib3V0IHNpemVzIGZvciBBUlJBWV9C
VUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRfQVJSQVlfQlVGRkVSCi0gICAgUmVm
UHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAgCi0gICAgUmVmUHRyPFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0OwotICAg
IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3Q7Ci0gICAgdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2JqZWN0KFBhc3NSZWZQdHI8V2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCi0gICAgewotICAgICAgICBpZiAoYXJy
YXlPYmplY3QpCi0gICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBhcnJheU9i
amVjdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgfQotICAgIAotICAgIGNsYXNzIFZl
cnRleEF0dHJpYlZhbHVlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFZlcnRleEF0dHJpYlZhbHVl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgaW5pdFZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHZvaWQgaW5pdFZhbHVlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFs
dWVbMF0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOwotICAgICAgICAgICAg
dmFsdWVbMl0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbM10gPSAxLjBmOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBHQzNEZmxvYXQgdmFsdWVbNF07Ci0gICAgfTsKLSAgICBWZWN0
b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0cmliVmFsdWU7Ci0gICAgdW5zaWduZWQg
bV9tYXhWZXJ0ZXhBdHRyaWJzOwotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyOwotICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZTsKLSAgICBHQzNE
ZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07Ci0gICAgYm9vbCBtX2ZvcmNlQXR0
cmliMEJ1ZmZlclJlZmlsbDsKLSAgICBib29sIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmU7Ci0K
LSAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOwotICAgIFJlZlB0cjxX
ZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAgICBSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKLSAgICBzdHJ1Y3QgVGV4dHVyZVVu
aXRTdGF0ZSB7Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmUyREJpbmRpbmc7
Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmVDdWJlTWFwQmluZGluZzsKLSAg
ICB9OwotICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0czsKLSAgICB1
bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7Ci0KLSAgICBSZWZQdHI8V2ViR0xUZXh0
dXJlPiBtX2JsYWNrVGV4dHVyZTJEOwotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxhY2tU
ZXh0dXJlQ3ViZU1hcDsKLQotICAgIFZlY3RvcjxHQzNEZW51bT4gbV9jb21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7Ci0KLSAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJldXNhYmxlIGltYWdlIGJ1
ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCi0gICAgY2xhc3MgTFJVSW1hZ2VCdWZm
ZXJDYWNoZSB7Ci0gICAgcHVibGljOgotICAgICAgICBMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBj
YXBhY2l0eSk7Ci0gICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93bmVkIGJ5IHRo
ZSBpbWFnZSBidWZmZXIgbWFwLgotICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBidWJibGVUb0Zy
b250KGludCBpZHgpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7Ci0gICAgICAgIGludCBtX2NhcGFjaXR5OwotICAgIH07
Ci0gICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZEltYWdlQ2FjaGU7Ci0KLSAgICBH
QzNEaW50IG1fbWF4VGV4dHVyZVNpemU7Ci0gICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZTsKLSAgICBHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKLSAgICBHQzNEaW50IG1f
bWF4Vmlld3BvcnREaW1zWzJdOwotICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlTGV2ZWw7Ci0gICAg
R0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0KLSAgICBHQzNEaW50IG1fbWF4RHJh
d0J1ZmZlcnM7Ci0gICAgR0MzRGludCBtX21heENvbG9yQXR0YWNobWVudHM7Ci0gICAgR0MzRGVu
dW0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICBib29sIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVt
ZW50c0NoZWNrZWQ7Ci0gICAgYm9vbCBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOwotCi0gICAgR0Mz
RGludCBtX3BhY2tBbGlnbm1lbnQ7Ci0gICAgR0MzRGludCBtX3VucGFja0FsaWdubWVudDsKLSAg
ICBib29sIG1fdW5wYWNrRmxpcFk7Ci0gICAgYm9vbCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGE7
Ci0gICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKLSAgICBib29sIG1f
Y29udGV4dExvc3Q7Ci0gICAgTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RNb2RlOwotICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKLQotICAgIGJvb2wg
bV9sYXllckNsZWFyZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJDb2xvcls0XTsKLSAgICBib29s
IG1fc2Npc3NvckVuYWJsZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJEZXB0aDsKLSAgICBHQzNE
aW50IG1fY2xlYXJTdGVuY2lsOwotICAgIEdDM0Rib29sZWFuIG1fY29sb3JNYXNrWzRdOwotICAg
IEdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOwotCi0gICAgYm9vbCBtX3N0ZW5jaWxFbmFibGVkOwot
ICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNpbE1hc2tCYWNrOwotICAgIEdDM0Rp
bnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1JlZkJhY2s7IC8vIE5vdGUgdGhhdCB0
aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywgbm90IHRoZSBpbnRlcm5hbCBjbGFt
cGVkIHZhbHVlLgotICAgIEdDM0R1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBtX3N0ZW5jaWxGdW5j
TWFza0JhY2s7Ci0KLSAgICBib29sIG1faXNHTEVTMkNvbXBsaWFudDsKLSAgICBib29sIG1faXNH
TEVTMk5QT1RTdHJpY3Q7Ci0gICAgYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXM7Ci0gICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZlOwotICAgIGJvb2wgbV9pc0RlcHRo
U3RlbmNpbFN1cHBvcnRlZDsKLSAgICBib29sIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkOwot
Ci0gICAgYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlOwotICAgIGludCBtX251bUdM
RXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKLQotICAgIC8vIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0
IGNhbiBiZSBjcmVhdGVkIGluIGEgc3RhdGUgd2hlcmUgaXQgYXBwZWFycyBhcwotICAgIC8vIGEg
dmFsaWQgYW5kIGFjdGl2ZSBjb250ZXh0LCBidXQgd2lsbCBub3QgZXhlY3V0ZSBhbnkgaW1wb3J0
YW50IG9wZXJhdGlvbnMKLSAgICAvLyB1bnRpbCBpdHMgbG9hZCBwb2xpY3kgaXMgY29tcGxldGVs
eSByZXNvbHZlZC4KLSAgICBib29sIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKLSAgICBi
b29sIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbjsKLSAgICBib29sIGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKTsKLQotICAgIC8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVjdHMuCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRUZXh0dXJl
RmlsdGVyQW5pc290cm9waWM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRleHR1cmVM
T0Q+IG1fZXh0U2hhZGVyVGV4dHVyZUxPRDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVy
ZUZsb2F0PiBtX29lc1RleHR1cmVGbG9hdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVy
ZUZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVGbG9hdExpbmVhcjsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0OwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVIYWxmRmxv
YXRMaW5lYXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+IG1f
b2VzU3RhbmRhcmREZXJpdmF0aXZlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVmVydGV4QXJy
YXlPYmplY3Q+IG1fb2VzVmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9F
U0VsZW1lbnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViR0xMb3NlQ29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJlckluZm87
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFk
ZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDPiBtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVBVEM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVyZT4gbV93
ZWJnbERlcHRoVGV4dHVyZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVmZmVycz4g
bV93ZWJnbERyYXdCdWZmZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3RhbmNlZEFy
cmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKLQotICAgIC8vIEhlbHBlcnMgZm9yIGdldFBh
cmFtZXRlciBhbmQgb3RoZXJzCi0gICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJhbWV0ZXIo
R0MzRGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSk7Ci0g
ICAgV2ViR0xHZXRJbmZvIGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgV2ViR0xHZXRJ
bmZvIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8g
Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8g
Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7Ci0KLSAgICAvLyBDbGVhciB0aGUg
YmFja2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVyYXRpb24u
Ci0gICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55IGNsZWFyIHRo
YXQgd291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKLSAgICAvLyBhbmQgdGhlIGZ1bmN0
aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4KLSAgICBi
b29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAwKTsKLQotICAg
IC8vIEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1lYnVmZmVy
IG1heSBkZXN0cm95LgotICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwotCi0gICAg
dm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQq
IHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyREltcGwoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSos
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBjaGVja1RleHR1
cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOwotCi0gICAgdm9pZCBjcmVhdGVGYWxs
YmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29w
eVRleHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0Ci0gICAgLy8g
YW5kIHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVm
ZmVyIGNvbWJpbmF0aW9uCi0gICAgLy8gaXMgdmFsaWQuCi0gICAgYm9vbCBpc1RleEludGVybmFs
Rm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBmb3JtYXQuCi0g
ICAgR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7Ci0KLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgotICAg
IGludCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgotICAgIGludCBnZXRCb3Vu
ZEZyYW1lYnVmZmVySGVpZ2h0KCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5
IGxpbWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbnMu
Ci0gICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYg
c2l6ZSBpcyBub24tbmVnYXRpdmUuCi0gICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVy
biBmYWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgotICAg
IGJvb2wgdmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBH
QzNEaW50IHkpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFsbCBjaGFy
YWN0ZXJzIGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQotICAgIC8vIEFTQ0lJIHN1YnNldCBh
cyBkZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCi0gICAgYm9vbCB2YWxp
ZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQgdGV4dHVyZSBib3VuZCB0
byB0aGUgdGFyZ2V0LgotICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0dXJuIDAgaWYg
dGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcwotICAgIC8vIG51bGwuICBPdGhl
cndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgotICAgIFdlYkdM
VGV4dHVyZSogdmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApOwotCi0gICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBmdW5jdGlvbnMg
e2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVy
bnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4
RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFn
ZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwg
aXMgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKLQotICAgIGVudW0g
VGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgewotICAgICAgICBOb3RUZXhTdWJJbWFnZTJE
LAotICAgICAgICBUZXhTdWJJbWFnZTJELAotICAgIH07Ci0KLSAgICBlbnVtIFRleEZ1bmNWYWxp
ZGF0aW9uU291cmNlVHlwZSB7Ci0gICAgICAgIFNvdXJjZUFycmF5QnVmZmVyVmlldywKLSAgICAg
ICAgU291cmNlSW1hZ2VEYXRhLAotICAgICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LAotICAg
ICAgICBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwKLSAgICAgICAgU291cmNlSFRNTFZpZGVvRWxl
bWVudCwKLSAgICB9OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdl
MkQgdG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3RhcmdldC93aWR0aC9o
ZWlnaHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCi0gICAgLy8gT3RoZXJ3aXNl
LCBpdCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdvcmsuCi0gICAg
Ym9vbCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFs
aWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsCi0gICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJz
IGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wg
ZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBi
b29sIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0
aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlKTsKLQotICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKLSAgICAgICAgTnVsbEFsbG93
ZWQsCi0gICAgICAgIE51bGxOb3RBbGxvd2VkCi0gICAgfTsKLQotICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKLSAgICAvLyBp
cyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3IgdGhlIHRl
eEltYWdlIGNhbGwuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNl
IGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRh
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24pOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQgaXMgc2V0dGFi
bGUgYXMgaW4KLSAgICAvLyB5b3UgY2FuIHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9yIGNh
bGwgdGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5kCi0gICAgLy8gY29weVRleFN1YkltYWdl
MkQuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBm
b3JtYXQgaXMgbm90IHNldHRhYmxlLgotICAgIGJvb2wgdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1h
dChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCk7Ci0KLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgaXMgY29y
cmVjdCBzaXplCi0gICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVuc2lvbnMuCi0g
ICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKLQotICAg
IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1cmUgZm9y
bWF0cy4KLSAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3Jt
YXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4
dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0Lgot
ICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxp
ZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVz
c2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqKTsKLQot
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0FycmF5cy9F
bGVtZW50c30uCi0gICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlm
IGZyb250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdzIGFyZSB0aGUg
c2FtZS4KLSAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc3RlbmNpbCBm
dW5jLgotICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVy
ZiBhbmQgdGV4UGFyYW1ldGVyaS4KLSAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFtZiwgYm9v
bCBpc0Zsb2F0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCBHTCBlcnJvcnMg
dG8gY29uc29sZS4KLSAgICB2b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcm
KTsKLSAgICB2b2lkIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
LCBjb25zdCBjaGFyKiByZWFzb24pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50
IHdhcm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQotICAgIC8vIHVzZWQgb25seSB0byB3YXJu
IGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCi0gICAgdm9pZCBwcmludFdhcm5pbmdU
b0NvbnNvbGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFs
aWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25zLgotICAgIC8v
IEdlbmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCi0gICAgYm9vbCB2
YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCi0gICAgYm9vbCB2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0b3JzLgot
ICAgIGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KLSAgICBib29sIHZhbGlkYXRlQ2FwYWJpbGl0
eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1bmN0aW9u
cy4KLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSosIEdDM0Rz
aXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJBcnJheSos
IEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgdm9pZCos
IEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdDM0RzaXpl
aSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKLQotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJEYXRhLgot
ICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAwIGlm
IHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHVzYWdlKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1J
bWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3Jp
Z2luLgotICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBjYW52YXMgaXMg
cmVhZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KLSAgICBib29sIHZhbGlkYXRlSFRNTENh
bnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxlbWVudCos
IEV4Y2VwdGlvbkNvZGUmKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVhZHkgd291
bGRuJ3QgdGFpbnQgT3JpZ2luLgotICAgIGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKLSNlbmRpZgotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ7
dn0uCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0Rm
bG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSos
IEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCosIEdDM0Rz
aXplaSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
Zm9yIGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBmdW5jdGlvbnMu
Ci0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVy
dGhlciBwcm9jZXNzaW5nLgotICAgIGJvb2wgZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0Kik7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBiaW5kVGV4dHVy
ZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KLSAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5
IGJlZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8gdHJ1ZSB1cG9uIHJldHVybi4KLSAgICAvLyBS
ZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nl
c3NpbmcuCi0gICAgYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7Ci0KLSAgICAvLyBIZWxwZXJzIGZv
ciBzaW11bGF0aW5nIHZlcnRleEF0dHJpYjAKLSAgICB2b2lkIGluaXRWZXJ0ZXhBdHRyaWIwKCk7
Ci0gICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCk7Ci0g
ICAgdm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotCi0g
ICAgdm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKTsKLSAgICAvLyBIZWxwZXIgZm9yIHJl
c3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KLSAgICB2b2lkIG1heWJlUmVzdG9yZUNvbnRl
eHQoKTsKLQotICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxlZ2VkIGNv
ZGUgaW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAotICAgIC8vIGEgU2FmYXJpIG9yIENocm9t
ZSBleHRlbnNpb24uCi0gICAgYm9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3Q7
Ci0KLSAgICBlbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7Ci0gICAgICAgIERpc3BsYXlJ
bkNvbnNvbGUsCi0gICAgICAgIERvbnREaXNwbGF5SW5Db25zb2xlCi0gICAgfTsKLQotICAgIC8v
IFdyYXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0aGF0IHNl
bmRzIGEgbWVzc2FnZQotICAgIC8vIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCi0gICAgdm9p
ZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0gRGlzcGxh
eUluQ29uc29sZSk7Ci0KLSAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBj
b25zdDsKLQotICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBiYXNlZCBvbiB1
c2VyIHNldHRpbmcgYW5kCi0gICAgLy8gd2hldGhlciB0aGUgY3VycmVudCBGQk8gaGFzIGEgc3Rl
bmNpbCBidWZmZXIuCi0gICAgdm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7Ci0KLSAgICAvLyBIZWxw
ZXIgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCi0gICAgdm9pZCBlbmFi
bGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOwotCi0gICAgLy8g
Q2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMuCi0gICAg
SW50U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwotCi0gICAgLy8gRmlyc3QgdGltZSBjYWxsZWQs
IGlmIEVYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFsdWU7IG90aGVy
d2lzZSByZXR1cm4gMC4KLSAgICAvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUuCi0g
ICAgR0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOwotICAgIEdDM0RpbnQgZ2V0TWF4Q29sb3JB
dHRhY2htZW50cygpOwotCi0gICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7Ci0K
LSAgICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKLSAgICB2b2lkIHJlc3RvcmVD
dXJyZW50VGV4dHVyZTJEKCk7Ci0KLSAgICAvLyBDaGVjayBpZiBFWFRfZHJhd19idWZmZXJzIGV4
dGVuc2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wgcmVxdWly
ZW1lbnRzLgotICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworICAgIFdlYkdMMVJlbmRl
cmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyk7CisgICAgV2ViR0wxUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyk7CiB9OwotCisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29u
dGV4dC5pZGwJKHJldmlzaW9uIDE3Njk5NCkJKGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDoxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMZW51bTsKK3R5cGVkZWYgYm9vbGVhbiAgICAg
ICAgR0xib29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGJpdGZpZWxkOwordHlwZWRl
ZiBieXRlICAgICAgICAgICBHTGJ5dGU7ICAgICAgICAgLyogJ2J5dGUnIHNob3VsZCBiZSBhIHNp
Z25lZCA4IGJpdCB0eXBlLiAqLwordHlwZWRlZiBzaG9ydCAgICAgICAgICBHTHNob3J0OwordHlw
ZWRlZiBsb25nICAgICAgICAgICBHTGludDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgR0xzaXpl
aTsKK3R5cGVkZWYgbG9uZyBsb25nICAgICAgR0xpbnRwdHI7Cit0eXBlZGVmIGxvbmcgbG9uZyAg
ICAgIEdMc2l6ZWlwdHI7Cit0eXBlZGVmIG9jdGV0ICAgICAgICAgIEdMdWJ5dGU7ICAgICAgICAv
KiAnb2N0ZXQnIHNob3VsZCBiZSBhbiB1bnNpZ25lZCA4IGJpdCB0eXBlLiAqLwordHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBHTHVzaG9ydDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0x1aW50Owor
dHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xmbG9hdDsKK3R5cGVkZWYgdW5yZXN0cmljdGVk
IGZsb2F0IEdMY2xhbXBmOworCitbCisgICAgQ29uZGl0aW9uYWw9V0VCR0wsCisgICAgSlNDdXN0
b21NYXJrRnVuY3Rpb24sCisgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKK10gaW50ZXJmYWNlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeworCisgICAgLyog
Q2xlYXJCdWZmZXJNYXNrICovCisgICAgY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAg
ICAgICAgICAgICA9IDB4MDAwMDAxMDA7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQlVGRkVS
X0JJVCAgICAgICAgICAgICA9IDB4MDAwMDA0MDA7CisgICAgY29uc3QgR0xlbnVtIENPTE9SX0JV
RkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7CisKKyAgICAvKiBCZWdpbk1vZGUg
Ki8KKyAgICBjb25zdCBHTGVudW0gUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MDAwOworICAgIGNvbnN0IEdMZW51bSBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDE7CisgICAgY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9
IDB4MDAwMjsKKyAgICBjb25zdCBHTGVudW0gTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAg
ID0gMHgwMDAzOworICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAwMDQ7CisgICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAgICAgICAg
ICAgICA9IDB4MDAwNTsKKyAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfRkFOICAgICAgICAgICAg
ICAgICAgID0gMHgwMDA2OworCisgICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBp
biBFUzIwKSAqLworICAgIC8qICAgICAgTkVWRVIgKi8KKyAgICAvKiAgICAgIExFU1MgKi8KKyAg
ICAvKiAgICAgIEVRVUFMICovCisgICAgLyogICAgICBMRVFVQUwgKi8KKyAgICAvKiAgICAgIEdS
RUFURVIgKi8KKyAgICAvKiAgICAgIE5PVEVRVUFMICovCisgICAgLyogICAgICBHRVFVQUwgKi8K
KyAgICAvKiAgICAgIEFMV0FZUyAqLworCisgICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovCisg
ICAgY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7CisgICAg
Y29uc3QgR0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7CisgICAgY29u
c3QgR0xlbnVtIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMDsKKyAgICBj
b25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOworICAg
IGNvbnN0IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDI7Cisg
ICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA9IDB4MDMwMzsK
KyAgICBjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0
OworICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAgICAgPSAweDAz
MDU7CisKKyAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLworICAgIC8qICAgICAgWkVSTyAqLwor
ICAgIC8qICAgICAgT05FICovCisgICAgY29uc3QgR0xlbnVtIERTVF9DT0xPUiAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDMwNjsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xP
UiAgICAgICAgICAgID0gMHgwMzA3OworICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQSEFfU0FUVVJB
VEUgICAgICAgICAgICAgPSAweDAzMDg7CisgICAgLyogICAgICBTUkNfQUxQSEEgKi8KKyAgICAv
KiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KKyAgICAvKiAgICAgIERTVF9BTFBIQSAqLwor
ICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLworCisgICAgLyogQmxlbmRFcXVhdGlv
blNlcGFyYXRlICovCisgICAgY29uc3QgR0xlbnVtIEZVTkNfQUREICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODAwNjsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT04gICAgICAgICAg
ICAgICAgID0gMHg4MDA5OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAg
ICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworICAgIGNv
bnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgPSAweDg4M0Q7CisKKyAg
ICAvKiBCbGVuZFN1YnRyYWN0ICovCisgICAgY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAg
ICAgICAgICAgICAgICA9IDB4ODAwQTsKKyAgICBjb25zdCBHTGVudW0gRlVOQ19SRVZFUlNFX1NV
QlRSQUNUICAgICAgICAgID0gMHg4MDBCOworCisgICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rp
b25zICovCisgICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9
IDB4ODBDODsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAg
ID0gMHg4MEM5OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAg
ICAgPSAweDgwQ0E7CisgICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAg
ICAgICA9IDB4ODBDQjsKKyAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQ09MT1IgICAgICAgICAg
ICAgICAgID0gMHg4MDAxOworICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQ09M
T1IgICAgICAgPSAweDgwMDI7CisgICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAg
ICAgICAgICAgICA9IDB4ODAwMzsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBICAgICAgID0gMHg4MDA0OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9DT0xPUiAgICAg
ICAgICAgICAgICAgICAgPSAweDgwMDU7CisKKyAgICAvKiBCdWZmZXIgT2JqZWN0cyAqLworICAg
IGNvbnN0IEdMZW51bSBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgPSAweDg4OTI7Cisg
ICAgY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA9IDB4ODg5MzsK
KyAgICBjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0
OworICAgIGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgPSAweDg4
OTU7CisKKyAgICBjb25zdCBHTGVudW0gU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgID0g
MHg4OEUwOworICAgIGNvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAg
PSAweDg4RTQ7CisgICAgY29uc3QgR0xlbnVtIERZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAg
ICA9IDB4ODhFODsKKworICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfU0laRSAgICAgICAgICAgICAg
ICAgICAgPSAweDg3NjQ7CisgICAgY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAgICAgICAg
ICAgICAgICA9IDB4ODc2NTsKKworICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1ZFUlRFWF9BVFRS
SUIgICAgICAgICAgPSAweDg2MjY7CisKKyAgICAvKiBDdWxsRmFjZU1vZGUgKi8KKyAgICBjb25z
dCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OworICAgIGNv
bnN0IEdMZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0MDU7CisgICAg
Y29uc3QgR0xlbnVtIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA9IDB4MDQwODsKKwor
ICAgIC8qIERlcHRoRnVuY3Rpb24gKi8KKyAgICAvKiAgICAgIE5FVkVSICovCisgICAgLyogICAg
ICBMRVNTICovCisgICAgLyogICAgICBFUVVBTCAqLworICAgIC8qICAgICAgTEVRVUFMICovCisg
ICAgLyogICAgICBHUkVBVEVSICovCisgICAgLyogICAgICBOT1RFUVVBTCAqLworICAgIC8qICAg
ICAgR0VRVUFMICovCisgICAgLyogICAgICBBTFdBWVMgKi8KKworICAgIC8qIEVuYWJsZUNhcCAq
LworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgPSAweDBE
RTE7CisgICAgY29uc3QgR0xlbnVtIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA9IDB4
MEI0NDsKKyAgICBjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwQkUyOworICAgIGNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDBCRDA7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAg
ICA9IDB4MEI5MDsKKyAgICBjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAg
ICAgID0gMHgwQjcxOworICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX1RFU1QgICAgICAgICAgICAg
ICAgICAgPSAweDBDMTE7CisgICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAg
ICAgICAgICA9IDB4ODAzNzsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFICAgICAgID0gMHg4MDlFOworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0UgICAg
ICAgICAgICAgICAgPSAweDgwQTA7CisKKyAgICAvKiBFcnJvckNvZGUgKi8KKyAgICBjb25zdCBH
TGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICBjb25zdCBHTGVu
dW0gSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAwOworICAgIGNvbnN0IEdM
ZW51bSBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1MDE7CisgICAgY29uc3Qg
R0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsKKyAgICBjb25z
dCBHTGVudW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgwNTA1OworCisgICAg
LyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisgICAgY29uc3QgR0xlbnVtIENXICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKKyAgICBjb25zdCBHTGVudW0gQ0NXICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwOTAxOworCisgICAgLyogR2V0UE5hbWUgKi8KKyAgICBj
b25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOworICAg
IGNvbnN0IEdMZW51bSBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgPSAweDg0NkQ7Cisg
ICAgY29uc3QgR0xlbnVtIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9IDB4ODQ2RTsK
KyAgICBjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1
OworICAgIGNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAgICAgICAgICAgICAgICAgPSAweDBC
NDY7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA9IDB4
MEI3MDsKKyAgICBjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0g
MHgwQjcyOworICAgIGNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxVRSAgICAgICAgICAgICAg
PSAweDBCNzM7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAg
ICA9IDB4MEI3NDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAg
ICAgID0gMHgwQjkxOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZVTkMgICAgICAgICAgICAg
ICAgICAgPSAweDBCOTI7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRkFJTCAgICAgICAgICAg
ICAgICAgICA9IDB4MEI5NDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZB
SUwgICAgICAgID0gMHgwQjk1OworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BBU1NfREVQVEhf
UEFTUyAgICAgICAgPSAweDBCOTY7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUkVGICAgICAg
ICAgICAgICAgICAgICA9IDB4MEI5NzsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9N
QVNLICAgICAgICAgICAgID0gMHgwQjkzOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1dSSVRF
TUFTSyAgICAgICAgICAgICAgPSAweDBCOTg7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFD
S19GVU5DICAgICAgICAgICAgICA9IDB4ODgwMDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9C
QUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7CisgICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKKyAgICBjb25zdCBHTGVudW0gU1RF
TkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOworICAgIGNvbnN0IEdMZW51bSBT
VEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7CisgICAgY29uc3QgR0xlbnVt
IFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA9IDB4OENBNTsKKyAgICBjb25zdCBHTGVu
dW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOworICAgIGNvbnN0IEdM
ZW51bSBTQ0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBDMTA7CisgICAgLyogICAg
ICBTQ0lTU09SX1RFU1QgKi8KKyAgICBjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAg
ICAgICAgICAgID0gMHgwQzIyOworICAgIGNvbnN0IEdMZW51bSBDT0xPUl9XUklURU1BU0sgICAg
ICAgICAgICAgICAgPSAweDBDMjM7CisgICAgY29uc3QgR0xlbnVtIFVOUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICA9IDB4MENGNTsKKyAgICBjb25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICAgID0gMHgwRDA1OworICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9T
SVpFICAgICAgICAgICAgICAgPSAweDBEMzM7CisgICAgY29uc3QgR0xlbnVtIE1BWF9WSUVXUE9S
VF9ESU1TICAgICAgICAgICAgICA9IDB4MEQzQTsKKyAgICBjb25zdCBHTGVudW0gU1VCUElYRUxf
QklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOworICAgIGNvbnN0IEdMZW51bSBSRURfQklU
UyAgICAgICAgICAgICAgICAgICAgICAgPSAweDBENTI7CisgICAgY29uc3QgR0xlbnVtIEdSRUVO
X0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKKyAgICBjb25zdCBHTGVudW0gQkxV
RV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OworICAgIGNvbnN0IEdMZW51bSBB
TFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7CisgICAgY29uc3QgR0xlbnVt
IERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKKyAgICBjb25zdCBHTGVu
dW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OworICAgIGNvbnN0IEdM
ZW51bSBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJBMDA7CisgICAgLyogICAg
ICBQT0xZR09OX09GRlNFVF9GSUxMICovCisgICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VU
X0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9CSU5E
SU5HXzJEICAgICAgICAgICAgID0gMHg4MDY5OworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQlVG
RkVSUyAgICAgICAgICAgICAgICAgPSAweDgwQTg7CisgICAgY29uc3QgR0xlbnVtIFNBTVBMRVMg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKKyAgICBjb25zdCBHTGVudW0gU0FNUExF
X0NPVkVSQUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFBOworICAgIGNvbnN0IEdMZW51bSBTQU1Q
TEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7CisKKyAgICAvKiBHZXRUZXh0dXJl
UGFyYW1ldGVyICovCisgICAgLyogICAgICBURVhUVVJFX01BR19GSUxURVIgKi8KKyAgICAvKiAg
ICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqLworICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8K
KyAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9UICovCisKKyAgICBjb25zdCBHTGVudW0gQ09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOworCisgICAgLyogSGludE1vZGUgKi8K
KyAgICBjb25zdCBHTGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAw
OworICAgIGNvbnN0IEdMZW51bSBGQVNURVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEx
MDE7CisgICAgY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MTEwMjsKKworICAgIC8qIEhpbnRUYXJnZXQgKi8KKyAgICBjb25zdCBHTGVudW0gR0VORVJBVEVf
TUlQTUFQX0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKKworICAgIC8qIERhdGFUeXBlICovCisg
ICAgY29uc3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMDsK
KyAgICBjb25zdCBHTGVudW0gVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgID0gMHgxNDAx
OworICAgIGNvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0
MDI7CisgICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA9IDB4
MTQwMzsKKyAgICBjb25zdCBHTGVudW0gSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxNDA0OworICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAg
PSAweDE0MDU7CisgICAgY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MTQwNjsKKworICAgIC8qIFBpeGVsRm9ybWF0ICovCisgICAgY29uc3QgR0xlbnVtIERF
UFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKKyAgICBjb25zdCBHTGVudW0g
QUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA2OworICAgIGNvbnN0IEdMZW51
bSBSR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7CisgICAgY29uc3QgR0xl
bnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKKyAgICBjb25zdCBH
TGVudW0gTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA5OworICAgIGNvbnN0
IEdMZW51bSBMVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAweDE5MEE7CisKKyAgICAv
KiBQaXhlbFR5cGUgKi8KKyAgICAvKiAgICAgIFVOU0lHTkVEX0JZVEUgKi8KKyAgICBjb25zdCBH
TGVudW0gVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOworICAgIGNvbnN0
IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7CisgICAgY29u
c3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9IDB4ODM2MzsKKworICAg
IC8qIFNoYWRlcnMgKi8KKyAgICBjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAgICAgICAg
ICAgICAgICAgPSAweDhCMzA7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9TSEFERVIgICAgICAg
ICAgICAgICAgICAgID0gMHg4QjMxOworICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX0FUVFJJ
QlMgICAgICAgICAgICAgICA9IDB4ODg2OTsKKyAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7CisgICAgY29uc3QgR0xlbnVtIE1BWF9WQVJZ
SU5HX1ZFQ1RPUlMgICAgICAgICAgICAgID0gMHg4REZDOworICAgIGNvbnN0IEdMZW51bSBNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKKyAgICBjb25zdCBHTGVudW0g
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7CisgICAgY29uc3QgR0xl
bnVtIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgID0gMHg4ODcyOworICAgIGNvbnN0
IEdMZW51bSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9IDB4OERGRDsKKyAgICBj
b25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7Cisg
ICAgY29uc3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgID0gMHg4Qjgw
OworICAgIGNvbnN0IEdMZW51bSBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI4MjsKKyAgICBjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAg
PSAweDhCODM7CisgICAgY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAg
ICAgID0gMHg4Qjg1OworICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAg
ICAgICAgICA9IDB4OEI4NjsKKyAgICBjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMgICAg
ICAgICAgICAgICAgPSAweDhCODk7CisgICAgY29uc3QgR0xlbnVtIFNIQURJTkdfTEFOR1VBR0Vf
VkVSU0lPTiAgICAgICAgID0gMHg4QjhDOworICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1BST0dS
QU0gICAgICAgICAgICAgICAgICA9IDB4OEI4RDsKKworICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAq
LworICAgIGNvbnN0IEdMZW51bSBORVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAy
MDA7CisgICAgY29uc3QgR0xlbnVtIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDIwMTsKKyAgICBjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMjAyOworICAgIGNvbnN0IEdMZW51bSBMRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDAyMDM7CisgICAgY29uc3QgR0xlbnVtIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwNDsKKyAgICBjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwMjA1OworICAgIGNvbnN0IEdMZW51bSBHRVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAyMDY7CisgICAgY29uc3QgR0xlbnVtIEFMV0FZUyAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDIwNzsKKworICAgIC8qIFN0ZW5jaWxPcCAqLworICAgIC8qICAgICAgWkVS
TyAqLworICAgIGNvbnN0IEdMZW51bSBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDFFMDA7CisgICAgY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MUUwMTsKKyAgICBjb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxRTAyOworICAgIGNvbnN0IEdMZW51bSBERUNSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDFFMDM7CisgICAgY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTUwQTsKKyAgICBjb25zdCBHTGVudW0gSU5DUl9XUkFQICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NTA3OworICAgIGNvbnN0IEdMZW51bSBERUNSX1dSQVAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg1MDg7CisKKyAgICAvKiBTdHJpbmdOYW1lICovCisgICAgY29uc3QgR0xl
bnVtIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMDsKKyAgICBjb25zdCBH
TGVudW0gUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAxOworICAgIGNvbnN0
IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7CisKKyAgICAv
KiBUZXh0dXJlTWFnRmlsdGVyICovCisgICAgY29uc3QgR0xlbnVtIE5FQVJFU1QgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MjYwMDsKKyAgICBjb25zdCBHTGVudW0gTElORUFSICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgyNjAxOworCisgICAgLyogVGV4dHVyZU1pbkZpbHRlciAqLwor
ICAgIC8qICAgICAgTkVBUkVTVCAqLworICAgIC8qICAgICAgTElORUFSICovCisgICAgY29uc3Qg
R0xlbnVtIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsKKyAgICBjb25z
dCBHTGVudW0gTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0gMHgyNzAxOworICAgIGNv
bnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7CisgICAg
Y29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICA9IDB4MjcwMzsKKwor
ICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
TUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVS
RV9NSU5fRklMVEVSICAgICAgICAgICAgID0gMHgyODAxOworICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7CisgICAgY29uc3QgR0xlbnVtIFRF
WFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKKworICAgIC8qIFRleHR1cmVU
YXJnZXQgKi8KKyAgICAvKiAgICAgIFRFWFRVUkVfMkQgKi8KKyAgICBjb25zdCBHTGVudW0gVEVY
VFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOworCisgICAgY29uc3QgR0xlbnVt
IFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKKyAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0OworICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7CisgICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsKKyAgICBjb25z
dCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3OworICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7CisgICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA9IDB4ODUxOTsKKyAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0gMHg4NTFBOwor
ICAgIGNvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7
CisKKyAgICAvKiBUZXh0dXJlVW5pdCAqLworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMCAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0QzA7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMyOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
MyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzM7CisgICAgY29uc3QgR0xlbnVtIFRFWFRV
UkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKKyAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTUgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OworICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzY7CisgICAgY29uc3QgR0xlbnVt
IFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKKyAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4OworICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzk7CisgICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKKyAgICBjb25z
dCBHTGVudW0gVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENCOworICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0M7CisgICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRDsKKyAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENFOwor
ICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Y7
CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
MDsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEQxOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDI7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODREMzsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEQ0OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0RDU7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRENjsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIzICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEQ3OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjQgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0RDg7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODREOTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI2ICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NERBOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjcgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0REI7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyOCAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODREQzsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI5ICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEREOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMzAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0REU7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUz
MSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKKyAgICBjb25zdCBHTGVudW0gQUNUSVZF
X1RFWFRVUkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOworCisgICAgLyogVGV4dHVyZVdyYXBN
b2RlICovCisgICAgY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MjkwMTsKKyAgICBjb25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAg
ID0gMHg4MTJGOworICAgIGNvbnN0IEdMZW51bSBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAg
ICAgPSAweDgzNzA7CisKKyAgICAvKiBVbmlmb3JtIFR5cGVzICovCisgICAgY29uc3QgR0xlbnVt
IEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MDsKKyAgICBjb25zdCBHTGVu
dW0gRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOworICAgIGNvbnN0IEdM
ZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7CisgICAgY29uc3Qg
R0xlbnVtIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MzsKKyAgICBjb25z
dCBHTGVudW0gSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU0OworICAgIGNv
bnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7CisgICAg
Y29uc3QgR0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NjsKKyAg
ICBjb25zdCBHTGVudW0gQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU3Owor
ICAgIGNvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTg7
CisgICAgY29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
OTsKKyAgICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjVBOworICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNUI7CisgICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1QzsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjVFOworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAg
ICAgPSAweDhCNjA7CisKKyAgICAvKiBWZXJ0ZXggQXJyYXlzICovCisgICAgY29uc3QgR0xlbnVt
IFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7CisgICAgY29uc3Qg
R0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2MjM7CisgICAg
Y29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgPSAweDg2MjQ7
CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgPSAw
eDg2MjU7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCAg
ICAgPSAweDg4NkE7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRF
UiAgICAgICAgPSAweDg2NDU7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlf
QlVGRkVSX0JJTkRJTkcgPSAweDg4OUY7CisKKyAgICAvKiBTaGFkZXIgU291cmNlICovCisgICAg
Y29uc3QgR0xlbnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4OEI4MTsKKwor
ICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCisgICAgY29uc3QgR0xl
bnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKKyAgICBjb25zdCBH
TGVudW0gTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4REYxOworICAgIGNvbnN0
IEdMZW51bSBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgPSAweDhERjI7CisgICAgY29u
c3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKKyAgICBj
b25zdCBHTGVudW0gTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REY0OworICAg
IGNvbnN0IEdMZW51bSBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjU7CisK
KyAgICAvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSICAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKKyAgICBjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4RDQxOworCisgICAgY29uc3QgR0xlbnVtIFJH
QkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKKyAgICBjb25zdCBHTGVudW0g
UkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OworICAgIGNvbnN0IEdMZW51
bSBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhENjI7CisgICAgY29uc3QgR0xl
bnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKKyAgICBjb25zdCBH
TGVudW0gU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOworICAgIGNvbnN0
IEdMZW51bSBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgPSAweDhENDg7CisgICAgY29u
c3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKKworICAg
IGNvbnN0IEdMZW51bSBTUkdCX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEM0MDsKKyAgICBjb25zdCBHTGVudW0gU1JHQl9BTFBIQV9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhDNDI7CisgICAgY29uc3QgR0xlbnVtIFNSR0I4X0FMUEhB
OF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQzOworICAgIGNvbnN0IEdM
ZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVCAgICA9IDB4ODIx
MDsKKworICAgIGNvbnN0IEdMZW51bSBNSU5fRVhUICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDgwMDc7CisgICAgY29uc3QgR0xlbnVtIE1BWF9FWFQgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODAwODsKKworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAg
ICAgPSAweDhENDI7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAg
ICAgICA9IDB4OEQ0MzsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZP
Uk1BVCAgID0gMHg4RDQ0OworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfUkVEX1NJWkUg
ICAgICAgICAgPSAweDhENTA7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9HUkVFTl9T
SVpFICAgICAgICA9IDB4OEQ1MTsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVf
U0laRSAgICAgICAgID0gMHg4RDUyOworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQUxQ
SEFfU0laRSAgICAgICAgPSAweDhENTM7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9E
RVBUSF9TSVpFICAgICAgICA9IDB4OEQ1NDsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVS
X1NURU5DSUxfU0laRSAgICAgID0gMHg4RDU1OworCisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgID0gMHg4Q0QwOworICAgIGNvbnN0
IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA9IDB4
OENEMTsKKyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xF
VkVMICAgICAgICAgPSAweDhDRDI7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFID0gMHg4Q0QzOworCisgICAgY29uc3QgR0xlbnVt
IENPTE9SX0FUVEFDSE1FTlQwICAgICAgICAgICAgICA9IDB4OENFMDsKKyAgICBjb25zdCBHTGVu
dW0gREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4RDAwOworICAgIGNvbnN0IEdM
ZW51bSBTVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgPSAweDhEMjA7CisgICAgY29uc3Qg
R0xlbnVtIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA9IDB4ODIxQTsKKworICAgIGNv
bnN0IEdMZW51bSBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworCisgICAgY29u
c3QgR0xlbnVtIEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4
Q0Q1OworICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQg
ICAgICAgICA9IDB4OENENjsKKyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9NSVNTSU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgID0gMHg4Q0Q5OworICAgIGNvbnN0IEdM
ZW51bSBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA9IDB4OENERDsK
KworICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhD
QTY7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4
OENBNzsKKyAgICBjb25zdCBHTGVudW0gTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgID0g
MHg4NEU4OworCisgICAgY29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
ICA9IDB4MDUwNjsKKworICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovCisgICAgY29uc3Qg
R0xlbnVtIFVOUEFDS19GTElQX1lfV0VCR0wgICAgICAgICAgICAgICAgPSAweDkyNDA7CisgICAg
Y29uc3QgR0xlbnVtIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7
CisgICAgY29uc3QgR0xlbnVtIENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICAgICAgPSAw
eDkyNDI7CisgICAgY29uc3QgR0xlbnVtIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VC
R0wgPSAweDkyNDM7CisgICAgY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAg
ICAgICAgICAgPSAweDkyNDQ7CisKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3
aW5nQnVmZmVyV2lkdGg7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1
ZmZlckhlaWdodDsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGF0dGFjaFNoYWRlcihX
ZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRp
b24oV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCwgRE9NU3RyaW5nIG5hbWUpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJp
bmRCdWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kRnJhbWVidWZm
ZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CisgICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFJlbmRl
cmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJp
bmRUZXh0dXJlKEdMZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdM
Y2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7CisgICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJh
dGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBibGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFj
dG9yKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jU2Vw
YXJhdGUoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVu
dW0gZHN0QWxwaGEpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEs
IEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXc/
IGRhdGEsIEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRy
IHNpemUsIEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0
ciBvZmZzZXQsIEFycmF5QnVmZmVyPyBkYXRhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQs
IEdMaW50cHRyIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhKTsKKworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIEdMZW51bSAgICAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51bSB0
YXJnZXQpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJp
dGZpZWxkIG1hc2spOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVh
ckNvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xh
bXBmIGFscGhhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJE
ZXB0aChHTGNsYW1wZiBkZXB0aCk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIGNsZWFyU3RlbmNpbChHTGludCBzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgY29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29s
ZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciBzaGFk
ZXIpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRU
ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEFycmF5
QnVmZmVyVmlldyBkYXRhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7CisgICAgCisgICAgW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgW1N0cmljdFR5
cGVDaGVja2luZ10gV2ViR0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gV2ViR0xGcmFtZWJ1ZmZlciBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIFdlYkdMUHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7CisgICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gV2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRlciBjcmVh
dGVTaGFkZXIoR0xlbnVtIHR5cGUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMVGV4
dHVyZSBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgY3VsbEZhY2UoR0xlbnVtIG1vZGUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1l
YnVmZmVyIGZyYW1lYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZl
ciByZW5kZXJidWZmZXIpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBk
ZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CisKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhGdW5jKEdMZW51bSBmdW5j
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhNYXNrKEdMYm9v
bGVhbiBmbGFnKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhS
YW5nZShHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcik7CisgICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZGV0YWNoU2hhZGVyKFdlYkdMUHJv
Z3JhbSBwcm9ncmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBkaXNhYmxlKEdMZW51bSBjYXApOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShHTHVpbnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBH
THNpemVpIGNvdW50KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdM
ZW51bSB0eXBlLCBHTGludHB0ciBvZmZzZXQpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGVuYWJsZShHTGVudW0gY2FwKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShH
THVpbnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBmaW5p
c2goKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xl
bnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBm
cmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xl
bnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlIHRleHR1cmUsIEdMaW50IGxldmVsKTsKKyAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoR0xl
bnVtIHRhcmdldCk7CisgICAgCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFt
LCBHTHVpbnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gV2ViR0xBY3RpdmVJbmZvIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0s
IEdMdWludCBpbmRleCk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtIHByb2dyYW0p
OworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7CisKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b21dIGFueSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIHBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMgZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIEdMZW51bSBnZXRFcnJvcigpOworCisgICAgLy8gb2JqZWN0IGdldEV4dGVuc2lvbihE
T01TdHJpbmcgbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0
RXh0ZW5zaW9uKERPTVN0cmluZyBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOworICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UGFy
YW1ldGVyKEdMZW51bSBwbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIGFueSBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtLCBHTGVudW0gcG5hbWUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJu
ZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3Jh
bUluZm9Mb2coV2ViR0xQcm9ncmFtIHByb2dyYW0pOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIg
c2hhZGVyLCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRS
ZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBn
ZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0IGdldFNo
YWRlclByZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5
cGUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdB
cz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2Vx
dWVuY2U8RE9NU3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFRleFBhcmFtZXRl
cihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbik7CisKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZv
cm1Mb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOworCisgICAg
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRWZXJ0
ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gR0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0x1aW50IGluZGV4LCBH
TGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhp
bnQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IEdMYm9vbGVhbiAgICBpc0J1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0NvbnRleHRMb3N0KCk7CisgICAgW1N0cmljdFR5
cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVm
ZmVyIGZyYW1lYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAg
aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBHTGJvb2xlYW4gICAgaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVm
ZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNTaGFkZXIoV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAg
aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgbGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGxpbmtQcm9ncmFtKFdlYkdM
UHJvZ3JhbSBwcm9ncmFtKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
cGl4ZWxTdG9yZWkoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxv
YXQgdW5pdHMpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmll
dyBwaXhlbHMpOworICAgIAorICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBy
ZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgcmVuZGVyYnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgc2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9v
bGVhbiBpbnZlcnQpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lz
c29yKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBzaGFk
ZXJTb3VyY2UoV2ViR0xTaGFkZXIgc2hhZGVyLCBET01TdHJpbmcgc3RyaW5nKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmMoR0xlbnVtIGZ1bmMsIEdM
aW50IHJlZiwgR0x1aW50IG1hc2spOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBzdGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQg
cmVmLCBHTHVpbnQgbWFzayk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IHN0ZW5jaWxNYXNrKEdMdWludCBtYXNrKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgc3RlbmNpbE1hc2tTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZh
aWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgc3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWls
LCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgdGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
IEdMZmxvYXQgcGFyYW0pOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0
ZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwor
CisgICAgLy8gU3VwcG9ydGVkIGZvcm1zOgorICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8g
cGl4ZWxzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMpOworI2lmIGRlZmluZWQo
RU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhU
TUxWaWRlb0VsZW1lbnQ/IHZpZGVvKTsKKyNlbmRpZgorCisgICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZp
ZXc/IHBpeGVscyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VE
YXRhPyBwaXhlbHMpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJ
bWFnZUVsZW1lbnQ/IGltYWdlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBIVE1MQ2FudmFzRWxlbWVudD8gY2FudmFzKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykg
JiYgRU5BQkxFX1ZJREVPCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRN
TFZpZGVvRWxlbWVudD8gdmlkZW8pOworI2VuZGlmCisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBHTGZsb2F0IHgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIEZsb2F0MzJBcnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTFpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGlu
dCB4KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCB1bmlmb3JtMWl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5
IHYpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtMmYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCB1bmlmb3JtMmZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkg
dik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm0yaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5p
Zm9ybTJpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmKFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9h
dCB6KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCB1bmlmb3JtM2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkgdik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVu
aWZvcm0zaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xpbnQgeik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgdW5pZm9ybTNpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJB
cnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybTRmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxv
YXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0
aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGl2KFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOworCisgICAgW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJm
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxv
YXQzMkFycmF5IGFycmF5KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1N
YXRyaXg0ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIEZsb2F0MzJBcnJheSBhcnJheSk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFt
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworCisgICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjFmKEdMdWludCBpbmR4LCBHTGZs
b2F0IHgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRy
aWIxZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5keCwgR0xmbG9h
dCB4LCBHTGZsb2F0IHkpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2
ZXJ0ZXhBdHRyaWIyZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CisgICAgW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFy
cmF5IHZhbHVlcyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRl
eEF0dHJpYjRmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBH
TGZsb2F0IHcpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhB
dHRyaWI0ZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYlBv
aW50ZXIoR0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9y
bWFsaXplZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIEdMaW50cHRyIG9mZnNldCk7CisKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCSh3b3Jr
aW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdD
b250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsNjQ3ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMZW51bTsKLXR5cGVkZWYgYm9vbGVhbiAgICAg
ICAgR0xib29sZWFuOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGJpdGZpZWxkOwotdHlwZWRl
ZiBieXRlICAgICAgICAgICBHTGJ5dGU7ICAgICAgICAgLyogJ2J5dGUnIHNob3VsZCBiZSBhIHNp
Z25lZCA4IGJpdCB0eXBlLiAqLwotdHlwZWRlZiBzaG9ydCAgICAgICAgICBHTHNob3J0OwotdHlw
ZWRlZiBsb25nICAgICAgICAgICBHTGludDsKLXR5cGVkZWYgbG9uZyAgICAgICAgICAgR0xzaXpl
aTsKLXR5cGVkZWYgbG9uZyBsb25nICAgICAgR0xpbnRwdHI7Ci10eXBlZGVmIGxvbmcgbG9uZyAg
ICAgIEdMc2l6ZWlwdHI7Ci10eXBlZGVmIG9jdGV0ICAgICAgICAgIEdMdWJ5dGU7ICAgICAgICAv
KiAnb2N0ZXQnIHNob3VsZCBiZSBhbiB1bnNpZ25lZCA4IGJpdCB0eXBlLiAqLwotdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBHTHVzaG9ydDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0x1aW50Owot
dHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xmbG9hdDsKLXR5cGVkZWYgdW5yZXN0cmljdGVk
IGZsb2F0IEdMY2xhbXBmOwotCiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCR0wsCiAgICAgSlNDdXN0
b21NYXJrRnVuY3Rpb24sCiAgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLV0gaW50ZXJmYWNlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewotCi0gICAgLyog
Q2xlYXJCdWZmZXJNYXNrICovCi0gICAgY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAg
ICAgICAgICAgICA9IDB4MDAwMDAxMDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQlVGRkVS
X0JJVCAgICAgICAgICAgICA9IDB4MDAwMDA0MDA7Ci0gICAgY29uc3QgR0xlbnVtIENPTE9SX0JV
RkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7Ci0KLSAgICAvKiBCZWdpbk1vZGUg
Ki8KLSAgICBjb25zdCBHTGVudW0gUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MDAwOwotICAgIGNvbnN0IEdMZW51bSBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDE7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9
IDB4MDAwMjsKLSAgICBjb25zdCBHTGVudW0gTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAg
ID0gMHgwMDAzOwotICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAwMDQ7Ci0gICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAgICAgICAg
ICAgICA9IDB4MDAwNTsKLSAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfRkFOICAgICAgICAgICAg
ICAgICAgID0gMHgwMDA2OwotCi0gICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBp
biBFUzIwKSAqLwotICAgIC8qICAgICAgTkVWRVIgKi8KLSAgICAvKiAgICAgIExFU1MgKi8KLSAg
ICAvKiAgICAgIEVRVUFMICovCi0gICAgLyogICAgICBMRVFVQUwgKi8KLSAgICAvKiAgICAgIEdS
RUFURVIgKi8KLSAgICAvKiAgICAgIE5PVEVRVUFMICovCi0gICAgLyogICAgICBHRVFVQUwgKi8K
LSAgICAvKiAgICAgIEFMV0FZUyAqLwotCi0gICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovCi0g
ICAgY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Ci0gICAg
Y29uc3QgR0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7Ci0gICAgY29u
c3QgR0xlbnVtIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMDsKLSAgICBj
b25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOwotICAg
IGNvbnN0IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDI7Ci0g
ICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA9IDB4MDMwMzsK
LSAgICBjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0
OwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAgICAgPSAweDAz
MDU7Ci0KLSAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLwotICAgIC8qICAgICAgWkVSTyAqLwot
ICAgIC8qICAgICAgT05FICovCi0gICAgY29uc3QgR0xlbnVtIERTVF9DT0xPUiAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDMwNjsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xP
UiAgICAgICAgICAgID0gMHgwMzA3OwotICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQSEFfU0FUVVJB
VEUgICAgICAgICAgICAgPSAweDAzMDg7Ci0gICAgLyogICAgICBTUkNfQUxQSEEgKi8KLSAgICAv
KiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KLSAgICAvKiAgICAgIERTVF9BTFBIQSAqLwot
ICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLwotCi0gICAgLyogQmxlbmRFcXVhdGlv
blNlcGFyYXRlICovCi0gICAgY29uc3QgR0xlbnVtIEZVTkNfQUREICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODAwNjsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT04gICAgICAgICAg
ICAgICAgID0gMHg4MDA5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAg
ICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLwotICAgIGNv
bnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgPSAweDg4M0Q7Ci0KLSAg
ICAvKiBCbGVuZFN1YnRyYWN0ICovCi0gICAgY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAg
ICAgICAgICAgICAgICA9IDB4ODAwQTsKLSAgICBjb25zdCBHTGVudW0gRlVOQ19SRVZFUlNFX1NV
QlRSQUNUICAgICAgICAgID0gMHg4MDBCOwotCi0gICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rp
b25zICovCi0gICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9
IDB4ODBDODsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAg
ID0gMHg4MEM5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAg
ICAgPSAweDgwQ0E7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAg
ICAgICA9IDB4ODBDQjsKLSAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQ09MT1IgICAgICAgICAg
ICAgICAgID0gMHg4MDAxOwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQ09M
T1IgICAgICAgPSAweDgwMDI7Ci0gICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAg
ICAgICAgICAgICA9IDB4ODAwMzsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBICAgICAgID0gMHg4MDA0OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9DT0xPUiAgICAg
ICAgICAgICAgICAgICAgPSAweDgwMDU7Ci0KLSAgICAvKiBCdWZmZXIgT2JqZWN0cyAqLwotICAg
IGNvbnN0IEdMZW51bSBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgPSAweDg4OTI7Ci0g
ICAgY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA9IDB4ODg5MzsK
LSAgICBjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0
OwotICAgIGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgPSAweDg4
OTU7Ci0KLSAgICBjb25zdCBHTGVudW0gU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgID0g
MHg4OEUwOwotICAgIGNvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAg
PSAweDg4RTQ7Ci0gICAgY29uc3QgR0xlbnVtIERZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAg
ICA9IDB4ODhFODsKLQotICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfU0laRSAgICAgICAgICAgICAg
ICAgICAgPSAweDg3NjQ7Ci0gICAgY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAgICAgICAg
ICAgICAgICA9IDB4ODc2NTsKLQotICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1ZFUlRFWF9BVFRS
SUIgICAgICAgICAgPSAweDg2MjY7Ci0KLSAgICAvKiBDdWxsRmFjZU1vZGUgKi8KLSAgICBjb25z
dCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OwotICAgIGNv
bnN0IEdMZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0MDU7Ci0gICAg
Y29uc3QgR0xlbnVtIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA9IDB4MDQwODsKLQot
ICAgIC8qIERlcHRoRnVuY3Rpb24gKi8KLSAgICAvKiAgICAgIE5FVkVSICovCi0gICAgLyogICAg
ICBMRVNTICovCi0gICAgLyogICAgICBFUVVBTCAqLwotICAgIC8qICAgICAgTEVRVUFMICovCi0g
ICAgLyogICAgICBHUkVBVEVSICovCi0gICAgLyogICAgICBOT1RFUVVBTCAqLwotICAgIC8qICAg
ICAgR0VRVUFMICovCi0gICAgLyogICAgICBBTFdBWVMgKi8KLQotICAgIC8qIEVuYWJsZUNhcCAq
LwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgPSAweDBE
RTE7Ci0gICAgY29uc3QgR0xlbnVtIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA9IDB4
MEI0NDsKLSAgICBjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwQkUyOwotICAgIGNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDBCRDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAg
ICA9IDB4MEI5MDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAg
ICAgID0gMHgwQjcxOwotICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX1RFU1QgICAgICAgICAgICAg
ICAgICAgPSAweDBDMTE7Ci0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAg
ICAgICAgICA9IDB4ODAzNzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFICAgICAgID0gMHg4MDlFOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0UgICAg
ICAgICAgICAgICAgPSAweDgwQTA7Ci0KLSAgICAvKiBFcnJvckNvZGUgKi8KLSAgICBjb25zdCBH
TGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLSAgICBjb25zdCBHTGVu
dW0gSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAwOwotICAgIGNvbnN0IEdM
ZW51bSBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1MDE7Ci0gICAgY29uc3Qg
R0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsKLSAgICBjb25z
dCBHTGVudW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgwNTA1OwotCi0gICAg
LyogRnJvbnRGYWNlRGlyZWN0aW9uICovCi0gICAgY29uc3QgR0xlbnVtIENXICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKLSAgICBjb25zdCBHTGVudW0gQ0NXICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwOTAxOwotCi0gICAgLyogR2V0UE5hbWUgKi8KLSAgICBj
b25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOwotICAg
IGNvbnN0IEdMZW51bSBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgPSAweDg0NkQ7Ci0g
ICAgY29uc3QgR0xlbnVtIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9IDB4ODQ2RTsK
LSAgICBjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1
OwotICAgIGNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAgICAgICAgICAgICAgICAgPSAweDBC
NDY7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA9IDB4
MEI3MDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0g
MHgwQjcyOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxVRSAgICAgICAgICAgICAg
PSAweDBCNzM7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAg
ICA9IDB4MEI3NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAg
ICAgID0gMHgwQjkxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZVTkMgICAgICAgICAgICAg
ICAgICAgPSAweDBCOTI7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRkFJTCAgICAgICAgICAg
ICAgICAgICA9IDB4MEI5NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZB
SUwgICAgICAgID0gMHgwQjk1OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BBU1NfREVQVEhf
UEFTUyAgICAgICAgPSAweDBCOTY7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUkVGICAgICAg
ICAgICAgICAgICAgICA9IDB4MEI5NzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9N
QVNLICAgICAgICAgICAgID0gMHgwQjkzOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1dSSVRF
TUFTSyAgICAgICAgICAgICAgPSAweDBCOTg7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFD
S19GVU5DICAgICAgICAgICAgICA9IDB4ODgwMDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9C
QUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKLSAgICBjb25zdCBHTGVudW0gU1RF
TkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOwotICAgIGNvbnN0IEdMZW51bSBT
VEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7Ci0gICAgY29uc3QgR0xlbnVt
IFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA9IDB4OENBNTsKLSAgICBjb25zdCBHTGVu
dW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOwotICAgIGNvbnN0IEdM
ZW51bSBTQ0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBDMTA7Ci0gICAgLyogICAg
ICBTQ0lTU09SX1RFU1QgKi8KLSAgICBjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAg
ICAgICAgICAgID0gMHgwQzIyOwotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9XUklURU1BU0sgICAg
ICAgICAgICAgICAgPSAweDBDMjM7Ci0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICA9IDB4MENGNTsKLSAgICBjb25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICAgID0gMHgwRDA1OwotICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9T
SVpFICAgICAgICAgICAgICAgPSAweDBEMzM7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WSUVXUE9S
VF9ESU1TICAgICAgICAgICAgICA9IDB4MEQzQTsKLSAgICBjb25zdCBHTGVudW0gU1VCUElYRUxf
QklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOwotICAgIGNvbnN0IEdMZW51bSBSRURfQklU
UyAgICAgICAgICAgICAgICAgICAgICAgPSAweDBENTI7Ci0gICAgY29uc3QgR0xlbnVtIEdSRUVO
X0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKLSAgICBjb25zdCBHTGVudW0gQkxV
RV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OwotICAgIGNvbnN0IEdMZW51bSBB
TFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7Ci0gICAgY29uc3QgR0xlbnVt
IERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKLSAgICBjb25zdCBHTGVu
dW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OwotICAgIGNvbnN0IEdM
ZW51bSBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJBMDA7Ci0gICAgLyogICAg
ICBQT0xZR09OX09GRlNFVF9GSUxMICovCi0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VU
X0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9CSU5E
SU5HXzJEICAgICAgICAgICAgID0gMHg4MDY5OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQlVG
RkVSUyAgICAgICAgICAgICAgICAgPSAweDgwQTg7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRVMg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExF
X0NPVkVSQUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFBOwotICAgIGNvbnN0IEdMZW51bSBTQU1Q
TEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7Ci0KLSAgICAvKiBHZXRUZXh0dXJl
UGFyYW1ldGVyICovCi0gICAgLyogICAgICBURVhUVVJFX01BR19GSUxURVIgKi8KLSAgICAvKiAg
ICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqLwotICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8K
LSAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9UICovCi0KLSAgICBjb25zdCBHTGVudW0gQ09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOwotCi0gICAgLyogSGludE1vZGUgKi8K
LSAgICBjb25zdCBHTGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAw
OwotICAgIGNvbnN0IEdMZW51bSBGQVNURVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEx
MDE7Ci0gICAgY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MTEwMjsKLQotICAgIC8qIEhpbnRUYXJnZXQgKi8KLSAgICBjb25zdCBHTGVudW0gR0VORVJBVEVf
TUlQTUFQX0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKLQotICAgIC8qIERhdGFUeXBlICovCi0g
ICAgY29uc3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMDsK
LSAgICBjb25zdCBHTGVudW0gVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgID0gMHgxNDAx
OwotICAgIGNvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0
MDI7Ci0gICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA9IDB4
MTQwMzsKLSAgICBjb25zdCBHTGVudW0gSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxNDA0OwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAg
PSAweDE0MDU7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MTQwNjsKLQotICAgIC8qIFBpeGVsRm9ybWF0ICovCi0gICAgY29uc3QgR0xlbnVtIERF
UFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKLSAgICBjb25zdCBHTGVudW0g
QUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA2OwotICAgIGNvbnN0IEdMZW51
bSBSR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7Ci0gICAgY29uc3QgR0xl
bnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKLSAgICBjb25zdCBH
TGVudW0gTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA5OwotICAgIGNvbnN0
IEdMZW51bSBMVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAweDE5MEE7Ci0KLSAgICAv
KiBQaXhlbFR5cGUgKi8KLSAgICAvKiAgICAgIFVOU0lHTkVEX0JZVEUgKi8KLSAgICBjb25zdCBH
TGVudW0gVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOwotICAgIGNvbnN0
IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7Ci0gICAgY29u
c3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9IDB4ODM2MzsKLQotICAg
IC8qIFNoYWRlcnMgKi8KLSAgICBjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAgICAgICAg
ICAgICAgICAgPSAweDhCMzA7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9TSEFERVIgICAgICAg
ICAgICAgICAgICAgID0gMHg4QjMxOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX0FUVFJJ
QlMgICAgICAgICAgICAgICA9IDB4ODg2OTsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WQVJZ
SU5HX1ZFQ1RPUlMgICAgICAgICAgICAgID0gMHg4REZDOwotICAgIGNvbnN0IEdMZW51bSBNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKLSAgICBjb25zdCBHTGVudW0g
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7Ci0gICAgY29uc3QgR0xl
bnVtIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgID0gMHg4ODcyOwotICAgIGNvbnN0
IEdMZW51bSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9IDB4OERGRDsKLSAgICBj
b25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7Ci0g
ICAgY29uc3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgID0gMHg4Qjgw
OwotICAgIGNvbnN0IEdMZW51bSBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI4MjsKLSAgICBjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAg
PSAweDhCODM7Ci0gICAgY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAg
ICAgID0gMHg4Qjg1OwotICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAg
ICAgICAgICA9IDB4OEI4NjsKLSAgICBjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMgICAg
ICAgICAgICAgICAgPSAweDhCODk7Ci0gICAgY29uc3QgR0xlbnVtIFNIQURJTkdfTEFOR1VBR0Vf
VkVSU0lPTiAgICAgICAgID0gMHg4QjhDOwotICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1BST0dS
QU0gICAgICAgICAgICAgICAgICA9IDB4OEI4RDsKLQotICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAq
LwotICAgIGNvbnN0IEdMZW51bSBORVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAy
MDA7Ci0gICAgY29uc3QgR0xlbnVtIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDIwMTsKLSAgICBjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMjAyOwotICAgIGNvbnN0IEdMZW51bSBMRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDAyMDM7Ci0gICAgY29uc3QgR0xlbnVtIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwNDsKLSAgICBjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwMjA1OwotICAgIGNvbnN0IEdMZW51bSBHRVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAyMDY7Ci0gICAgY29uc3QgR0xlbnVtIEFMV0FZUyAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDIwNzsKLQotICAgIC8qIFN0ZW5jaWxPcCAqLwotICAgIC8qICAgICAgWkVS
TyAqLwotICAgIGNvbnN0IEdMZW51bSBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDFFMDA7Ci0gICAgY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MUUwMTsKLSAgICBjb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxRTAyOwotICAgIGNvbnN0IEdMZW51bSBERUNSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDFFMDM7Ci0gICAgY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTUwQTsKLSAgICBjb25zdCBHTGVudW0gSU5DUl9XUkFQICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NTA3OwotICAgIGNvbnN0IEdMZW51bSBERUNSX1dSQVAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg1MDg7Ci0KLSAgICAvKiBTdHJpbmdOYW1lICovCi0gICAgY29uc3QgR0xl
bnVtIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMDsKLSAgICBjb25zdCBH
TGVudW0gUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAxOwotICAgIGNvbnN0
IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7Ci0KLSAgICAv
KiBUZXh0dXJlTWFnRmlsdGVyICovCi0gICAgY29uc3QgR0xlbnVtIE5FQVJFU1QgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MjYwMDsKLSAgICBjb25zdCBHTGVudW0gTElORUFSICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgyNjAxOwotCi0gICAgLyogVGV4dHVyZU1pbkZpbHRlciAqLwot
ICAgIC8qICAgICAgTkVBUkVTVCAqLwotICAgIC8qICAgICAgTElORUFSICovCi0gICAgY29uc3Qg
R0xlbnVtIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsKLSAgICBjb25z
dCBHTGVudW0gTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0gMHgyNzAxOwotICAgIGNv
bnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7Ci0gICAg
Y29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICA9IDB4MjcwMzsKLQot
ICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCi0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
TUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RV9NSU5fRklMVEVSICAgICAgICAgICAgID0gMHgyODAxOwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKLQotICAgIC8qIFRleHR1cmVU
YXJnZXQgKi8KLSAgICAvKiAgICAgIFRFWFRVUkVfMkQgKi8KLSAgICBjb25zdCBHTGVudW0gVEVY
VFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOwotCi0gICAgY29uc3QgR0xlbnVt
IFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0OwotICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7Ci0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsKLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3OwotICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7Ci0gICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA9IDB4ODUxOTsKLSAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0gMHg4NTFBOwot
ICAgIGNvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7
Ci0KLSAgICAvKiBUZXh0dXJlVW5pdCAqLwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMCAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0QzA7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMyOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
MyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRV
UkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKLSAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTUgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OwotICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzY7Ci0gICAgY29uc3QgR0xlbnVt
IFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4OwotICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzk7Ci0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENCOwotICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0M7Ci0gICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRDsKLSAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENFOwot
ICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Y7
Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
MDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEQxOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODREMzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEQ0OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0RDU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRENjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIzICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEQ3OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjQgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0RDg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODREOTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI2ICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NERBOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjcgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0REI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyOCAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODREQzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI5ICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEREOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMzAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0REU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUz
MSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKLSAgICBjb25zdCBHTGVudW0gQUNUSVZF
X1RFWFRVUkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOwotCi0gICAgLyogVGV4dHVyZVdyYXBN
b2RlICovCi0gICAgY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MjkwMTsKLSAgICBjb25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAg
ID0gMHg4MTJGOwotICAgIGNvbnN0IEdMZW51bSBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAg
ICAgPSAweDgzNzA7Ci0KLSAgICAvKiBVbmlmb3JtIFR5cGVzICovCi0gICAgY29uc3QgR0xlbnVt
IEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MDsKLSAgICBjb25zdCBHTGVu
dW0gRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOwotICAgIGNvbnN0IEdM
ZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7Ci0gICAgY29uc3Qg
R0xlbnVtIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MzsKLSAgICBjb25z
dCBHTGVudW0gSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU0OwotICAgIGNv
bnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7Ci0gICAg
Y29uc3QgR0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NjsKLSAg
ICBjb25zdCBHTGVudW0gQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU3Owot
ICAgIGNvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTg7
Ci0gICAgY29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
OTsKLSAgICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjVBOwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNUI7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1QzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjVFOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAg
ICAgPSAweDhCNjA7Ci0KLSAgICAvKiBWZXJ0ZXggQXJyYXlzICovCi0gICAgY29uc3QgR0xlbnVt
IFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7Ci0gICAgY29uc3Qg
R0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2MjM7Ci0gICAg
Y29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgPSAweDg2MjQ7
Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgPSAw
eDg2MjU7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCAg
ICAgPSAweDg4NkE7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRF
UiAgICAgICAgPSAweDg2NDU7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlf
QlVGRkVSX0JJTkRJTkcgPSAweDg4OUY7Ci0KLSAgICAvKiBTaGFkZXIgU291cmNlICovCi0gICAg
Y29uc3QgR0xlbnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4OEI4MTsKLQot
ICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCi0gICAgY29uc3QgR0xl
bnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKLSAgICBjb25zdCBH
TGVudW0gTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4REYxOwotICAgIGNvbnN0
IEdMZW51bSBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgPSAweDhERjI7Ci0gICAgY29u
c3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKLSAgICBj
b25zdCBHTGVudW0gTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REY0OwotICAg
IGNvbnN0IEdMZW51bSBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjU7Ci0K
LSAgICAvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSICAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKLSAgICBjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4RDQxOwotCi0gICAgY29uc3QgR0xlbnVtIFJH
QkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKLSAgICBjb25zdCBHTGVudW0g
UkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OwotICAgIGNvbnN0IEdMZW51
bSBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhENjI7Ci0gICAgY29uc3QgR0xl
bnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKLSAgICBjb25zdCBH
TGVudW0gU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOwotICAgIGNvbnN0
IEdMZW51bSBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgPSAweDhENDg7Ci0gICAgY29u
c3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKLQotICAg
IGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgPSAweDhENDI7Ci0g
ICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAgICAgICA9IDB4OEQ0MzsK
LSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgID0gMHg4RDQ0
OwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAgICAgPSAweDhE
NTA7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFICAgICAgICA9IDB4
OEQ1MTsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgID0g
MHg4RDUyOwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAg
PSAweDhENTM7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFICAgICAg
ICA9IDB4OEQ1NDsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAg
ICAgID0gMHg4RDU1OwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
T0JKRUNUX1RZUEUgICAgICAgICAgID0gMHg4Q0QwOwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA9IDB4OENEMTsKLSAgICBjb25z
dCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAw
eDhDRDI7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9D
VUJFX01BUF9GQUNFID0gMHg4Q0QzOwotCi0gICAgY29uc3QgR0xlbnVtIENPTE9SX0FUVEFDSE1F
TlQwICAgICAgICAgICAgICA9IDB4OENFMDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfQVRUQUNI
TUVOVCAgICAgICAgICAgICAgID0gMHg4RDAwOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0FU
VEFDSE1FTlQgICAgICAgICAgICAgPSAweDhEMjA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVCAgICAgICA9IDB4ODIxQTsKLQotICAgIGNvbnN0IEdMZW51bSBOT05F
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1F
QlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4Q0Q1OwotICAgIGNvbnN0
IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICA9IDB4OENE
NjsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFD
SE1FTlQgPSAweDhDRDc7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
RElNRU5TSU9OUyAgICAgICAgID0gMHg4Q0Q5OwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA9IDB4OENERDsKLQotICAgIGNvbnN0IEdM
ZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Ci0gICAgY29uc3Qg
R0xlbnVtIFJFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4OENBNzsKLSAgICBjb25z
dCBHTGVudW0gTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgID0gMHg4NEU4OwotCi0gICAg
Y29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUwNjsKLQot
ICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovCi0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19G
TElQX1lfV0VCR0wgICAgICAgICAgICAgICAgPSAweDkyNDA7Ci0gICAgY29uc3QgR0xlbnVtIFVO
UEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7Ci0gICAgY29uc3QgR0xl
bnVtIENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICAgICAgPSAweDkyNDI7Ci0gICAgY29u
c3QgR0xlbnVtIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wgPSAweDkyNDM7Ci0g
ICAgY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICAgICAgPSAweDky
NDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3aW5nQnVmZmVyV2lkdGg7
Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1ZmZlckhlaWdodDsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGFj
dGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0gcHJv
Z3JhbSwgV2ViR0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
IHByb2dyYW0sIEdMdWludCBpbmRleCwgRE9NU3RyaW5nIG5hbWUpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRCdWZmZXIoR0xlbnVt
IHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdl
dCwgV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcihHTGVudW0g
dGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdMZW51
bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgYmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBH
TGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVS
R0IsIEdMZW51bSBtb2RlQWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBibGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jU2VwYXJhdGUoR0xlbnVtIHNy
Y1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1
ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdMZW51bSB1c2FnZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
YnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEsIEdMZW51bSB1
c2FnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1
c2FnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFycmF5
QnVmZmVyPyBkYXRhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNl
dCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdM
ZW51bSAgICAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51bSB0YXJnZXQpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZpZWxkIG1hc2spOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhckNvbG9yKEdMY2xhbXBm
IHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJEZXB0aChHTGNsYW1wZiBk
ZXB0aCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNp
bChHTGludCBzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29sb3JN
YXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9v
bGVhbiBhbHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyBkYXRh
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29tcHJlc3NlZFRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7Ci0gICAgCi0gICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBjb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2Vi
R0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xG
cmFtZWJ1ZmZlciBjcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IFdlYkdMUHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
V2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRlciBjcmVhdGVTaGFkZXIoR0xlbnVt
IHR5cGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMVGV4dHVyZSBjcmVhdGVUZXh0
dXJlKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2Uo
R0xlbnVtIG1vZGUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRl
bGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVm
ZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUHJvZ3Jh
bShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVTaGFkZXIoV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
ZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhGdW5jKEdMZW51bSBmdW5jKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhSYW5nZShHTGNsYW1wZiB6
TmVhciwgR0xjbGFtcGYgekZhcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBX
ZWJHTFNoYWRlciBzaGFkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICBkaXNhYmxlKEdMZW51bSBjYXApOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5k
ZXgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBk
cmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBHTGlu
dHB0ciBvZmZzZXQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGVu
YWJsZShHTGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBmaW5pc2goKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclRleHR1
cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwg
V2ViR0xUZXh0dXJlIHRleHR1cmUsIEdMaW50IGxldmVsKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCk7Ci0g
ICAgCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2
ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJ
bmZvIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotCi0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBD
dXN0b21dIGFueSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgZ2V0
Q29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSBn
ZXRFcnJvcigpOwotCi0gICAgLy8gb2JqZWN0IGdldEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0RXh0ZW5zaW9uKERPTVN0
cmluZyBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhj
ZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UGFyYW1ldGVyKEdMZW51bSBw
bmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IGFueSBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTGVudW0gcG5h
bWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9
TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQ
cm9ncmFtIHByb2dyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBwbmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIgc2hhZGVyLCBHTGVudW0g
cG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJp
bmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9n
KFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0IGdldFNoYWRlclByZWNpc2lvbkZv
cm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNF
eGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIgc2hhZGVy
KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5n
PiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBD
dXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFRleFBhcmFtZXRlcihHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlz
ZXNFeGNlcHRpb25dIGFueSBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJH
TFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRWZXJ0ZXhBdHRyaWIoR0x1aW50
IGluZGV4LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xzaXpl
aXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBp
c0J1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdM
Ym9vbGVhbiAgICBpc0NvbnRleHRMb3N0KCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xi
b29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBHTGJvb2xlYW4gICAgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVy
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNQcm9ncmFtKFdlYkdM
UHJvZ3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAg
aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVy
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNUZXh0dXJlKFdlYkdM
VGV4dHVyZSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
bGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFt
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcGl4ZWxTdG9yZWkoR0xl
bnVtIHBuYW1lLCBHTGludCBwYXJhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOwotCi0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgcmVh
ZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyBwaXhlbHMpOwotICAg
IAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcmVuZGVyYnVm
ZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgc2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lzc29yKEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBzaGFkZXJTb3VyY2UoV2ViR0xT
aGFkZXIgc2hhZGVyLCBET01TdHJpbmcgc3RyaW5nKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmMoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50
IG1hc2spOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsRnVu
Y1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFz
ayk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrKEdM
dWludCBtYXNrKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNp
bE1hc2tTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFp
bCwgR0xlbnVtIHpwYXNzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
c3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWws
IEdMZW51bSB6cGFzcyk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
dGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0p
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJhbWV0ZXJpKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwotCi0gICAgLy8gU3VwcG9y
dGVkIGZvcm1zOgotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMpOwotI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAm
JiBFTkFCTEVfVklERU8KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/
IHZpZGVvKTsKLSNlbmRpZgotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscyk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4
U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRl
eFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGlt
YWdlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxl
bWVudD8gY2FudmFzKTsKLSNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVP
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
dGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudD8g
dmlkZW8pOwotI2VuZGlmCi0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgdW5pZm9ybTFmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0
IHgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJh
eSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5p
Zm9ybTFpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWl2
KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmYoV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmZ2KFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaShXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmKFdlYkdMVW5pZm9ybUxvY2F0
aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2Z2
KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zaShXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9y
bTNpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRmKFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6
LCBHTGZsb2F0IHcpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZs
b2F0MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgdW5pZm9ybTRpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4LCBH
TGludCB5LCBHTGludCB6LCBHTGludCB3KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0
b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGl2KFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXZWJHTFVuaWZvcm1M
b2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCB1bmlmb3JtTWF0cml4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xl
YW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJh
eSBhcnJheSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2YWxpZGF0ZVByb2dy
YW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIHZlcnRleEF0dHJpYjFmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGlu
ZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICB2ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
R0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2
b2lkIHZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFycmF5IHZhbHVlcyk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjRmKEdMdWlu
dCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50
IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGlu
ZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSBzdHJpZGUsIEdMaW50cHRyIG9mZnNldCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOworXSBpbnRlcmZhY2UgV2ViR0wxUmVuZGVyaW5nQ29udGV4dCA6IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgewogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJHTCkKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShw
YXNzZWRDYW52YXMsIGF0dHJpYnV0ZXMpCit7CisgICAgbV90eXBlID0gIndlYmdsMiI7Cit9CisK
K1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZh
c0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCwKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKSA6IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBjb250ZXh0LCBhdHRyaWJ1dGVz
KQoreworICAgIG1fdHlwZSA9ICJ3ZWJnbDIiOworfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0X2gKKyNkZWZpbmUg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dCBmaW5hbCA6IHB1YmxpYyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIHsKK3B1Ymxp
YzoKKyAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOworICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRN
TENhbnZhc0VsZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K1sKKyAgICBDb25kaXRpb25hbD1XRUJHTCwKKyAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKKyAg
ICBEb05vdENoZWNrQ29uc3RhbnRzLAorXSBpbnRlcmZhY2UgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dCA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgeworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKIAogI2luY2x1ZGUgIldl
YkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMQnVmZmVyOjpjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTEJ1ZmZl
cjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYkdMQnVmZmVyKGN0eCkpOwogfQogCi1XZWJHTEJ1ZmZlcjo6V2ViR0xC
dWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTEJ1ZmZlcjo6V2ViR0xCdWZm
ZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmpl
Y3QoY3R4KQogICAgICwgbV90YXJnZXQoMCkKICAgICAsIG1fYnl0ZUxlbmd0aCgwKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCShyZXZpc2lvbiAxNzgzNzIp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFdlYkdMQnVmZmVyIGZpbmFsIDogcHVibGljIFdl
YkdMU2gKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTEJ1ZmZlcigpOwogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqKTsKIAogICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyRGF0YShHQzNEc2l6ZWlw
dHIgc2l6ZSk7CiAgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhKEpTQzo6QXJyYXlCdWZmZXIq
KTsKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXZlckJlZW5Cb3VuZCgp
IGNvbnN0IHsgcmV0dXJuIG9iamVjdCgpICYmIG1fdGFyZ2V0OyB9CiAKIHByb3RlY3RlZDoKLSAg
ICBXZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBXZWJHTEJ1ZmZlcihX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDLmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OldlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiAgICAgY29udGV4dC0+YWRkQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EKTsKQEAgLTUw
LDcgKzUwLDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xDb21wcgogICAg
IHJldHVybiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDTmFtZTsKIH0KIAotYm9vbCBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQorYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lv
bnMgPSBjb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CiAgICAg
cmV0dXJuIGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVy
ZSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVBVEMuaAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMCArMzQsMTAgQEAgY2xhc3MgV2ViR0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOworICAgIGV4cGxpY2l0IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1
cmVBVEMoKTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlk
ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJKHJldmlzaW9uIDE3ODM3MikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6V2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBX
ZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogICAgIGNvbnRleHQtPmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyk7
CkBAIC01Miw3ICs1Miw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMQ29t
cHIKICAgICByZXR1cm4gV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDTmFtZTsKIH0KIAotYm9v
bCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCitib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9y
dGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9u
czNEKiBleHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5z
aW9ucygpOwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfSU1HX3RleHR1cmVf
Y29tcHJlc3Npb25fcHZydGMiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oCShyZXZpc2lvbiAxNzgz
NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDIGZpbmFsIDogcHVibGlj
IFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2
aXJ0dWFsIH5XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMoKTsKIAotICAgIHN0YXRpYyBib29s
IHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBw
b3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgRXh0ZW5zaW9u
TmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMu
Y3BwCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwx
MSBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCiAKICNpbmNsdWRl
ICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKICAgICBjb250
ZXh0LT5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQpOwpAQCAtNTIsNyArNTIsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0
ZW5zaW9uTmFtZSBXZWJHTENvbXByCiAgICAgcmV0dXJuIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDTmFtZTsKIH0KIAotYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVk
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQog
ewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4
dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKICAgICByZXR1cm4gZXh0ZW5zaW9ucy0+c3VwcG9ydHMo
IkdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGMiKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oCShy
ZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgY2xh
c3MgV2ViR0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGlj
aXQgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSop
OwogICAgIHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKCk7CiAKLSAgICBzdGF0
aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJv
b2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwg
RXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAkocmV2aXNp
b24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3Jv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViR0xD
b250ZXh0R3JvdXAuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTUzLDE2ICs1MywxNiBAQCBXZWJHTENvbnRleHRHcm91cDo6fldlYkdMQ29u
dGV4dEdyb3VwKCkKIEdyYXBoaWNzQ29udGV4dDNEKiBXZWJHTENvbnRleHRHcm91cDo6Z2V0QUdy
YXBoaWNzQ29udGV4dDNEKCkKIHsKICAgICBBU1NFUlQoIW1fY29udGV4dHMuaXNFbXB0eSgpKTsK
LSAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+OjppdGVyYXRvciBpdCA9IG1fY29u
dGV4dHMuYmVnaW4oKTsKKyAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqPjo6
aXRlcmF0b3IgaXQgPSBtX2NvbnRleHRzLmJlZ2luKCk7CiAgICAgcmV0dXJuICgqaXQpLT5ncmFw
aGljc0NvbnRleHQzRCgpOwogfQogCi12b2lkIFdlYkdMQ29udGV4dEdyb3VwOjphZGRDb250ZXh0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6
OmFkZENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBt
X2NvbnRleHRzLmFkZChjb250ZXh0KTsKIH0KIAotdm9pZCBXZWJHTENvbnRleHRHcm91cDo6cmVt
b3ZlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIFdlYkdMQ29u
dGV4dEdyb3VwOjpyZW1vdmVDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRl
eHQpCiB7CiAgICAgLy8gV2UgbXVzdCBjYWxsIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMgYmVm
b3JlIHJlbW92aW5nIHRoZSBsYXN0IGNvbnRleHQuCiAgICAgaWYgKG1fY29udGV4dHMuc2l6ZSgp
ID09IDEgJiYgbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKQEAgLTg5LDkgKzg5LDkgQEAg
dm9pZCBXZWJHTENvbnRleHRHcm91cDo6ZGV0YWNoQW5kUmVtb3ZlQQogICAgIH0KIH0KIAotdm9p
ZCBXZWJHTENvbnRleHRHcm91cDo6bG9zZUNvbnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQordm9pZCBXZWJHTENvbnRleHRHcm91cDo6bG9zZUNv
bnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9k
ZSkKIHsKLSAgICBmb3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9y
IGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQor
ICAgIGZvciAoSGFzaFNldDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj46Oml0ZXJhdG9yIGl0
ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQogICAg
ICAgICAoKml0KS0+bG9zZUNvbnRleHRJbXBsKG1vZGUpOwogCiAgICAgZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250
ZXh0R3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbnRleHRHcm91cC5oCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaWZuZGVmIFdlYkdMQ29udGV4dEdyb3VwX2gKICNkZWZpbmUgV2ViR0xDb250ZXh0R3Jv
dXBfaAogCi0jaW5jbHVkZSA8V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAt
MzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKIGNsYXNzIFdlYkdMRXh0ZW5zaW9uOwogY2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7Ci1jbGFz
cyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC00NSwxNSArNDUsMTUgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjcmVhdGUoKTsK
ICAgICB+V2ViR0xDb250ZXh0R3JvdXAoKTsKIAotICAgIHZvaWQgYWRkQ29udGV4dChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgdm9pZCBhZGRDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwog
CiAgICAgdm9pZCBhZGRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKICAgICB2b2lkIHJlbW92
ZU9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdl
dEFHcmFwaGljc0NvbnRleHQzRCgpOwogCi0gICAgdm9pZCBsb3NlQ29udGV4dEdyb3VwKFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlKTsKKyAgICB2b2lkIGxvc2VDb250ZXh0
R3JvdXAoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlKTsKIAogICBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKQEAgLTYyLDcgKzYyLDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CiAKLSAgICBI
YXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+IG1fY29udGV4dHM7CisgICAgSGFzaFNldDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4gbV9jb250ZXh0czsKICAgICBIYXNoU2V0PFdlYkdM
U2hhcmVkT2JqZWN0Kj4gbV9ncm91cE9iamVjdHM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAJKHJldmlzaW9uIDE3
ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiV2ViR0xD
b250ZXh0T2JqZWN0LmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQorV2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmpl
Y3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMT2JqZWN0
KGNvbnRleHQpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCShyZXZpc2lvbiAxNzgz
NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIC8vIFdlYkdMQ29udGV4dE9iamVjdCB0
aGUgYmFzZSBjbGFzcyBmb3Igb2JqZWN0cyB0aGF0IGFyZSBvd25lZCBieSBhIHNwZWNpZmljCiAv
LyBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCkBAIC0zOSw5ICszOSw5IEBAIGNsYXNzIFdlYkdMQ29u
dGV4dE9iamVjdCA6IHB1YmxpYyBXZWJHTE8KIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTENv
bnRleHRPYmplY3QoKTsKIAotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAotICAgIHZpcnR1YWwgYm9v
bCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRh
dGUoY29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbnRl
eHQgPT0gbV9jb250ZXh0OwogICAgIH0KQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZGV0YWNoQ29udGV4dCgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xDb250ZXh0T2JqZWN0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdMQ29udGV4dE9iamVjdChXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzR3JvdXBPckNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZQogICAgIHsKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9j
b250ZXh0OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwCShyZXZpc2lvbiAxNzgzNzIp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAKICNpbmNsdWRlICJXZWJHTERl
YnVnUmVuZGVyZXJJbmZvLmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQp
CiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaAkocmV2aXNp
b24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgVU5NQVNLRURfUkVOREVSRVJfV0VCR0wgPSAweDkyNDYKICAgICB9OwogCi0gICAgZXhwbGlj
aXQgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBl
eHBsaWNpdCBXZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKICAgICB2aXJ0dWFsIH5XZWJHTERlYnVnUmVuZGVyZXJJbmZvKCk7CiAKICAgICB2aXJ0dWFs
IEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcAkocmV2aXNpb24g
MTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlICJXZWJHTERl
YnVnU2hhZGVycy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V2ViR0xEZWJ1Z1NoYWRlcnM6OldlYkdMRGVidWdTaGFkZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK1dlYkdMRGVidWdTaGFkZXJzOjpXZWJHTERlYnVnU2hhZGVycyhXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4
dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFk
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1
Z1NoYWRlcnMuaAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBXZWJHTERlYnVnU2hhZGVycyBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xE
ZWJ1Z1NoYWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xE
ZWJ1Z1NoYWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldl
YkdMRGVidWdTaGFkZXJzKCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgp
IGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xE
ZXB0aFRleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRGVwdGhUZXh0dXJlLmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xEZXB0aFRleHR1cmU6
OldlYkdMRGVwdGhUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdM
RGVwdGhUZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaAkocmV2aXNp
b24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9u
IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xEZXB0aFRleHR1cmUoKTsKIAogICAg
IHN0YXRpYyBib29sIHN1cHBvcnRlZChHcmFwaGljc0NvbnRleHQzRCopOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAJKHJldmlzaW9u
IDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xEcmF3QnVmZmVyczo6V2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCitXZWJHTERyYXdCdWZmZXJzOjpXZWJHTERyYXdCdWZmZXJzKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250
ZXh0KQogewogfQpAQCAtNDgsMTQgKzQ4LDE0IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25O
YW1lIFdlYkdMRHJhd0IKIAogI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPCAxMDEwMDApCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9y
dGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopCitib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKICNlbHNlCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBl
eHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygp
OwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX2RyYXdfYnVmZmVycyIp
CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgV2ViR0xEcmF3QnVmZmVyczo6ZHJhd0J1ZmZlcnNXRUJH
TCgKIH0KIAogLy8gc3RhdGljCi1ib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnNhdGlzZmllc1dlYkdM
UmVxdWlyZW1lbnRzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogd2ViZ2xDb250ZXh0KQorYm9vbCBX
ZWJHTERyYXdCdWZmZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiB3ZWJnbENvbnRleHQpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSB3ZWJnbENvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmgJKHJldmlzaW9uIDE3
ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgV2ViR0xEcmF3QnVmZmVycyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTERyYXdCdWZmZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5XZWJHTERyYXdCdWZmZXJzKCk7CiAKLSAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wg
c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgRXh0
ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdCdWZm
ZXJzV0VCR0woY29uc3QgVmVjdG9yPEdDM0RlbnVtPiYgYnVmZmVycyk7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIGJvb2wgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmNwcAko
cmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRl
bnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotV2ViR0xFeHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK1dlYkdMRXh0ZW5zaW9uOjpXZWJHTEV4dGVuc2lvbihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmgJ
KHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0
ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViR0xF
eHRlbnNpb25faAogI2RlZmluZSBXZWJHTEV4dGVuc2lvbl9oCiAKLSNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsMTQgKzYwLDE0IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgcmVmKCkgeyBtX2NvbnRleHQtPnJlZigpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsg
bV9jb250ZXh0LT5kZXJlZigpOyB9Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSog
Y29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogCiAgICAgdmlydHVhbCB+V2ViR0xFeHRl
bnNpb24oKTsKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0ID0gMDsK
IAogcHJvdGVjdGVkOgotICAgIFdlYkdMRXh0ZW5zaW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OworICAgIFdlYkdMRXh0ZW5z
aW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2
aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldl
YkdMRHJhd0J1ZmZlcnMuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMjY5LDEyICsyNjksMTIgQEAgV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xBdHRhY2ht
ZW50Ojp+V2ViRwogewogfQogCi1QYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMRnJh
bWVidWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKK1Bhc3NSZWZQdHI8
V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMRnJhbWVi
dWZmZXIoY3R4KSk7CiB9CiAKLVdlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVm
ZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKICAgICA6IFdlYkdMQ29udGV4dE9i
amVjdChjdHgpCiAgICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAx
NzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+
V2ViR0xGcmFtZWJ1ZmZlcigpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAKICAgICB2b2lkIHNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0
dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZl
bCk7CiAgICAgdm9pZCBzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBh
dHRhY2htZW50LCBXZWJHTFJlbmRlcmJ1ZmZlciopOwpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1Ymxp
YzoKICAgICBHQzNEZW51bSBnZXREcmF3QnVmZmVyKEdDM0RlbnVtKTsKIAogcHJvdGVjdGVkOgot
ICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgV2ViR0xG
cmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTExvc2VD
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TExvc2VDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xMb3NlQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsy
OSwxMSBAQAogCiAjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMTG9zZUNvbnRleHQ6OldlYkdMTG9z
ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorV2ViR0xMb3NlQ29udGV4
dDo6V2ViR0xMb3NlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQog
ICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KQEAgLTQ5LDcgKzQ5LDcgQEAgV2Vi
R0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xMb3NlQwogCiB2b2lkIFdlYkdMTG9zZUNv
bnRleHQ6Omxvc2VDb250ZXh0KCkKIHsKLSAgICBtX2NvbnRleHQtPmZvcmNlTG9zdENvbnRleHQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpTeW50aGV0aWNMb3N0Q29udGV4dCk7CisgICAgbV9jb250
ZXh0LT5mb3JjZUxvc3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlN5bnRoZXRp
Y0xvc3RDb250ZXh0KTsKIH0KIAogdm9pZCBXZWJHTExvc2VDb250ZXh0OjpyZXN0b3JlQ29udGV4
dCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29udGV4
dC5oCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TExvc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIFdlYkdMTG9zZUNvbnRleHQgZmluYWwg
OiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMTG9z
ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xMb3Nl
Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xM
b3NlQ29udGV4dCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25z
dCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVj
dC5jcHAJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDExIEBACiAjaW5jbHVk
ZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgogI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJz
LmgiCiAjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTE9iamVjdDo6V2ViR0xPYmplY3QoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KikKK1dlYkdMT2JqZWN0OjpXZWJHTE9iamVjdChXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKikKICAgICA6IG1fb2JqZWN0KDApCiAgICAgLCBtX2F0dGFjaG1lbnRDb3VudCgw
KQogICAgICwgbV9kZWxldGVkKGZhbHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTE9iamVjdC5oCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBXZWJH
TENvbnRleHRHcm91cDsKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIFdlYkdMT2JqZWN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViR0xPYmplY3Q+IHsKIHB1YmxpYzoKQEAgLTU2LDEwICs1NiwxMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0RlbGV0ZWQoKSB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KIAogICAgIC8vIFRy
dWUgaWYgdGhpcyBvYmplY3QgYmVsb25ncyB0byB0aGUgZ3JvdXAgb3IgY29udGV4dC4KLSAgICB2
aXJ0dWFsIGJvb2wgdmFsaWRhdGUoY29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHZhbGlkYXRl
KGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwgY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopIGNvbnN0ID0gMDsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMT2JqZWN0KFdlYkdMUmVuZGVy
aW5nQ29udGV4dCopOworICAgIFdlYkdMT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKIAogICAgIC8vIHNldE9iamVjdCBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSByaWdodCBh
ZnRlciBjcmVhdGluZyBhIFdlYkdMT2JqZWN0LgogICAgIHZvaWQgc2V0T2JqZWN0KFBsYXRmb3Jt
M0RPYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dy
YW0uY3BwCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNiArMzAsMTYgQEAKICNpbmNs
dWRlICJXZWJHTFByb2dyYW0uaCIKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0j
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2Vi
R0xQcm9ncmFtPiBXZWJHTFByb2dyYW06OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKK1Bhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFByb2dyYW06OmNyZWF0ZShXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJH
TFByb2dyYW0oY3R4KSk7CiB9CiAKLVdlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4KQorV2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAg
ICwgbV9saW5rU3RhdHVzKGZhbHNlKQogICAgICwgbV9saW5rQ291bnQoMCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiAxNzgzNzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBXZWJHTFByb2dyYW0gZmluYWwgOiBwdWJsaWMgV2Vi
R0xTCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xQcm9ncmFtKCk7CiAKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAKICAgICB1bnNpZ25lZCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KTsKICAgICBHQzNEaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKEdDM0R1aW50IGluZGV4KTsK
QEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIGJvb2wgZGV0YWNoU2hhZGVyKFdlYkdMU2hh
ZGVyKik7CiAKIHByb3RlY3RlZDoKLSAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250
ZXh0Kik7CisgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxh
dGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3ODM3MikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIK
IAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdM
UmVuZGVyYnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVm
UHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdM
UmVuZGVyYnVmZmVyKGN0eCkpOwogfQpAQCAtNDQsNyArNDQsNyBAQCBXZWJHTFJlbmRlcmJ1ZmZl
cjo6fldlYkdMUmVuZGVyYnVmZmVyKCkKICAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAKLVdlYkdM
UmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKK1dlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX2lu
dGVybmFsRm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNCkKICAgICAsIG1faW5pdGlhbGl6
ZWQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyYnVmZmVyLmgJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
Y2xhc3MgV2ViR0xSZW5kZXJidWZmZXIgZmluYWwgOiBwdWJsaWMgVwogcHVibGljOgogICAgIHZp
cnR1YWwgfldlYkdMUmVuZGVyYnVmZmVyKCk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJH
TFJlbmRlcmJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogCiAgICAgdm9pZCBzZXRJbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCkKICAgICB7CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhh
c0V2ZXJCZWVuQm91bmQoKSB7IG1faGFzRXZlckJlZW5Cb3VuZCA9IHRydWU7IH0KIAogcHJvdGVj
dGVkOgotICAgIFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAg
IFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0z
RE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2MzM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdFQkdMKQotCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0K
LSNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdl
LmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJFWFRCbGVuZE1pbk1heC5oIgotI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgotI2luY2x1
ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKLSNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuaCIKLSNpbmNsdWRlICJFWFRzUkdCLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3Rh
bmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1
ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxv
YXQuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAi
T0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJXZWJHTEFjdGl2ZUlu
Zm8uaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIK
LSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgotI2luY2x1ZGUgIldlYkdM
Q29udGV4dEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5oIgotI2lu
Y2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVy
SW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xE
ZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAi
V2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNs
dWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIldlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQuaCIKLSNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTFVuaWZvcm1M
b2NhdGlvbi5oIgotCi0jaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJy
YXkuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1w
dHMgPSAxLjA7Ci1jb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2Owot
Ci1uYW1lc3BhY2UgewotCi0gICAgY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciB7Ci0g
ICAgcHVibGljOgotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKERyYXdpbmdCdWZm
ZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyQmluZGluZykK
LSAgICAgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCi0gICAgICAgICAg
ICAsIG1fZnJhbWVidWZmZXJCaW5kaW5nKGZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3Ig
bXVsdGlzYW1wbGluZykKLSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQK
LSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgICAgICB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7Ci0g
ICAgICAgIFdlYkdMRnJhbWVidWZmZXIqIG1fZnJhbWVidWZmZXJCaW5kaW5nOwotICAgIH07Ci0K
LSAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwotICAg
IH0KLQotICAgIHZvaWQgY2xpcDFEKEdDM0RpbnQgc3RhcnQsIEdDM0RzaXplaSByYW5nZSwgR0Mz
RHNpemVpIHNvdXJjZVJhbmdlLCBHQzNEaW50KiBjbGlwcGVkU3RhcnQsIEdDM0RzaXplaSogY2xp
cHBlZFJhbmdlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlwcGVk
UmFuZ2UpOwotICAgICAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgICAgICByYW5nZSArPSBz
dGFydDsKLSAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICAgICAgfQotICAgICAgICBHQzNEaW50
IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7Ci0gICAgICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkKLSAg
ICAgICAgICAgIHJhbmdlIC09IGVuZCAtIHNvdXJjZVJhbmdlOwotICAgICAgICAqY2xpcHBlZFN0
YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXR1cm5zIGZhbHNlIGlmIG5vIGNsaXBwaW5nIGlzIG5lY2Vzc2FyeSwgaS5lLiwgeCwg
eSwgd2lkdGgsIGhlaWdodCBzdGF5IHRoZSBzYW1lLgotICAgIGJvb2wgY2xpcDJEKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0LAot
ICAgICAgICAgICAgICAgIEdDM0RpbnQqIGNsaXBwZWRYLCBHQzNEaW50KiBjbGlwcGVkWSwgR0Mz
RHNpemVpKiBjbGlwcGVkV2lkdGgsIEdDM0RzaXplaSpjbGlwcGVkSGVpZ2h0KQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBwZWRZICYmIGNsaXBwZWRXaWR0aCAmJiBjbGlw
cGVkSGVpZ2h0KTsKLSAgICAgICAgY2xpcDFEKHgsIHdpZHRoLCBzb3VyY2VXaWR0aCwgY2xpcHBl
ZFgsIGNsaXBwZWRXaWR0aCk7Ci0gICAgICAgIGNsaXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhlaWdo
dCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICByZXR1cm4gKCpjbGlwcGVkWCAh
PSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlwcGVkV2lkdGggIT0gd2lkdGggfHwgKmNsaXBw
ZWRIZWlnaHQgIT0gaGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBHQzNEaW50IGNsYW1wKEdDM0RpbnQg
dmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZSA8IG1pbikKLSAgICAgICAgICAgIHZhbHVlID0gbWluOwotICAgICAgICBpZiAodmFsdWUgPiBt
YXgpCi0gICAgICAgICAgICB2YWx1ZSA9IG1heDsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLQotICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhlIEFT
Q0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCi0gICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9u
IDMuMS4KLSAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKLSAgICB7
Ci0gICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQgYCBA
IFwgJyBERUwuCi0gICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2Ci0gICAgICAgICAgICAm
JiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9ICdc
XCcgJiYgYyAhPSAnXCcnKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIC8vIEhv
cml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJyaWFn
ZSByZXR1cm4KLSAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCi0gICAgICAgIGlmIChjID49IDkg
JiYgYyA8PSAxMykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ByZWZpeFJlc2VydmVkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImdsXyIpIHx8IG5hbWUuc3Rh
cnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJfd2ViZ2xfIikpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFN0cmlwcyBjb21tZW50cyBmcm9tIHNoYWRlciB0ZXh0LiBUaGlzIGFsbG93cyBub24tQVNDSUkg
Y2hhcmFjdGVycwotICAgIC8vIHRvIGJlIHVzZWQgaW4gY29tbWVudHMgd2l0aG91dCBwb3RlbnRp
YWxseSBicmVha2luZyBPcGVuR0wKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVjdGlu
ZyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgotICAgIGNsYXNzIFN0cmlwQ29t
bWVudHMgewotICAgIHB1YmxpYzoKLSAgICAgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJpbmcm
IHN0cikKLSAgICAgICAgICAgIDogbV9wYXJzZVN0YXRlKEJlZ2lubmluZ09mTGluZSkKLSAgICAg
ICAgICAgICwgbV9zb3VyY2VTdHJpbmcoc3RyKQotICAgICAgICAgICAgLCBtX2xlbmd0aChzdHIu
bGVuZ3RoKCkpCi0gICAgICAgICAgICAsIG1fcG9zaXRpb24oMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcGFyc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyByZXN1bHQoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAg
IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHBhcnNlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgd2hpbGUgKGhhc01vcmVDaGFyYWN0ZXJzKCkpIHsKLSAgICAgICAgICAgICAgICBwcm9jZXNz
KGN1cnJlbnQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcHJvY2VzcygpIG1pZ2h0IGFkdmFuY2Ug
dGhlIHBvc2l0aW9uLgotICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlQ2hhcmFjdGVycygpKQot
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHByb2Nlc3MoVUNoYXIpOwotCi0gICAgICAgIGJvb2wgcGVlayhVQ2hh
ciYgY2hhcmFjdGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9wb3NpdGlv
biArIDEgPj0gbV9sZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBVQ2hhciBjdXJyZW50KCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04obV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NvdXJj
ZVN0cmluZ1ttX3Bvc2l0aW9uXTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYWR2YW5jZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxpemUgbmV3bGluZSByZWxhdGVk
IGNoYXJhY3RlcnMuCi0gICAgICAgICAgICByZXR1cm4gKGNoYXJhY3RlciA9PSAnXG4nIHx8IGNo
YXJhY3RlciA9PSAnXHInKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZW1pdChVQ2hhciBj
aGFyYWN0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoY2hhcmFj
dGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudW0gUGFyc2VTdGF0ZSB7Ci0gICAgICAgICAg
ICAvLyBIYXZlIG5vdCBzZWVuIGFuIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB5ZXQg
b24KLSAgICAgICAgICAgIC8vIHRoaXMgbGluZS4gUG9zc2libGUgdGhhdCB3ZSBtaWdodCBzZWUg
YSBwcmVwcm9jZXNzb3IKLSAgICAgICAgICAgIC8vIGRpcmVjdGl2ZS4KLSAgICAgICAgICAgIEJl
Z2lubmluZ09mTGluZSwKLQotICAgICAgICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9uZSBB
U0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIKLSAgICAgICAgICAgIC8vIG9uIHRoaXMgbGlu
ZS4KLSAgICAgICAgICAgIE1pZGRsZU9mTGluZSwKLQotICAgICAgICAgICAgLy8gSGFuZGxpbmcg
YSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBQYXNzZXMgdGhyb3VnaCBhbGwKLSAgICAgICAgICAg
IC8vIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRGlzYWJsZXMgY29tbWVu
dAotICAgICAgICAgICAgLy8gcHJvY2Vzc2luZy4KLSAgICAgICAgICAgIEluUHJlcHJvY2Vzc29y
RGlyZWN0aXZlLAotCi0gICAgICAgICAgICAvLyBIYW5kbGluZyBhIHNpbmdsZS1saW5lIGNvbW1l
bnQuIFRoZSBjb21tZW50IHRleHQgaXMKLSAgICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGggYSBz
aW5nbGUgc3BhY2UuCi0gICAgICAgICAgICBJblNpbmdsZUxpbmVDb21tZW50LAotCi0gICAgICAg
ICAgICAvLyBIYW5kbGluZyBhIG11bHRpLWxpbmUgY29tbWVudC4gTmV3bGluZXMgYXJlIHBhc3Nl
ZAotICAgICAgICAgICAgLy8gdGhyb3VnaCB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCi0gICAg
ICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKLSAgICAgICAgfTsKLQotICAgICAgICBQYXJzZVN0
YXRlIG1fcGFyc2VTdGF0ZTsKLSAgICAgICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOwotICAgICAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKLSAgICAg
ICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7Ci0gICAgfTsKLQotICAgIHZvaWQgU3RyaXBDb21t
ZW50czo6cHJvY2VzcyhVQ2hhciBjKQotICAgIHsKLSAgICAgICAgaWYgKGlzTmV3bGluZShjKSkg
ewotICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgc3RhdGUgd2UgYXJlIGluLCBwYXNzIHRo
cm91Z2ggbmV3bGluZXMKLSAgICAgICAgICAgIC8vIHNvIHdlIHByZXNlcnZlIGxpbmUgbnVtYmVy
cy4KLSAgICAgICAgICAgIGVtaXQoYyk7Ci0KLSAgICAgICAgICAgIGlmIChtX3BhcnNlU3RhdGUg
IT0gSW5NdWx0aUxpbmVDb21tZW50KQotICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEJl
Z2lubmluZ09mTGluZTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgVUNoYXIgdGVtcCA9IDA7Ci0gICAgICAgIHN3aXRjaCAobV9wYXJzZVN0YXRlKSB7Ci0gICAg
ICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgotICAgICAgICAgICAgaWYgKFdURjo6aXNBU0NJSVNw
YWNlKGMpKSB7Ci0gICAgICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGMgPT0gJyMnKSB7Ci0gICAgICAg
ICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7Ci0gICAgICAg
ICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhhbmRs
ZSBjaGFyYWN0ZXIuCi0gICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7Ci0g
ICAgICAgICAgICBwcm9jZXNzKGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBNaWRkbGVPZkxpbmU6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1wKSkg
ewotICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgewotICAgICAgICAgICAgICAgICAg
ICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OwotICAgICAgICAgICAgICAgICAg
ICBlbWl0KCcgJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHRlbXAgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluTXVs
dGlMaW5lQ29tbWVudDsKLSAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgY29tbWVudCBz
dGFydCBpbiBjYXNlIHRoZSB1c2VyIGhhcwotICAgICAgICAgICAgICAgICAgICAvLyBhbiB1bmNs
b3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCi0gICAgICAgICAgICAgICAgICAgIC8v
IHNpZ25hbCBhbiBlcnJvci4KLSAgICAgICAgICAgICAgICAgICAgZW1pdCgnLycpOwotICAgICAg
ICAgICAgICAgICAgICBlbWl0KCcqJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBlbWl0KGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKLSAgICAgICAgICAgIC8vIE5vIG1hdHRl
ciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBpdAotICAgICAgICAgICAgLy8gdGhy
b3VnaC4gRG8gbm90IHBhcnNlIGNvbW1lbnRzIGluIHRoaXMgc3RhdGUuIFRoaXMKLSAgICAgICAg
ICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gbG9uZyB0ZXJtLCBidXQg
aXQKLSAgICAgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNlcnJvciBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlLgotICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKLSAgICAgICAgICAgIC8vIFRoZSBuZXds
aW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUKLSAgICAgICAg
ICAgIC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBnZXQgb3V0IG9mIHRoZQotICAg
ICAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxvdyBhbGwgb3RoZXIgY2hhcmFj
dGVycy4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5NdWx0aUxpbmVDb21t
ZW50OgotICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9PSAn
LycpIHsKLSAgICAgICAgICAgICAgICBlbWl0KCcqJyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgn
LycpOwotICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKLSAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuIFVuY2xl
YXIgd2hldGhlciB3ZSBtYXkKLSAgICAgICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0IGVt
aXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQotICAgICAgICAgICAgLy8gdG8gcHJlc2Vy
dmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCi0KLWNsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0NvbnRl
eHQzRDo6Q29udGV4dExvc3RDYWxsYmFjayB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNr
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNiKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlIHsgbV9jb250ZXh0LT5mb3JjZUxvc3RD
b250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6UmVhbExvc3RDb250ZXh0KTsgfQotICAgIHZp
cnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaygpIHt9Ci1wcml2YXRlOgot
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwotfTsKLQotY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3Nh
Z2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
R0MzRGludCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPm1fc3ludGhl
c2l6ZWRFcnJvcnNUb0NvbnNvbGUpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnByaW50R0xFcnJv
clRvQ29uc29sZShtZXNzYWdlKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdD
b250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0KLXByaXZhdGU6Ci0gICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7Ci19OwotCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKiBhdHRycykKLXsKLSAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlvbiBv
ZiBhIG5ldyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCi0gICAg
Ly8gcGFydGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3JlIHRp
bWVzIHZpYSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgotICAgIGlmICghZnJhbWUt
PmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xFbmFi
bGVkKCkpKSB7Ci0gICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZh
bHNlLCB0cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdMIGNv
bnRleHQuIikpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBib29sIGlz
UGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxzZTsKLSAgICBEb2N1bWVudCYgdG9wRG9jdW1l
bnQgPSBkb2N1bWVudC50b3BEb2N1bWVudCgpOwotICAgIFBhZ2UqIHBhZ2UgPSB0b3BEb2N1bWVu
dC5wYWdlKCk7Ci0gICAgaWYgKHBhZ2UgJiYgIXRvcERvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxl
KCkpIHsKLSAgICAgICAgV2ViR0xMb2FkUG9saWN5IHBvbGljeSA9IHBhZ2UtPm1haW5GcmFtZSgp
LmxvYWRlcigpLmNsaWVudCgpLndlYkdMUG9saWN5Rm9yVVJMKHRvcERvY3VtZW50LnVybCgpKTsK
LQotICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikgewotICAgICAgICAg
ICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBpcyB0byBibG9jayBX
ZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwb2xpY3kgPT0g
V2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIldlYkdMIHBv
bGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRlci4iKTsKLSAgICAg
ICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGF0dHJz
ID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCk7
Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+
c2V0dGluZ3MoKS5vcGVuR0xNdWx0aXNhbXBsaW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgYXR0
cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBhdHRyaWJ1dGVzLm5vRXh0
ZW5zaW9ucyA9IHRydWU7Ci0gICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOwot
ICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB0cnVlOwotCi0gICAgaWYgKGZyYW1l
LT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVXZWJHTFJlbmRlcmluZygpKQotICAgICAgICBhdHRy
aWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5kZXJlciA9IHRydWU7Ci0KLSAgICBpZiAocGFnZSkKLSAg
ICAgICAgYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvID0gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKTsKLQotICAgIGlmIChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIExP
RyhXZWJHTCwgIkNyZWF0ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQgd2ls
bCByZXF1aXJlIGEgcG9saWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKLSAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOwotICAgICAgICByZW5kZXJp
bmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmluZ0Nv
bnRleHQ7Ci0gICAgfQotCi0gICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50LnZp
ZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCk7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRv
dykpOwotCi0gICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkgewotICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxzZSwg
dHJ1ZSwgIkNvdWxkIG5vdCBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xf
RVhUX2RlYnVnX21hcmtlciIpKQotICAgICAgICBleHRlbnNpb25zLT5wdXNoR3JvdXBNYXJrZXJF
WFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
UmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOwotICAgIHJlbmRlcmluZ0NvbnRleHQt
PnN1c3BlbmRJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Ci19Ci0K
LVdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNF
bGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKLSAgICAs
IEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFzLT5kb2N1bWVudCgpKQotICAgICwgbV9jb250
ZXh0KDApCi0gICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKLSAgICAsIG1fZGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNoQ29u
dGV4dExvc3RFdmVudCkKLSAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCi0gICAgLCBtX3Jl
c3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29u
dGV4dCkKLSAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQotICAgICwgbV9jb250ZXh0TG9z
dChmYWxzZSkKLSAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQot
ICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgLCBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlKHRydWUpCi0gICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZChtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCi0gICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24odHJ1ZSkKLSAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKLXsK
LX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENh
bnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQot
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCi0gICAgLCBBY3RpdmVE
T01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fY29udGV4dChjb250
ZXh0KQotICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCi0gICAgLCBtX2Rpc3BhdGNoQ29udGV4dExv
c3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRl
eHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQotICAgICwgbV9yZXN0
b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRl
eHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoNCkKLSAgICAsIG1fY29udGV4dExvc3Qo
ZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAg
ICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9zeW50aGVzaXplZEVycm9yc1Rv
Q29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4R0xF
cnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KGZhbHNlKQotICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQotewot
ICAgIEFTU0VSVChtX2NvbnRleHQpOwotICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250ZXh0
R3JvdXA6OmNyZWF0ZSgpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMpOwot
Ci0gICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0RGltc1sxXSA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JU
X0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotCi0gICAgc2V0dXBGbGFncygpOwotICAg
IGluaXRpYWxpemVOZXdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0KTsK
LSAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFs
c2U7Ci0gICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7Ci0gICAgbV9wYWNrQWxpZ25tZW50ID0g
NDsKLSAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbV91bnBhY2tGbGlwWSA9IGZhbHNl
OwotICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOwotICAgIG1fdW5wYWNrQ29s
b3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dF
QkdMOwotICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7Ci0gICAgbV9jdXJyZW50UHJvZ3JhbSA9
IDA7Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgIG1fcmVuZGVyYnVmZmVyQmlu
ZGluZyA9IDA7Ci0gICAgbV9kZXB0aE1hc2sgPSB0cnVlOwotICAgIG1fc3RlbmNpbEVuYWJsZWQg
PSBmYWxzZTsKLSAgICBtX3N0ZW5jaWxNYXNrID0gMHhGRkZGRkZGRjsKLSAgICBtX3N0ZW5jaWxN
YXNrQmFjayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsRnVuY1JlZiA9IDA7Ci0gICAgbV9z
dGVuY2lsRnVuY1JlZkJhY2sgPSAwOwotICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZGRkZG
RjsKLSAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAweEZGRkZGRkZGOwotICAgIG1fbGF5ZXJD
bGVhcmVkID0gZmFsc2U7Ci0gICAgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7Ci0gICAgCi0gICAgbV9jbGVhckNvbG9yWzBdID0gbV9j
bGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsKLSAg
ICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgbV9jbGVhckRlcHRoID0gMTsKLSAgICBt
X2NsZWFyU3RlbmNpbCA9IDA7Ci0gICAgbV9jb2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9
IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOwotCi0gICAgR0MzRGludCBu
dW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywg
Jm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIG1fdGV4dHVyZVVuaXRzLmNsZWFy
KCk7Ci0gICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpOwotCi0gICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZudW1W
ZXJ0ZXhBdHRyaWJzKTsKLSAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJz
OwotICAgIAotICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVT
aXplKTsKLSAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVs
Q291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZSk7Ci0gICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21w
dXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4dHVy
ZVNpemUpOwotICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAmbV9t
YXhSZW5kZXJidWZmZXJTaXplKTsKLQotICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRf
ZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4KLSAgICBtX21heERyYXdCdWZmZXJzID0g
MDsKLSAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOwotCi0gICAgbV9iYWNrRHJhd0J1ZmZl
ciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOwotICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVp
cmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKLSAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gZmFs
c2U7Ci0KLSAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9UeXBl
RGVmYXVsdCk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVj
dC5nZXQoKSk7Ci0gICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4
QXJyYXlPYmplY3Q7Ci0gICAgCi0gICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9tYXhW
ZXJ0ZXhBdHRyaWJzKTsKLQotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxp
YW50KCkpCi0gICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7Ci0KLSAgICBJbnRTaXplIGNhbnZh
c1NpemUgPSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoY2FudmFzU2l6ZSk7Ci0KLSAgICBtX2NvbnRl
eHQtPnJlc2hhcGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKLSAg
ICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6
ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250ZXh0LT5zY2lzc29yKDAsIDAsIGNhbnZhc1NpemUud2lk
dGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBtX2NvbnRleHQtPnNldENvbnRleHRM
b3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2Fs
bGJhY2s+KHRoaXMpKTsKLSAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKHN0
ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s+
KHRoaXMpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3MoKQot
ewotICAgIEFTU0VSVChtX2NvbnRleHQpOwotCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMo
KS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNv
bGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwotCi0g
ICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7Ci0g
ICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fc3RyaWN0X2F0dHJpYnMiKTsK
LSAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5h
YmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOwotICAgIGlmIChtX2lzR0xFUzJDb21w
bGlhbnQpIHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7Ci0gICAgICAgIG1f
aXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNF
bmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5p
c0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28iKTsKLSAgICAgICAgbV9p
c0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0Vu
YWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIH0KLSAgICBtX2lzUm9i
dXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJs
ZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3QKLXsKLSAgICBpZiAoUGFnZSogcGFn
ZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIHBhZ2UtPnNl
dHRpbmdzKCkucHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb21wcmVzc2VkVGV4
dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgaWYgKCFtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQotICAgICAgICBtX2NvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+V2Vi
R0xSZW5kZXJpbmdDb250ZXh0KCkKLXsKLSAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8g
V2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRoZSBsYXN0IHJlZmVyZW5jZQotICAgIC8vIHRo
ZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxhc3QgY29udGV4dCBpcyByZW1vdmVkIGZyb20g
dGhlIGNvbnRleHQgZ3JvdXAuCi0gICAgbV9ib3VuZEFycmF5QnVmZmVyID0gbnVsbHB0cjsKLSAg
ICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBudWxs
cHRyOwotICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxscHRyOwotICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nID0gbnVsbHB0cjsKLSAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkg
ewotICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsK
LSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKLSAgICBtX2JsYWNr
VGV4dHVyZUN1YmVNYXAgPSBudWxscHRyOwotCi0gICAgaWYgKCFtX2lzUGVuZGluZ1BvbGljeVJl
c29sdXRpb24pIHsKLSAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwotICAgICAg
ICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLSAgICAgICAgbV9jb250ZXh0R3JvdXAtPnJl
bW92ZUNvbnRleHQodGhpcyk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xp
Y3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgZHJhd2luZyBidWZm
ZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAot
ICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KLSAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKLQotICAg
IGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENhbGxi
YWNrKG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQotewotICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5t
YXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+bWFya0NvbnRlbnRzQ2hhbmdlZCgpOwotCi0gICAgbV9sYXllckNs
ZWFyZWQgPSBmYWxzZTsKLSAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5k
ZXJCb3goKTsKLSAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiByZW5kZXJC
b3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewotICAgICAgICBtX21hcmtlZENhbnZh
c0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAg
ICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAgICAgICAgIG1f
bWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwotICAgICAgICAgICAgY2FudmFzKCktPmRpZERyYXco
RmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZDb21w
b3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9jb250ZXh0LT5sYXll
ckNvbXBvc2l0ZWQoKSB8fCBtX2xheWVyQ2xlYXJlZAotICAgICAgICB8fCBtX2F0dHJpYnV0ZXMu
cHJlc2VydmVEcmF3aW5nQnVmZmVyIHx8IChtYXNrICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXM+IGNvbnRleHRBdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIC8v
IERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2Vy
IGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KLSAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBtYXNr
ICYmICFtX3NjaXNzb3JFbmFibGVkOwotCi0gICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNr
ICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQotICAgICAgICBtX2NvbnRl
eHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29sb3Jb
MV0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0gPyBt
X2NsZWFyQ29sb3JbMl0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
ck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKLSAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzLT5kZXB0aCgpKSB7Ci0gICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0aE1h
c2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQotICAg
ICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOwotICAgICAgICBjbGVhck1hc2sg
fD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgICAgIG1fY29udGV4
dC0+ZGVwdGhNYXNrKHRydWUpOwotICAgIH0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPnN0
ZW5jaWwoKSkgewotICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgICAgICAgICAgbV9jb250ZXh0LT5j
bGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAgIGNsZWFy
TWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotICAgICAgICBt
X2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCAw
eEZGRkZGRkZGKTsKLSAgICB9Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVmZmVycyhjbGVhck1hc2spOwotICAgIGVsc2Ugewot
ICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwotICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7Ci0gICAgfQotCi0gICAgcmVzdG9yZVN0
YXRlQWZ0ZXJDbGVhcigpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBtX2xheWVy
Q2xlYXJlZCA9IHRydWU7Ci0KLSAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQotewotICAgIC8v
IFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgotICAgIGlmIChtX3NjaXNz
b3JFbmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNvbG9yWzBd
LCBtX2NsZWFyQ29sb3JbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJDb2xv
clsyXSwgbV9jbGVhckNvbG9yWzNdKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhtX2NvbG9y
TWFza1swXSwgbV9jb2xvck1hc2tbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
ck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgobV9j
bGVhckRlcHRoKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCk7
Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVCwgbV9zdGVuY2lsTWFzayk7Ci0gICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0aE1h
c2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0xheWVyQ29tcG9zaXRl
ZCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQotICAgICAgICBjYW52YXMoKS0+Y2xl
YXJQcmVzZW50YXRpb25Db3B5KCk7Ci0KLSAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlzIHdyaXR0
ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAotICAgIC8vIGhhcHBlbmVk
IGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21wb3Np
dG9yLgotICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFtX2F0dHJpYnV0
ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+cGFpbnRDb21w
b3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7Ci0KLSAgICAgICAgY2Fu
dmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbnZh
cygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwot
Ci0gICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAgICBtX21h
cmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBtX2RyYXdpbmdCdWZmZXIu
Z2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2RyYXdp
bmdCdWZmZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IGxldmVsIHdlIGRvbid0Ci0gICAgLy8ga25vdyBpZiB0aGUgdW5kZXJseWlu
ZyBGQk8gdXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgotICAgIEdDM0RpbnQgbWF4U2l6
ZSA9IHN0ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7Ci0g
ICAgLy8gTGltaXQgZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkgZXho
YXVzdGlvbi4KLSAgICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OwotICAgIG1heFNp
emUgPSBzdGQ6Om1pbihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7Ci0gICAgR0MzRGludCBtYXhX
aWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKLSAgICBHQzNE
aW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFdKTsK
LSAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7Ci0gICAgaGVpZ2h0ID0gY2xh
bXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOwotCi0gICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsKLSAg
ICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7Ci0gICAg
ICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkpCi0gICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0NoYW5nZWQp
OwotICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV2UgZG9u
J3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXdseSBjcmVh
dGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCi0gICAgLy8gY2xlYXIgKGFuZCB0
aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgotICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpIHsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKLSAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwotICAgIH0gZWxzZQotICAg
ICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8o
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQo
KSkpOwotICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKSk7
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9m
cmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKLXsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKLQotICAg
IHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsK
LX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIG1fZHJhd2lu
Z0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotdW5zaWduZWQgaW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNob3J0
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1aW50KTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihHQzNEZmxvYXQpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJl
VW5pdHMuc2l6ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2FjdGl2ZVRleHR1cmVVbml0
ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMDsKLSAgICBtX2NvbnRleHQt
PmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEFjdGl2ZVRleHR1cmVVbml0KHRleHR1cmUpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNoU2hh
ZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25BdHRhY2hlZCgp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0cmli
TG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVM
b2NhdGlvbkxlbmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
YmluZEF0dHJpYkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9i
amVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQotewotICAgIGRlbGV0ZWQgPSBmYWxzZTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKG9iamVjdCkgewotICAgICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdy
b3VwKCksIHRoaXMpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBub3QgZnJv
bSB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+b2JqZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmpl
Y3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0aCBt
dWx0aXBsZSB0YXJnZXRzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQotICAgICAgICBtX2JvdW5kQXJy
YXlCdWZmZXIgPSBidWZmZXI7Ci0gICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRC
dWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKLSAg
ICBpZiAoYnVmZmVyKQotICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNoZWNrT2JqZWN0
VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgaWYgKHRh
cmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRGcmFtZWJ1
ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
ZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKG9iamVjdE9yWmVy
byhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIEluc3RlYWQgb2YgYmluZGlu
ZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5iaW5kKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwotICAgIGlmIChidWZmZXIpCi0gICAgICAg
IGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwotICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBp
ZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVmZmVy
LCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBy
ZW5kZXJCdWZmZXIgPSAwOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJlbmRl
ckJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmplY3RP
clplcm8ocmVuZGVyQnVmZmVyKSk7Ci0gICAgaWYgKHJlbmRlckJ1ZmZlcikKLSAgICAgICAgcmVu
ZGVyQnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4
dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBi
b29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFRleHR1cmUi
LCB0ZXh0dXJlLCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQot
ICAgICAgICB0ZXh0dXJlID0gMDsKLSAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJn
ZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZFRl
eHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAwOwotICAg
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKLSAgICAgICAg
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZyA9IHRl
eHR1cmU7Ci0gICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7Ci0KLSAgICAgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKLSAgICAgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4dHVy
ZSkpOwotCi0gICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVApIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKLSAgICAgICAgbWF4TGV2ZWwgPSBt
X21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJlIiwg
ImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7Ci0gICAgaWYgKHRl
eHR1cmUpCi0gICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVsKTsKLQot
ICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCB0aGUg
VEVYVFVSRV9XUkFQX1IKLSAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFNUF9UT19FREdFIGZvciBj
dWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKLSAgICAvLyBFUyAyLjAgZG9lc24ndCBl
eHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbikgYW5kCi0gICAgLy8g
b3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBvdmVyIHRoZSBzZWFtcyBp
biB0aGlzCi0gICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgc3VwcG9y
dGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAotICAgIC8vIHBsYXRmb3JtcyBpcyBmYWlybHkgaW52
b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJlIElECi0gICAgLy8gaW4g
YWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxhaW50cywgc28gdGhlIGxv
Z2ljIGhhcwotICAgIC8vIGJlZW4gcmVtb3ZlZC4KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxv
YXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymxl
bmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGUpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0Rl
bnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBt
b2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZUFs
cGhhKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNlcGFy
YXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9y
cygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVu
dW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCi17Ci0gICAg
Ly8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgUkdC
LgotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5j
RmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEs
IGRzdEFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEo
R0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIg
PSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2Fn
ZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc2l6ZSA8IDAp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShz
dGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwg
ImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAg
IG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4o
c2l6ZSksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWlsZWQu
IFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRv
ZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwotICAgIH0KLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1
ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7Ci0gICAgaWYg
KCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJE
YXRhIiwgIm5vIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZl
ci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImlu
dmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgIG1f
Y29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0
YSgpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBU
ZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2Vz
LgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
QXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRl
QnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghZGF0YSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZl
ckRhdGEiLCAibm8gZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVm
ZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAi
aW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5i
YXNlQWRkcmVzcygpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24g
ZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5r
cyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIg
PSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0LCBH
cmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIGlmICghYnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9m
ZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWRhdGEpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNz
ZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJE
YXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8
R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCkpOwot
ICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0g
ICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVm
ZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAgICAgICAg
YnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9u
ZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEFUSUNfRFJBVyk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAg
IGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRw
dHI+KG9mZnNldCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91
dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2Nv
bnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmICht
X2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8v
IFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRv
ZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5k
aXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi1HQzNEZW51bSBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0
dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlm
ICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVU
RTsKLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0g
ICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3RhdHVzKCZy
ZWFzb24pOwotICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7Ci0gICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVja0ZyYW1l
YnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
KEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIiLCAiaW52
YWxpZCBtYXNrIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVh
c29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNE
KCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJj
bGVhciIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFjbGVhcklm
Q29tcG9zaXRlZChtYXNrKSkKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKLSAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MzRGZsb2F0
IGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChzdGQ6OmlzbmFuKHIpKQotICAgICAgICByID0gMDsKLSAgICBpZiAoc3RkOjpp
c25hbihnKSkKLSAgICAgICAgZyA9IDA7Ci0gICAgaWYgKHN0ZDo6aXNuYW4oYikpCi0gICAgICAg
IGIgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFuKGEpKQotICAgICAgICBhID0gMTsKLSAgICBtX2Ns
ZWFyQ29sb3JbMF0gPSByOwotICAgIG1fY2xlYXJDb2xvclsxXSA9IGc7Ci0gICAgbV9jbGVhckNv
bG9yWzJdID0gYjsKLSAgICBtX2NsZWFyQ29sb3JbM10gPSBhOwotICAgIG1fY29udGV4dC0+Y2xl
YXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsKLSAgICBt
X2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGVhclN0ZW5jaWwgPSBzOwotICAg
IG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Ri
b29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbG9yTWFza1swXSA9IHJlZDsK
LSAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOwotICAgIG1fY29sb3JNYXNrWzJdID0gYmx1ZTsK
LSAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwotICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclplcm8oc2hh
ZGVyKSk7Ci0gICAgR0MzRGludCB2YWx1ZTsKLSAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9i
amVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMsICZ2
YWx1ZSk7Ci0gICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSkKLXsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxp
ZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJpbnZhbGlkIGlu
dGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGJvcmRlcikg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucygi
Y29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRl
cm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3Nl
ZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGludGVy
bmFsZm9ybWF0LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR0xUZXh0dXJlKiB0
ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdl
dCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpIHsKLSAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNO
UE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImxl
dmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7
Ci0gICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgYm9yZGVyLCBkYXRhLT5ieXRlTGVu
Z3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBjb21wcmVzc2VkVGV4
SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vzbid0
IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCi0gICAgICAgIHRleC0+bWFya0ludmFsaWQo
dGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0ZXgtPnNldExl
dmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIHRleC0+c2V0Q29tcHJlc3NlZCgp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoZm9ybWF0KSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29t
cHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGlu
ZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZm9ybWF0ICE9IHRleC0+Z2V0SW50ZXJuYWxG
b3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQi
LCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMo
ImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBn
cmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBk
YXRhLT5iYXNlQWRkcmVzcygpKTsKLSAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKLX0KLQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgaWYgKEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpICYgKEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVS
X0JJVCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBiZSBzZXQsIG9u
bHkgcmVuZGVyZWQgdG8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoImNvcHlU
ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVT
ZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmlu
YXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0
KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0
aWJsZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdo
dCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVi
dWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3Vy
Y2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJE
IiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjbGVhcklmQ29tcG9zaXRl
ZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdC
dWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcuZ2V0KCkpOwotICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJh
d2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICBH
QzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKLSAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0
aCwgY2xpcHBlZEhlaWdodDsKLSAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgp
LCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAg
ICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7Ci0gICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlw
cGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVp
Z2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NvbnRl
eHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIH0KLSAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1l
YnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1
dGVkLgotICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwg
bGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0
ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAg
aWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29weVRl
eFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5VGV4
U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gQmVm
b3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFw
cGVucyBmaXJzdC4KLSAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsgaGVp
Z2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+Z2V0
V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVpZ2h0
KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xlIG91
dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKLSAgICBp
ZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhTdWJJbWFnZTJEIiwgaW50ZXJu
YWxmb3JtYXQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0
Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1l
YnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAiZnJh
bWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFj
Y2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVz
b3VyY2VTYWZlKCkpIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIo
bV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAg
ICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR0Mz
RGludCBjbGlwcGVkWCwgY2xpcHBlZFk7Ci0gICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgs
IGNsaXBwZWRIZWlnaHQ7Ci0gICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwg
JmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewot
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKTsKLSAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUgPSB0ZXgtPmdldFR5cGUodGFy
Z2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hhcltd
PiB6ZXJvOwotICAgICAgICAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzaXplOwotICAgICAgICAgICAgICAgIEdDM0RlbnVtIGVycm9yID0g
bV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBo
ZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICAgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBk
aW1lbnNpb25zIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQgY2hh
cltdPihzaXplKTsKLSAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtc2V0KHpl
cm8uZ2V0KCksIDAsIHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jb250ZXh0
LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoY2xpcHBl
ZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgewotICAgICAgICAgICAgICAgIFNjb3Bl
ZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBwZWRYIC0geCwgeW9mZnNl
dCArIGNsaXBwZWRZIC0geSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNjb3BlZERyYXdp
bmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTEJ1ZmZl
cj4gbyA9IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8u
Z2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJl
ZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRoaXMp
OwotICAgIGFkZENvbnRleHRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBh
c3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRleHR1
cmUoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6OmNy
ZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87
Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZVByb2dyYW0oKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJHTFBy
b2dyYW06OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAg
cmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFk
ZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxX
ZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0MzRGVudW0g
dHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRlciIs
ICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhpcywg
dHlwZSk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKLXsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
ZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG9iamVjdC0+b2JqZWN0KCkpCi0gICAg
ICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiBjb250ZXh0IGhlcmUgYmVjYXVzZSB3ZSB3YW50Ci0g
ICAgICAgIC8vIHRoaW5ncyBpbiB0aGlzIGNvbnRleHQgdW5ib3VuZC4KLSAgICAgICAgb2JqZWN0
LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIq
IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChidWZmZXIpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCi0gICAgICAgIG1fYm91
bmRBcnJheUJ1ZmZlciA9IDA7Ci0KLSAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnVuYmlu
ZEJ1ZmZlcihidWZmZXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRl
RnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFk
ZWxldGVPYmplY3QoZnJhbWVidWZmZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGZyYW1l
YnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7Ci0gICAgICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nID0gMDsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7Ci0gICAgICAgICAgICAv
LyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGludGVy
bmFsIGZiby4KLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCi17Ci0gICAgZGVs
ZXRlT2JqZWN0KHByb2dyYW0pOwotICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFByb2dy
YW0gdG8gMCBoZXJlIGJlY2F1c2UgdGhlIGRlbGV0aW9uIG9mIHRoZQotICAgIC8vIGN1cnJlbnQg
cHJvZ3JhbSBpcyBkZWxheWVkLgotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCi17Ci0gICAg
aWYgKCFkZWxldGVPYmplY3QocmVuZGVyYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChyZW5kZXJidWZmZXIgPT0gbV9yZW5kZXJidWZmZXJCaW5kaW5nKQotICAgICAgICBtX3JlbmRl
cmJ1ZmZlckJpbmRpbmcgPSAwOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAg
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1
ZmZlcihyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCi17Ci0gICAgZGVsZXRlT2JqZWN0KHNoYWRl
cik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKFdlYkdM
VGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNbaV0u
dGV4dHVyZTJEQmluZGluZykKLSAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUy
REJpbmRpbmcgPSBudWxscHRyOwotICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVVbml0
c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpCi0gICAgICAgICAgICBtX3RleHR1cmVVbml0c1tp
XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOwotICAgIH0KLSAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRh
Y2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5kZXB0
aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aE1hc2so
R0MzRGJvb2xlYW4gZmxhZykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9kZXB0aE1hc2sgPSBmbGFnOwotICAgIG1fY29udGV4dC0+
ZGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhS
YW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoek5lYXIgPiB6RmFy
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2Vi
R0xPYmplY3QoImRldGFjaFNoYWRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIXByb2dyYW0tPmRldGFjaFNoYWRlcihzaGFkZXIpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRldGFjaFNoYWRl
ciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RPclpl
cm8oc2hhZGVyKSk7Ci0gICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNEZW51bSBjYXAp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmls
aXR5KCJkaXNhYmxlIiwgY2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewotICAgICAgICBtX3N0ZW5jaWxFbmFibGVk
ID0gZmFsc2U7Ci0gICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsK
LSAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZCht
X3NjaXNzb3JFbmFibGVkKTsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
R0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYg
c3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGlu
ZGV4KTsKLSAgICBzdGF0ZS5lbmFibGVkID0gZmFsc2U7Ci0KLSAgICBpZiAoaW5kZXggPiAwIHx8
IGlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dHB0ciBvZmZzZXQpCi17Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZm
ZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwot
ICAgIAotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAob2Zmc2V0IDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgewotICAgICAgICAvLyBG
b3IgYW4gdW5zaWduZWQgaW50IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgNCBm
b3IgYWxpZ25tZW50IHJlYXNvbnMuCi0gICAgICAgIGlmIChvZmZzZXQgJSA0KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9m
ZnNldC4KLSAgICAgICAgb2Zmc2V0IC89IDQ7Ci0KLSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBl
bGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7Ci0gICAgICAgIGlmIChvZmZzZXQg
PiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUKSB7
Ci0gICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0IG11c3QgYmUg
ZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVudCByZWFzb25zLgotICAgICAgICBpZiAob2Zmc2V0
ICUgMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBNYWtlIHVvZmZz
ZXQgYW4gZWxlbWVudCBvZmZzZXQuCi0gICAgICAgIG9mZnNldCAvPSAyOwotCi0gICAgICAgIEdD
M0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAyOwotICAg
ICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVm
ZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAt
IG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlD
b25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQp
Ci17Ci0gICAgLy8gUGVyZm9ybXMgY29uc2VydmF0aXZlIHZhbGlkYXRpb24gYnkgY2FjaGluZyBh
IG1heGltdW0gaW5kZXggb2YKLSAgICAvLyB0aGUgZ2l2ZW4gdHlwZSBwZXIgZWxlbWVudCBhcnJh
eSBidWZmZXIuIElmIGFsbCBvZiB0aGUgYm91bmQKLSAgICAvLyBhcnJheSBidWZmZXJzIGhhdmUg
ZW5vdWdoIGVsZW1lbnRzIHRvIHNhdGlzZnkgdGhhdCBtYXhpbXVtCi0gICAgLy8gaW5kZXgsIHNr
aXBzIHRoZSBleHBlbnNpdmUgcGVyLWRyYXctY2FsbCBpdGVyYXRpb24gaW4KLSAgICAvLyB2YWxp
ZGF0ZUluZGV4QXJyYXlQcmVjaXNlLgotICAgIAotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxl
bWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJy
YXlCdWZmZXIoKTsKLQotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVtZW50QXJyYXlC
dWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAgICAvLyBUaGUgY2FzZSBjb3VudD09MCBpcyBhbHJlYWR5
IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxpZGF0ZUluZGV4QXJyYXlDb25z
ZXJ2YXRpdmUuCi0gICAgaWYgKCFudW1FbGVtZW50cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1l
bnRBcnJheUJ1ZmZlcigpOwotICAgIEFTU0VSVChidWZmZXIpOwotCi0gICAgaW50IG1heEluZGV4
ID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRDYWNoZWRNYXhJbmRleCh0eXBlKTsKLSAgICBpZiAo
bWF4SW5kZXggPCAwKSB7Ci0gICAgICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gaW5kZXggaW4g
dGhlIGVudGlyZSBidWZmZXIgZm9yIHRoZSBnaXZlbiB0eXBlIG9mIGluZGV4LgotICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURTogewotICAgICAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0MzRHVieXRlKj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChHQzNEc2l6
ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1heElu
ZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQ6IHsKLSAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNE
dXNob3J0KTsKLSAgICAgICAgICAgIGNvbnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxj
b25zdCBHQzNEdXNob3J0Kj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChHQzNE
c2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1h
eEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfSU5UOiB7Ci0gICAgICAgICAgICBpZiAoIW1fb2VzRWxlbWVudEluZGV4VWlu
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBudW1FbGVtZW50
cyAvPSBzaXplb2YoR0MzRHVpbnQpOwotICAgICAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAgPSBz
dGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGJ1ZmZlci0+ZGF0YSgpKTsKLSAgICAgICAgICAg
IGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAg
ICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBb
aV0pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudEFycmF5
QnVmZmVyLT5zZXRDYWNoZWRNYXhJbmRleCh0eXBlLCBtYXhJbmRleCk7Ci0gICAgfQotCi0gICAg
aWYgKG1heEluZGV4ID49IDApIHsKLSAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXF1aXJlZCBl
bGVtZW50cyBpcyBvbmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtCi0gICAgICAgIC8vIGluZGV4IHRo
YXQgd2lsbCBiZSBhY2Nlc3NlZC4KLSAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IG1heElu
ZGV4ICsgMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5UHJl
Y2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCB1
bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKLXsKLSAgICBBU1NFUlQoY291bnQgPj0gMCAm
JiBvZmZzZXQgPj0gMCk7Ci0gICAgdW5zaWduZWQgbGFzdEluZGV4ID0gMDsKLSAgICAKLSAgICBS
ZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0KLSAgICBpZiAoIWVsZW1lbnRBcnJh
eUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjb3VudCkgewotICAg
ICAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBsb25nIHVvZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7Ci0KLSAgICBpZiAodHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7Ci0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBh
biBlbGVtZW50IG9mZnNldC4KLSAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVpbnQpOwot
ICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4o
ZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZz
ZXQ7Ci0gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPiBsYXN0
SW5kZXgpCi0gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7Ci0gICAgICAgICAgICArK3A7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUKSB7Ci0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNl
dC4KLSAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7Ci0gICAgICAgIGNvbnN0
IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oZWxlbWVudEFy
cmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7Ci0gICAg
ICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgpCi0g
ICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7Ci0gICAgICAgICAgICArK3A7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpIHsKLSAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0Mz
RHVieXRlKj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgp
KSArIHVvZmZzZXQ7Ci0gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAo
KnAgPiBsYXN0SW5kZXgpCi0gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7Ci0gICAgICAg
ICAgICArK3A7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGVuIHNldCB0aGUgbGFzdCBp
bmRleCBpbiB0aGUgaW5kZXggYXJyYXkgYW5kIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KLSAgICBu
dW1FbGVtZW50c1JlcXVpcmVkID0gbGFzdEluZGV4ICsgMTsKLSAgICByZXR1cm4gbnVtRWxlbWVu
dHNSZXF1aXJlZCA+IDA7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmltaXRp
dmVDb3VudCkKLXsKLSAgICBpZiAoIW1fY3VycmVudFByb2dyYW0pCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRyaWIgYW5kIGNo
ZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKLSAgICAgICAgaWYgKCFtX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZhbGlkYXRlQmlu
ZGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChlbGVt
ZW50Q291bnQgPD0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLQotICAgIC8vIExvb2sgaW4g
ZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUgY3VycmVudCBwcm9ncmFtKS4KLSAg
ICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNlOwotICAgIGJvb2wgc2F3RW5hYmxl
ZEF0dHJpYiA9IGZhbHNlOwotICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMgPSBtX2N1
cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsgKytpKSB7Ci0gICAgICAgIGludCBs
b2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpKTsKLSAgICAg
ICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0PGludD4obV9tYXhWZXJ0ZXhBdHRy
aWJzKSkgewotICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVy
dGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0
ZXhBdHRyaWJTdGF0ZShsb2MpOwotICAgICAgICAgICAgaWYgKHN0YXRlLmVuYWJsZWQpIHsKLSAg
ICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAv
LyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVtZW50cyBjb21wdXRhdGlvbi4KLSAg
ICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVudCwgd2Ugd2lsbCBvbmx5IHRvdWNo
IHRoZSBkYXRhIGZvciB0aGUKLSAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGFuZCBub3RoaW5n
IGJleW9uZCBpdC4KLSAgICAgICAgICAgICAgICBpbnQgYnl0ZXNSZW1haW5pbmcgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgoKSAtIHN0YXRlLm9mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKLSAgICAgICAgICAgICAgICBpZiAoYnl0
ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KQotICAgICAgICAgICAgICAgICAg
ICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcgLSBzdGF0ZS5ieXRlc1BlckVsZW1l
bnQpIC8gc3RhdGUuc3RyaWRlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc3RhbmNlc1Jl
cXVpcmVkID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGl2aXNvcikgewotICAgICAg
ICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKCFzYXdOb25JbnN0YW5jZWRBdHRyaWIgJiYgc2F3RW5hYmxl
ZEF0dHJpYikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCkKLXsKLSAgICBpZiAoIW9iamVj
dCB8fCAhb2JqZWN0LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0IG9y
IG9iamVjdCBkZWxldGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYg
KCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RzaXplaSBwcmltaXRpdmVDb3VudCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25O
YW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGZpcnN0IDwgMCB8fCBjb3Vu
dCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAgICBtYXJr
Q29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlm
IChwcmltaXRpdmVDb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZl
IGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCi0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7Ci0gICAgICAgIENoZWNrZWQ8R0Mz
RGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2Vk
Q291bnQ7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQ
cmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgIGlmIChjaGVja2VkU3VtLmhh
c092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8
ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hlY2tl
ZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0
cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIg
aW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZl
KCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24p
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdD
M0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLQotICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3QXJy
YXlzIiwgbW9kZSwgZmlyc3QsIGNvdW50LCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xl
YXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZh
bHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICB2ZXJ0ZXhBdHRyaWIw
U2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKLSAg
ICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRl
bmVzcygiZHJhd0FycmF5cyIsIHRydWUpOwotCi0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1v
ZGUsIGZpcnN0LCBjb3VudCk7Ci0KLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0
ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRy
aWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOwotICAgIG1hcmtD
b250ZXh0Q2hhbmdlZCgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVk
JiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBt
b2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxT
ZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Ci0gICAgICAgIGlm
IChtX29lc0VsZW1lbnRJbmRleFVpbnQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiY291bnQgb3Igb2Zmc2V0IDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChwcmltaXRpdmVDb3VudCA8
IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRF
bGVtZW50QXJyYXlCdWZmZXIoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1FTlRf
QVJSQVlfQlVGRkVSIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAg
ICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAgICAgICBpZiAo
IXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAicmVxdWVzdCBvdXQg
b2YgYm91bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFjb3VudCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJm
bG93PiBjaGVja2VkQ291bnQoY291bnQpOwotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQpOwotICAgICAg
ICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291
bnQuaGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQg
dG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZh
dGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1F
bGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICAg
ICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNoZWNrZWRDb3VudC51bnNhZmVHZXQo
KSwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8
ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRpdmVD
b3VudC51bnNhZmVHZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVt
cHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAi
ZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYm
ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlz
UmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCByZWFzb24pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAg
dW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOwotICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMo
ImRyYXdFbGVtZW50cyIsIG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzLCAw
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJv
b2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpKSB7Ci0gICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxpZGF0
ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBudW1FbGVtZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBz
aW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0Vs
ZW1lbnRzIiwgdHJ1ZSk7Ci0KLSAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3Vu
dCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7Ci0KLSAgICBpZiAoIWlz
R0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0
b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVT
Mk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxl
bWVudHMiLCBmYWxzZSk7Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwgY2Fw
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfVEVTVCkgewotICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAg
YXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JF
bmFibGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7Ci0g
ICAgfQotICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4
VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91
dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0gICAgc3RhdGUuZW5hYmxl
ZCA9IHRydWU7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+ZmluaXNoKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fY29udGV4dC0+Zmx1c2goKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVu
dCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVy
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1l
dGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJpbnZh
bGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChidWZmZXIgJiYg
IWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhpcyBj
b250ZXh0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhl
IGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBp
bXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZh
dWx0Ci0gICAgLy8gRkJPLgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZlcik7
Ci0gICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQs
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2Jq
ZWN0KTsKLSAgICB9Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRGb3JC
b3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7Ci0gICAgYXBwbHlTdGVuY2lsVGVz
dCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJn
ZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVy
VGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChsZXZlbCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlk
YXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUy
RCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVi
dWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMg
dXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJP
LgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1
ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKLSAgICBzd2l0Y2ggKGF0
dGFjaG1lbnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FU
VEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJl
T2JqZWN0LCBsZXZlbCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQo
dGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQs
IHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVj
dCwgbGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVj
dCwgbGV2ZWwpOwotICAgIH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVu
dEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZl
bCk7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1v
ZGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAoR0Mz
RGVudW0gdGFyZ2V0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoImdlbmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxsIHRo
ZSBzYW1lIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3NlZCB0
ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAyOgotICAgIGlmICh0ZXgtPmlzQ29t
cHJlc3NlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5lcmF0
ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1hcCIs
IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIGdlbmVyYXRlTWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVyIGlz
IG5vdCBORUFSRVNUX01JUE1BUF9MSU5FQVIKLSAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhlIGhh
Y2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCi0jaWYgT1MoREFSV0lOKQotICAgIGJv
b2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5nZXRNaW5GaWx0
ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Ci0gICAg
ICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5F
QVIpOwotICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7Ci0gICAgfQotI2VuZGlm
Ci0gICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotI2lmIE9TKERBUldJTikK
LSAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHRl
eC0+Z2V0TWluRmlsdGVyKCkpOwotI2VuZGlmCi0gICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExldmVs
SW5mbygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRB
Y3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQWN0
aXZlSW5mbyBpbmZvOwotICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwgaW5k
ZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKLQotICAgIHJldHVybiBXZWJHTEFjdGl2ZUlu
Zm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0KLQotUGFzc1Jl
ZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5p
Zm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9n
cmFtKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICgh
bV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgs
IGluZm8pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlh
bnQoKSkKLSAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0aCgi
WzBdIikpCi0gICAgICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKLQotICAgIExPRyhX
ZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1l
LnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGlu
Zm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVjdG9y
PFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZVtdID0gewotICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX1NIQURFUiwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5U
X1NIQURFUgotICAgIH07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihzaGFk
ZXJUeXBlKSAvIHNpemVvZihHQzNEZW51bSk7ICsraSkgewotICAgICAgICBXZWJHTFNoYWRlciog
c2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7Ci0gICAg
ICAgIGlmIChzaGFkZXIpCi0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIp
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0MzRGludCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJl
dHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxvY2F0
aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5n
KCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYg
KGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXBy
b2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIsICJw
cm9ncmFtIG5vdCBsaW5rZWQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1
cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5h
bWUpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIs
ICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
fQotCi0gICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAmJiBw
bmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZmZXJQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250
ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIGlm
IChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCi0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRleHRB
dHRyaWJ1dGVzIG9iamVjdCB0bwotICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRhdGlu
ZyBhbnkgY2FjaGVkIHZlcnNpb24uCi0KLSAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2Ug
cmVxdWVzdGVkIHZhbHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAotICAgIC8vIGFuZCBzdGVuY2ls
LCByZWdhcmRsZXNzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8g
R3JhcGhpY3NDb250ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KLSAgICBSZWZQdHI8V2ViR0xDb250
ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0
ZShtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOwotICAgIGlmICghbV9hdHRyaWJ1
dGVzLmRlcHRoKQotICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7Ci0gICAgaWYg
KCFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNpbChm
YWxzZSk7Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBUaGUgRHJhd2lu
Z0J1ZmZlciBvYnRhaW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dENvbnRleHRBdHRyaWJ1dGVzKCksCi0gICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3duIGRl
dGVybWluYXRpb24gb2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KLSAgICAg
ICAgYXR0cmlidXRlcy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1wbGUo
KSk7Ci0gICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKLX0KLQotR0MzRGVu
dW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpO
T19FUlJPUjsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwotfQotCi1XZWJHTEV4
dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfYmxl
bmRfbWlubWF4IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBv
cnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpIHsKLSAgICAgICAgaWYgKCFtX2V4dEJsZW5kTWlu
TWF4KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIpOwotICAgICAgICAgICAgbV9leHRCbGVuZE1pbk1h
eCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7Ci0gICAgICAgIGlmICgh
bV9leHRzUkdCKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsKLSAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0ZDo6
bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1f
ZXh0c1JHQi5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJF
WFRfZnJhZ19kZXB0aCIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgewotICAgICAgICBpZiAoIW1fZXh0RnJhZ0Rl
cHRoKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKLSAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRoID0g
c3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKLSAgICAgICAgJiYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRl
cl90ZXh0dXJlX2xvZCIpKSkgewotICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxPRCkg
ewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICAgICAgICAgIG1fZXh0U2hhZGVyVGV4
dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsKLSAg
ICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgewotICAg
ICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0gICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPih0
aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgewotICAgICAg
ICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgewotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyIpOwotICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjptYWtl
X3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOwotICAgIH0KLSAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKLSAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9h
dCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1RleHR1cmVGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2Vz
VGV4dHVyZUZsb2F0LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpIHsK
LSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zs
b2F0X2xpbmVhciIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOwotICAgIH0KLSAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQotICAg
ICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdCkg
ewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhh
bGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsKLSAg
ICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBw
b3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgewotICAgICAgICBpZiAo
IW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRf
bGluZWFyIik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7Ci0gICAg
fQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKLSAgICAgICAgaWYgKCFtX29lc1ZlcnRleEFy
cmF5T2JqZWN0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKLSAgICAgICAgICAgIG1f
b2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5T2Jq
ZWN0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJheU9i
amVjdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNf
ZWxlbWVudF9pbmRleF91aW50IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKLSAgICAgICAgaWYg
KCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7Ci0g
ICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU0Vs
ZW1lbnRJbmRleFVpbnQ+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc0Vs
ZW1lbnRJbmRleFVpbnQuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsTG9zZUNv
bnRleHQpCi0gICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VDb250
ZXh0LmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJL
SVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQotICAgICAgICAmJiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX3dlYmds
Q29tcHJlc3NlZFRleHR1cmVBVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1
cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRoaXMp
OwotICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOwotICAg
IH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJl
c3NlZF90ZXh0dXJlX3B2cnRjIikpCi0gICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9
IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsKLSAg
ICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOwotICAgIH0K
LSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVy
ZV9zM3RjIikKLSAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRl
ZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMpCi0g
ICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3VuaXF1
ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7Ci0gICAgICAgIHJldHVybiBtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQotICAgICAgICAmJiBXZWJHTERl
cHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7Ci0gICAgICAgIGlm
ICghbV93ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsKLSAg
ICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVw
dGhUZXh0dXJlPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV93ZWJnbERlcHRo
VGV4dHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKLSAgICAgICAg
aWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7Ci0gICAgICAg
ICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1ZmZl
cnM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZlcnMu
Z2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykp
IHsKLSAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFu
Y2VkX2FycmF5cyIpOwotICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0ZDo6
bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOwotICAgIH0KLSAgICBpZiAo
YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7Ci0gICAgICAgICAgICBp
ZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAgICAgICAgICAgICBtX3dlYmdsRGVi
dWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlckluZm8+
KHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5nZXQo
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdM
X2RlYnVnX3NoYWRlcnMiKQotICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgewotICAg
ICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQotICAgICAgICAgICAgICAgIG1fd2Vi
Z2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0aGlz
KTsKLSAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotCi0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgV2ViR0xTaGFyZWRP
YmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2JqZWN0
KGF0dGFjaG1lbnQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkKLSAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOwot
ICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0gaW4gdGhpcyBj
YXNlLCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgICAgIC8vIHNwZWNpZmllcyBJTlZBTElEX09QRVJB
VElPTi4KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBvYmplY3QtPmlzUmVuZGVyYnVmZmVy
KCkpOwotICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7Ci0gICAgICAgIHN3aXRjaCAocG5h
bWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4ocmVpbnRlcnByZXRfY2FzdDxXZWJH
TFRleHR1cmUqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6
Ci0gICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9S
X0VOQ09ESU5HX0VYVDogewotICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdl
dCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZv
ciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUik7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogewotICAgICAgICAgICAg
V2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xS
ZW5kZXJidWZmZXIqPihvYmplY3QpOwotICAgICAgICAgICAgR0MzRGVudW0gcmVuZGVyQnVmZmVy
Rm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotICAgICAgICAgICAg
QVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUICYmIHJl
bmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKTsKLSAgICAg
ICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBI
QThfRVhUKQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRXh0ZW5zaW9uczNE
OjpTUkdCX0VYVCk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29u
dGV4dDNEOjpMSU5FQVIpOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUg
Zm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY29uc3QgaW50IGlu
dFplcm8gPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBQ1RJVkVfVEVYVFVSRToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0U6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5H
RToKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoKLSAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkQ6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICAgICAgcmV0dXJu
IGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9S
R0I6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0gICAgICAgIHJl
dHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NS
Q19BTFBIQToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgotICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkJMVUVfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAg
IHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xl
YW5BcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09N
UFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oVWlu
dDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1fY29t
cHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNVTExfRkFDRToKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50UHJvZ3JhbSkpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oaW50WmVybyk7Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAgICBy
ZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0ZVTkM6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAgICAg
IHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1B
U0s6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZ
X0JVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8
V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCkpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5H
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZl
cj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVF9GQUNFOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgotICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Ci0gICAg
ICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9DVUJFX01BUF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JN
X1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6Ci0g
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRU
UklCUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JU
X0RJTVM6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgot
ICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8KLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UEFDS19BTElHTk1FTlQ6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RP
UjoKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgotICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9M
WUdPTl9PRkZTRVRfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6Ci0gICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQ
dHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KFN0cmluZygiV2ViS2l0IFdlYkdMIikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRV9CVUZGRVJTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAgICAg
ICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6Ci0g
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfQk9YOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
OgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3Ry
aW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIikiKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19Q
QVNTX0RFUFRIX1BBU1M6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9CQUNLX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6Ci0g
ICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVuY2ls
KQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9DTEVBUl9WQUxVRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1Nf
REVQVEhfRkFJTDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNU
OgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgotICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfV1JJVEVNQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6Ci0g
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJl
VW5pdF0udGV4dHVyZTJEQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQklORElOR19DVUJFX01BUDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNz
UmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0u
dGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVDoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhTdHJpbmcoIldlYktpdCIpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9O
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRleHQt
PmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRB
cnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NI
QURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAg
ICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKLSAgICAgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJ
VkFUSVZFX0hJTlRfT0VTKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5N
QVNLRURfUkVOREVSRVJfV0VCR0w6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlcklu
Zm8pCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5n
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQi
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgotICAgICAgICBpZiAobV93ZWJnbERl
YnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRl
eHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKSk7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBu
b3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9hcnJh
eV9vYmplY3QKLSAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKLSAgICAgICAg
ICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxlZCIp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljCi0gICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykKLSAg
ICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1B
WF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFi
bGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBCRUdJ
TgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpOwotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZl
cnMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIHBu
YW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAgICAgJiYgcG5h
bWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhU
ICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZykKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRE
cmF3QnVmZmVyKHBuYW1lKTsKLSAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZl
cgotICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQ
cm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbVBh
cmFtZXRlciIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAg
ICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhwcm9ncmFtLT5pc0RlbGV0ZWQoKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkFM
SURBVEVfU1RBVFVTOgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclpl
cm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TElOS19TVEFUVVM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0TGlu
a1N0YXR1cygpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJT
OgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSks
IHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0
Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUs
ICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotU3RyaW5nIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBp
ZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCi0g
ICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdl
dFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSkpOwotfQotCi1XZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52
YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAg
ICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVy
YnVmZmVyIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0K
LSAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCi0gICAgICAgICYmICFtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmctPmlzVmFsaWQoKSkgewotICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKCkpOwotICAgICAgICBpbnQgdmFsdWUgPSAwOwotICAgICAgICBzd2l0Y2ggKHBuYW1l
KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoK
LSAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9IRUlHSFQ6Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9
IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDI0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9TVEVOQ0lMX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDg7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFM
X0ZPUk1BVDoKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIH0KLQotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwot
ICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVJfV0lEVEg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hF
SUdIVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgotICAgICAgICBtX2Nv
bnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsK
LSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0K
LQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVy
KFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRlcikp
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsK
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRF
X1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRlZCgp
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKLSAgICAgICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUp
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKLSAgICAgICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2
YWx1ZSkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQot
fQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdM
U2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xvZyIs
IHNoYWRlcikpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbCht
X2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKLX0KLQot
UGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVu
dW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpWRVJURVhfU0hBREVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUjoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNRURJVU1fSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5U
OgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9y
bWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKLSAgICBHQzNEaW50IHBy
ZWNpc2lvbiA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hh
ZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIHJldHVybiBX
ZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwgcHJl
Y2lzaW9uKTsKLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291
cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVy
U291cmNlIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1cmVO
b3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQotewotICAgIFZlY3RvcjxT
dHJpbmc+IHJlc3VsdDsKLQotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIkVYVF9ibGVuZF9taW5tYXgiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRf
c1JHQiIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X0VYVF9mcmFnX2RlcHRoIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9mcmFnX2RlcHRo
Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VT
X3RleHR1cmVfZmxvYXQiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfZmxv
YXQiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9P
RVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3Rl
eHR1cmVfZmxvYXRfbGluZWFyIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIi
KSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIi
KTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKQotICAgICAg
ICByZXN1bHQuYXBwZW5kKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7Ci0gICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9FWFRfdGV4dHVyZV9m
aWx0ZXJfYW5pc290cm9waWMiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOwotICAgIHJlc3Vs
dC5hcHBlbmQoIldFQkdMX2xvc2VfY29udGV4dCIpOwotICAgIGlmIChXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJ
VF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIik7Ci0gICAgaWYgKFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJX
RUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7Ci0gICAgaWYgKFdlYkdMQ29t
cHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7Ci0gICAgaWYgKFdlYkdMRGVwdGhU
ZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTsKLSAgICBpZiAoc3VwcG9ydHNEcmF3QnVmZmVy
cygpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTsKLSAgICBp
ZiAoQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwotCi0gICAgaWYgKGFsbG93UHJpdmls
ZWdlZEV4dGVuc2lvbnMoKSkgewotICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKLSAgICAgICAgcmVz
dWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOwotICAgIH0KLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBXZWJHTFRl
eHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdldFRleFBhcmFtZXRlciIsIHRh
cmdldCwgZmFsc2UpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1Q6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFY
X0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKLSAgICAg
ICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUp
KTsKLSAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOwotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2Vi
R0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwotICAgIGlmICghdW5pZm9ybUxvY2F0aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJv
Z3JhbSgpICE9IHByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybSIsICJubyB1bmlmb3JtbG9j
YXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwotICAgIH0KLSAgICBHQzNEaW50IGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0
aW9uLT5sb2NhdGlvbigpOwotCi0gICAgR0MzRGVudW0gYmFzZVR5cGU7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoOwotICAgIHN3aXRjaCAodW5pZm9ybUxvY2F0aW9uLT50eXBlKCkpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMzoKLSAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUM0OgotICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSA0
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6Ci0gICAg
ICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKLSAgICAgICAgbGVuZ3RoID0g
MTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UX1ZFQzI6
Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKLSAgICAgICAgbGVu
Z3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
X1ZFQzM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKLSAgICAg
ICAgbGVuZ3RoID0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SU5UX1ZFQzQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsK
LSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVF9WRUMyOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDM7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzQ6Ci0gICAgICAgIGJh
c2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSA0Owot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQyOgot
ICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVu
Z3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVRfTUFUMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0g
ICAgICAgIGxlbmd0aCA9IDk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUX01BVDQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAxNjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTQU1QTEVSX0NVQkU6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklO
VDsKLSAgICAgICAgbGVuZ3RoID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgLy8gQ2FuJ3QgaGFuZGxlIHRoaXMgdHlwZQotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5oYW5k
bGVkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICBz
d2l0Y2ggKGJhc2VUeXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IHsK
LSAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzE2XSA9IHswfTsKLSAgICAgICAgaWYgKG1faXNSb2J1
c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmdldG5Vbmlmb3JtZnZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgMTYg
KiBzaXplb2YoR0MzRGZsb2F0KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldFVuaWZvcm1mdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2
YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8odmFsdWVbMF0pOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJB
cnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6SU5UOiB7Ci0gICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07Ci0gICAgICAg
IGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFtKSwg
bG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBs
b2NhdGlvbiwgdmFsdWUpOwotICAgICAgICBpZiAobGVuZ3RoID09IDEpCi0gICAgICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotICAgIH0KLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCT09MOiB7Ci0gICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07
Ci0gICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwotICAgICAgICBpZiAobGVuZ3RoID4gMSkgewotICAg
ICAgICAgICAgYm9vbCBib29sVmFsdWVbMTZdID0gezB9OwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKQotICAgICAgICAgICAgICAgIGJvb2xWYWx1ZVtq
XSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2pdKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oYm9vbFZhbHVlLCBsZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbMF0pKTsKLSAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBn
ZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRlbHkgY29tcGxl
eCBsb2dpYyBhYm92ZQotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7Ci0gICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRVbmlm
b3JtTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCF2
YWxpZGF0ZVN0cmluZygiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29u
dGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7Ci0g
ICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBHQzNEaW50IGFjdGl2ZVVuaWZvcm1zID0gMDsKLSAgICBtX2NvbnRleHQtPmdldE5vbkJ1
aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7Ci0gICAgZm9yIChHQzNE
aW50IGkgPSAwOyBpIDwgYWN0aXZlVW5pZm9ybXM7IGkrKykgewotICAgICAgICBBY3RpdmVJbmZv
IGluZm87Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgaSwgaW5mbykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgLy8gU3RyaXAgIlswXSIgZnJvbSB0aGUgbmFtZSBpZiBpdCdzIGFuIGFycmF5LgotICAg
ICAgICBpZiAoaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKLSAgICAgICAgICAgIGluZm8ubmFt
ZSA9IGluZm8ubmFtZS5sZWZ0KGluZm8ubmFtZS5sZW5ndGgoKSAtIDMpOwotICAgICAgICAvLyBJ
ZiBpdCdzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGVsZW1lbnQs
IGFwcGVuZGluZyAiW2luZGV4XSIgdG8gdGhlIG5hbWUuCi0gICAgICAgIGZvciAoR0MzRGludCBp
bmRleCA9IDA7IGluZGV4IDwgaW5mby5zaXplOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBTdHJp
bmcgdW5pZm9ybU5hbWUgPSBpbmZvLm5hbWUgKyAiWyIgKyBTdHJpbmc6Om51bWJlcihpbmRleCkg
KyAiXSI7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lID09IHVuaWZvcm1OYW1lIHx8IG5hbWUgPT0g
aW5mby5uYW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6
Y3JlYXRlKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbiwgaW5mby50eXBlKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLQotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLQotICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRWZXJ0
ZXhBdHRyaWIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKLSAgICB9Ci0KLSAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpW
ZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZl
cnRleEF0dHJpYlN0YXRlKGluZGV4KTsKLQotICAgIGlmIChtX2FuZ2xlSW5zdGFuY2VkQXJyYXlz
ICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0RJVklT
T1JfQU5HTEUpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuZGl2aXNvcik7Ci0K
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgaWYgKCghaXNHTEVTMkNvbXBs
aWFudCgpICYmICFpbmRleCAmJiBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0
dHJpYlN0YXRlKDApLmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKQotICAg
ICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmcKLSAgICAgICAgICAgIHx8ICFzdGF0ZS5i
dWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihz
dGF0ZS5idWZmZXJCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRl
LmVuYWJsZWQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5ub3JtYWxp
emVkKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NJ
WkU6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuc2l6ZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGUub3JpZ2luYWxTdHJpZGUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0ZS50eXBlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVVJS
RU5UX1ZFUlRFWF9BVFRSSUI6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQzMkFy
cmF5OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF0udmFsdWUsIDQpKTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmliIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotbG9uZyBsb25nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9jb250ZXh0LT5n
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihyZXN1bHQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJvb2wgaXNWYWxpZCA9IGZh
bHNlOwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
R0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0gICAgICAgIGlzVmFsaWQgPSB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVf
SElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcwotICAgICAgICBpZiAobV9vZXNT
dGFuZGFyZERlcml2YXRpdmVzKQotICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxpZCB0
YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmhpbnQodGFy
Z2V0LCBtb2RlKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0J1
ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghYnVmZmVyIHx8IGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWJ1ZmZlci0+
aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2Nv
bnRleHQtPmlzQnVmZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOwotfQotCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGV4
dExvc3Q7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uICYmICFtX2hh
c1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiQ29udGV4
dCBpcyBiZWluZyB1c2VkLiBBdHRlbXB0IHRvIHJlc29sdmUgdGhlIHBvbGljeS4iKTsKLSAgICAg
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCkudG9wRG9jdW1lbnQo
KTsKLSAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKTsKLSAgICAgICAgaWYgKHBh
Z2UgJiYgIWRvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAgICBwYWdlLT5t
YWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5yZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwoZG9j
dW1lbnQudXJsKCkpOwotICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5IGRvIGFu
eXRoaW5nIHdpdGggdGhlIHJlc3VsdCBmcm9tIHJlc29sdXRpb24uIEEgbW9yZQotICAgICAgICAv
LyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCB0cnkgdG8gY29uc3RydWN0IGEgcmVhbCBj
b250ZXh0LCBldGMgYW5kIHByb2NlZWQKLSAgICAgICAgLy8gd2l0aCBub3JtYWwgb3BlcmF0aW9u
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5
MTIyCi0gICAgICAgIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZChH
QzNEZW51bSBjYXApCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVDYXBhYmlsaXR5KCJpc0VuYWJsZWQiLCBjYXApKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpCi0gICAgICAgIHJl
dHVybiBtX3N0ZW5jaWxFbmFibGVkOwotICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxlZChj
YXApOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZm
ZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFmcmFtZWJ1ZmZl
ciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
aWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzRnJhbWVidWZmZXIoZnJhbWVidWZmZXItPm9iamVj
dCgpKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4
dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVy
YnVmZmVyKQotewotICAgIGlmICghcmVuZGVyYnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIXJlbmRlcmJ1ZmZlci0+aGFzRXZl
ckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRleHQt
PmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVh
biBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCi17
Ci0gICAgaWYgKCFzaGFkZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlci0+b2JqZWN0
KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVyZShX
ZWJHTFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIXRleHR1cmUtPmhh
c0V2ZXJCZWVuQm91bmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250
ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5saW5l
V2lkdGgod2lkdGgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImxpbmtQcm9ncmFtIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBXZWJHTFNoYWRlciogdmVy
dGV4U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVIpOwotICAgICAgICBXZWJHTFNoYWRlciogZnJhZ21lbnRTaGFkZXIgPSBw
cm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hB
REVSKTsKLSAgICAgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNWYWxp
ZCgpIHx8ICFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzVmFsaWQoKSB8fCAh
bV9jb250ZXh0LT5wcmVjaXNpb25zTWF0Y2gob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciksIG9i
amVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpIHx8ICFtX2NvbnRleHQtPmNoZWNrVmFyeWluZ3NQ
YWNraW5nKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclplcm8oZnJhZ21lbnRT
aGFkZXIpKSkgewotICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPmxp
bmtQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7Ci0gICAgcHJvZ3JhbS0+aW5jcmVhc2VM
aW5rQ291bnQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVsU3RvcmVp
KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAgICAgbV91
bnBhY2tGbGlwWSA9IHBhcmFtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAg
ICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJHTCB8
fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKLSAgICAgICAgICAgIG1fdW5wYWNr
Q29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFyYW0pOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9y
IFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpQQUNLX0FMSUdOTUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5UOgotICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAyIHx8IHBhcmFtID09
IDQgfHwgcGFyYW0gPT0gOCkgewotICAgICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKLSAgICAgICAgICAgICAgICBtX3BhY2tBbGlnbm1lbnQg
PSBwYXJhbTsKLSAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQ6Ci0gICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQgPSBwYXJhbTsKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIGFs
aWdubWVudCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKLXsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jb250ZXh0LT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gRHVlIHRv
IFdlYkdMJ3Mgc2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9zc2libGUgdG8K
LSAgICAvLyB0YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCi0gICAgQVNTRVJU
KGNhbnZhcygpLT5vcmlnaW5DbGVhbigpKTsKLSAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJhbWV0
ZXJzLgotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVscyIsICJubyBkZXN0aW5hdGlv
biBBcnJheUJ1ZmZlclZpZXciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzd2l0Y2gg
KGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlk
IGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIs
ICJmb3JtYXQgbm90IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhlbCB0
eXBlLgotICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZl
ciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNh
ZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsIHJlYXNv
bik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNpemUs
IHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCi0gICAgdW5zaWdu
ZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHBhZGRpbmcg
PSAwOwotICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsKLSAgICAgICAgR0Mz
RGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwg
dHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVk
LCAmcGFkZGluZyk7Ci0gICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1IpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAicmVhZFBpeGVs
cyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBsYXJnZSBl
bm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgdm9pZCogZGF0YSA9IHBpeGVs
cy0+YmFzZUFkZHJlc3MoKTsKLQotICAgIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJp
bmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5n
ZXQoKSk7Ci0gICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZWFkblBpeGVsc0VYVCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBkYXRhKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci0gICAgfQotCi0jaWYgT1MoREFSV0lOKQot
ICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgLy8gd2UgaGF2ZW4ndCBjb21wdXRl
ZCBwYWRkaW5nCi0gICAgICAgIG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9y
bWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVx
dWlyZWQsICZwYWRkaW5nKTsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVu
IEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xFUyBkcml2ZXIgYnVnCi0gICAgLy8gb24g
UUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNob3VsZAot
ICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgotICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkg
ewotICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGNoYXIqPihkYXRhKTsKLSAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXkgPSAwOyBpeSA8IGhl
aWdodDsgKytpeSkgewotICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXggPSAwOyBpeCA8IHdp
ZHRoOyArK2l4KSB7Ci0gICAgICAgICAgICAgICAgcGl4ZWxzWzNdID0gMjU1OwotICAgICAgICAg
ICAgICAgIHBpeGVscyArPSA0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGl4ZWxzICs9
IHBhZGRpbmc7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+cmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5k
ZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwg
ImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVyYnVm
ZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNo
IChpbnRlcm5hbGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NP
TVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4OgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUOgotICAgICAgICBpZiAoaW50ZXJu
YWxmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUICYmICFtX2V4dHNSR0Ip
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQi
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2NvbnRleHQtPnJl
bmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQodHJ1
ZSk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RF
TkNJTDoKLSAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMzRDo6
REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9y
ZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7
Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVy
U3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKCJzY2lz
c29yIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnNj
aXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJp
bmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgic2hhZGVy
U291cmNlIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFN0cmluZyBzdHJpbmdXaXRo
b3V0Q29tbWVudHMgPSBTdHJpcENvbW1lbnRzKHN0cmluZykucmVzdWx0KCk7Ci0gICAgaWYgKCF2
YWxpZGF0ZVN0cmluZygic2hhZGVyU291cmNlIiwgc3RyaW5nV2l0aG91dENvbW1lbnRzKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHNoYWRlci0+c2V0U291cmNlKHN0cmluZyk7Ci0gICAgbV9jb250
ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZ1dpdGhvdXRDb21t
ZW50cyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuYyhHQzNE
ZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVN0
ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9z
dGVuY2lsRnVuY1JlZiA9IHJlZjsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAg
ICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0g
bWFzazsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVt
IGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIHN3aXRjaCAoZmFjZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZST05UX0FORF9CQUNLOgotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAg
ICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01h
c2sgPSBtYXNrOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKLSAgICAgICAgbV9z
dGVuY2lsRnVuY1JlZiA9IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgotICAgICAg
ICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tC
YWNrID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxGdW5j
U2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNr
KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKLSAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7
Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQg
bWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJP
TlRfQU5EX0JBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgICAgICBtX3N0
ZW5jaWxNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZST05UOgotICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKLSAgICAgICAgbV9zdGVu
Y2lsTWFza0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAic3Rl
bmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0Mz
RGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWls
LCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNp
bE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWws
IEdDM0RlbnVtIHpwYXNzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZh
aWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFu
eSBlcnJvcnMgcmV0dXJuZWQuCi0gICAgZWMgPSAwOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0g
dmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAg
QVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJ
bWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUpKTsKLSAgICBBU1NFUlQodGV4KTsKLSAgICBBU1NFUlQoIWxldmVs
IHx8ICFXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgaWYgKCFwaXhl
bHMpIHsKLSAgICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVtZW50YXRpb24g
Y2xlYXJzIHRleHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9yZSB0cnVlLgot
ICAgICAgICAvLyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFyZSB1c2luZyBB
TkdMRV9kZXB0aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcwotICAgICAgICAvLyBjYW4g
bm90IGJlIGNsZWFyZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJlIGNsZWFyZWQgYnkgYmlu
ZGluZyB0byBhbiBmYm8gYW5kIGNhbGxpbmcKLSAgICAgICAgLy8gY2xlYXIuCi0gICAgICAgIGlm
IChpc1Jlc291cmNlU2FmZSgpKQotICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYm9vbCBzdWNj
ZWVkID0gbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBt
X3VucGFja0FsaWdubWVudCk7Ci0gICAgICAgICAgICBpZiAoIXN1Y2NlZWQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHZh
bGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpOwot
ICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAg
ICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGZ1
bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0aGUg
ZGF0YSBmb3IgdGhpcyBsZXZlbC4KLSAgICAgICAgICAgIHRleC0+bWFya0ludmFsaWQodGFyZ2V0
LCBsZXZlbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdGV4
LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIHR5cGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRElt
cGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAg
ICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRy
YWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwg
bV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7
Ci0gICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJ
bWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0
cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwotICAgIGNvbnN0IHZv
aWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKLQot
ICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYg
IWZsaXBZKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAg
ICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEs
IGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlRXh0
cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVk
Q29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKLSAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25U
eXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCkKLXsKLSAgICBp
ZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBmdW5jdGlvblR5cGUs
IHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkdMVGV4dHVyZSog
dGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIHRy
dWUpOwotICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGZ1bmN0aW9uVHlwZSA9PSBOb3RUZXhTdWJJbWFnZTJEKSB7Ci0gICAgICAgIGlmIChsZXZlbCAm
JiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIGZ1
bmN0aW9uIHZhbGlkYXRlVGV4RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhlciB0byB2YWxp
ZGF0ZSB0aGUgU2V0dGFibGVUZXhGb3JtYXQKLSAgICAgICAgLy8gYnkgY2hlY2tpbmcgaWYgdGhl
IEFycmF5QnVmZmVyVmlldyBpcyBudWxsIG9yIG5vdC4KLSAgICAgICAgaWYgKHNvdXJjZVR5cGUg
IT0gU291cmNlQXJyYXlCdWZmZXJWaWV3KSB7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlU2V0
dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghdmFsaWRh
dGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9uTmFtZSwgeG9m
ZnNldCwgeW9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIEJl
Zm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93IGhh
cHBlbnMgZmlyc3QuCi0gICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZzZXQg
KyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVuc2lvbnMiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeG9mZnNl
dCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCAr
IGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRleHR1cmUtPmdldEludGVybmFsRm9y
bWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwg
bGV2ZWwpICE9IHR5cGUpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQgZm9y
bWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1
bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzLCBOdWxsQWxsb3dlZCkKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1h
Z2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBwaXhl
bHMtPmJhc2VBZGRyZXNzKCkgOiAwOwotICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKLSAg
ICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOwotICAgIGlmIChkYXRhICYmICht
X3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKLSAgICAgICAgaWYg
KCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tB
bGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91
bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVtcERhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOwotICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQg
PSB0cnVlOwotICAgIH0KLSAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwg
ZGF0YSwgZWMpOwotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1f
dW5wYWNrQWxpZ25tZW50KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFw
aXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQs
IFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+
d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGJvb2wgbmVlZENvbnZl
cnNpb24gPSB0cnVlOwotICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBv
ZiBmb3JtYXQgUkdCQTguCi0gICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGlu
YXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlw
IG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAoIW1fdW5wYWNr
RmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAgICAg
aWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1f
dW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
cGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7Ci0g
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25t
ZW50KTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3
SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQg
ZGV2aWNlU2NhbGVGYWN0b3IpCi17Ci0gICAgSW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQpOwot
ICAgIHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgIEltYWdlQnVmZmVyKiBidWYg
PSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7Ci0gICAgaWYgKCFidWYp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9N
RU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFn
ZS0+c2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKTsK
LSAgICBidWYtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVm
ZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdlMkQiLCBpbWFn
ZSwgZWMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVu
ZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRl
cmVyKCkpOwotICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQotICAgICAgICBp
bWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCks
IGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOwotCi0gICAgaWYgKCFpbWFnZUZv
clJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2Uy
RCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZv
cm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRleEltYWdlMkRJbXBs
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVu
ZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleEltYWdl
MkQiLCBjYW52YXMsIGVjKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4
U3ViSW1hZ2UyRCwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwg
dHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVyZSogdGV4dHVy
ZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwot
ICAgIC8vIElmIHBvc3NpYmxlLCBjb3B5IGZyb20gdGhlIGNhbnZhcyBlbGVtZW50IGRpcmVjdGx5
IHRvIHRoZSB0ZXh0dXJlCi0gICAgLy8gdmlhIHRoZSBHUFUsIHdpdGhvdXQgYSByZWFkLWJhY2sg
dG8gc3lzdGVtIG1lbW9yeS4KLSAgICAvLwotICAgIC8vIEZJWE1FOiByZXN0cmljdGlvbiBvZiAo
UkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZVEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCi0gICAgLy8g
SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZ1
bGx5IGZ1bmN0aW9uYWwuCi0gICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEID09
IHRhcmdldCAmJiB0ZXh0dXJlICYmIHR5cGUgPT0gdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxl
dmVsKQotICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9y
bWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52
YXMtPmJ1ZmZlcigpOwotICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZv
cm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZv
cm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewotICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5cGUpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gY2FudmFzLT5nZXRJbWFnZURhdGEoKTsKLSAgICBpZiAoaW1hZ2VEYXRhKQotICAgICAg
ICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGltYWdlRGF0YS5nZXQoKSwgZWMpOwotICAgIGVsc2UKLSAgICAgICAgdGV4SW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3Bp
ZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8p
Ci1QYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVUb0lt
YWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdTdG9y
ZUNvcHksIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIEludFNpemUgc2l6ZSh2aWRlby0+dmlkZW9X
aWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1f
Z2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKLSAgICBpZiAoIWJ1Zikgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9S
WSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOwotICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUgdGV4dHVy
ZSBjb3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgotICAgIHZpZGVvLT5wYWludEN1cnJlbnRG
cmFtZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOwotICAgIHJldHVybiBidWYt
PmNvcHlJbWFnZShiYWNraW5nU3RvcmVDb3B5KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8s
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleEltYWdlMkQiLCB2
aWRlbywgZWMpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RU
ZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdvIHRocm91
Z2ggdGhlIGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3aXRob3V0IGEg
cmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KLSAgICAvLyBPdGhlcndpc2Us
IGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgU1cgcGF0aC4KLSAgICAvLyBGSVhNRTog
VGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3JtYXQgc2hvdWQgYmUgUkdC
IG9yIFJHQkEsCi0gICAgLy8gdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBhbmQgbGV2ZWwg
c2hvdWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KLSAgICBXZWJHTFRl
eHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFy
Z2V0LCB0cnVlKTsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFy
Z2V0ICYmIHRleHR1cmUKLSAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKLSAgICAgICAgJiYgdHlw
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAmJiAodGV4dHVy
ZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgJiYgIWxl
dmVsKSB7Ci0gICAgICAgIGlmICh2aWRlby0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKG1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGxldmVsLCB0eXBlLCBpbnRl
cm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewot
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgdHlwZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3JtYWwg
cHVyZSBTVyBwYXRoLgotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFt
ZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2
YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKLSAg
ICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKLSAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBhcmFt
ZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJFUEVBVCkKLSAgICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQp
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMKLSAgICAgICAgaWYgKCFtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKGlzRmxvYXQpIHsKLSAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJmKHBuYW1lLCBwYXJhbWYp
OwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW1m
KTsKLSAgICB9IGVsc2UgewotICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFt
aSk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJh
bWkpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRl
cmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKQotewot
ICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBwYXJhbSwgMCwgdHJ1ZSk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgdGV4UGFyYW1ldGVyKHRhcmdl
dCwgcG5hbWUsIDAsIHBhcmFtLCBmYWxzZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25v
cmUgYW55IGVycm9ycyByZXR1cm5lZAotICAgIGVjID0gMDsKLSAgICBBU1NFUlQoIWlzQ29udGV4
dExvc3QoKSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleFN1Yklt
YWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIDAsIGZvcm1hdCwgdHlwZSkpOwotICAgIEFTU0VSVCh2YWxpZGF0ZVNpemUoInRleFN1Yklt
YWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFibGVU
ZXhGb3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQpKTsKLSAgICBXZWJHTFRleHR1cmUqIHRl
eCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUp
OwotICAgIGlmICghdGV4KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVCgoeG9mZnNldCArIHdpZHRoKSA+PSAwKTsKLSAg
ICBBU1NFUlQoKHlvZmZzZXQgKyBoZWlnaHQpID49IDApOwotICAgIEFTU0VSVCh0ZXgtPmdldFdp
ZHRoKHRhcmdldCwgbGV2ZWwpID49ICh4b2Zmc2V0ICsgd2lkdGgpKTsKLSAgICBBU1NFUlQodGV4
LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkgPj0gKHlvZmZzZXQgKyBoZWlnaHQpKTsKLSAgICBB
U1NFUlQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSA9PSBmb3JtYXQpOwot
ICAgIEFTU0VSVCh0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gdHlwZSk7Ci0gICAgbV9j
b250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1s
RG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9y
KGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNv
bnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOyAgCi0gICAgaWYgKCFpbWFnZUV4
dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBp
bWFnZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZv
cm1hdCgpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4
dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKLSAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9
IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7Ci0KLSAgICBib29sIG5lZWRDb252ZXJz
aW9uID0gdHJ1ZTsKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKLSAgICAgICAgbmVl
ZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQt
PnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZ
LCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCks
IGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNl
VW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGlt
YWdlIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJ
bWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lkdGgo
KSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsICBuZWVkQ29udmVyc2lvbiA/IGRhdGEu
ZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQg
IT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVU
ZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHBpeGVscywgTnVsbE5vdEFsbG93ZWQpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1
bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcs
IHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCB4
b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZvaWQqIGRhdGEgPSBwaXhl
bHMtPmJhc2VBZGRyZXNzKCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOwotICAgIGJv
b2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0gICAgaWYgKGRhdGEgJiYgKG1fdW5w
YWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgewotICAgICAgICBpZiAoIW1f
Y29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdu
bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRh
dGEgPSB0ZW1wRGF0YS5kYXRhKCk7Ci0gICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9IHRy
dWU7Ci0gICAgfQotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEp
OwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOwotICAgIGlmIChjaGFuZ2VV
bnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVj
ID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwgIXZh
bGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUltYWdl
RGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhl
aWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBib29sIG5lZWRDb252ZXJzaW9u
ID0gdHJ1ZTsKLSAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2YgZm9y
bWF0IFJHQkE4LgotICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9u
IGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQ
cmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgaWYgKGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpCi0g
ICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICgh
bV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1
YkltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9j
b250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwg
MSk7Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7Ci0g
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25t
ZW50KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFnZSwg
ZWMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVy
ID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVy
KCkpOwotICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQotICAgICAgICBpbWFn
ZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIGlt
YWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOwotCi0gICAgaWYgKCFpbWFnZUZvclJl
bmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwg
U291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBpbWFnZUZvclJl
bmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUs
IHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0ZXhTdWJJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdl
Rm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMg
PSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENh
bnZhc0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCBjYW52YXMsIGVjKQotICAgICAgICB8fCAhdmFs
aWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTENh
bnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52
YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdl
dEltYWdlRGF0YSgpOwotICAgIGlmIChpbWFnZURhdGEpCi0gICAgICAgIHRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEu
Z2V0KCksIGVjKTsKLSAgICBlbHNlCi0gICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFn
ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
SFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAgICAgICAgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhU
TUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgo
KSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0Zy
YW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsK
LSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgdGV4U3ViSW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9n
cmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgInVuaWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJv
Z3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3Jt
MWYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZs
b2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxl
bmd0aCgpLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCBzaXplLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlm
b3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICgobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNE
OjpTQU1QTEVSX0NVQkUpICYmIHggPj0gKGludCltX3RleHR1cmVVbml0cy5zaXplKCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJ1bmlmb3JtMWkiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2Nh
dGlvbiwgdiwgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+dHlwZSgp
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHYtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh2LT5kYXRhKClb
aV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7Ci0gICAgICAg
ICAgICAgICAgTE9HKFdlYkdMLCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4gTG9j
YXRpb24gdHlwZSA9ICUwNFguIiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRhKClb
aV0sIGxvY2F0aW9uLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlk
IHRleHR1cmUgdW5pdCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpTQU1QTEVSX0NVQkUpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7ICsraSkgewotICAgICAgICAgICAgaWYgKCgoR0Mz
RGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7
Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0yZiIs
ICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgs
IHkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2Iiwg
bG9jYXRpb24sIHYsIDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZv
cm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZv
cm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
Y29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJp
IiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24oKSwg
eCwgeSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMml2Iiwg
bG9jYXRpb24sIHYsIDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZv
cm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3Jt
Mml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0
IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgMykpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3Ro
KCkgLyAzLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCBzaXplIC8gMywgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJl
bnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJl
bnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51
bmlmb3JtM2kobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCBzaXpl
LCAzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlm
b3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygi
dW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQs
IHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNp
emUgLyA0LCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aShj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZvciBj
dXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4
dC0+dW5pZm9ybTRpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwgNCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwg
diwgc2l6ZSwgNCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRp
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVu
aWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgdi0+bGVuZ3RoKCkgLyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2
LCBzaXplLCA0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHRyYW5zcG9zZSwgdik7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMy
QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDkp
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gOSwgdHJhbnNw
b3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24sIHRy
YW5zcG9zZSwgdiwgMTYpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDE2LCB0cmFuc3Bv
c2UsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
TWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRy
aXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyAxNiwgdHJhbnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNo
ZWNrT2JqZWN0VG9CZUJvdW5kKCJ1c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRlZCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkKLSAgICAgICAgcHJvZ3JhbSA9IDA7Ci0gICAg
aWYgKHByb2dyYW0gJiYgIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1c2VQ
cm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKG1fY3VycmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgewotICAgICAgICBpZiAobV9jdXJy
ZW50UHJvZ3JhbSkKLSAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoZ3Jh
cGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwot
ICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAg
ICAgICAgaWYgKHByb2dyYW0pCi0gICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFjaGVkKCk7Ci0g
ICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFtKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJ2YWxpZGF0ZVByb2dyYW0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHYwKQotewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRy
aWIxZiIsIGluZGV4LCAxLCB2MCwgMC4wZiwgMC4wZiwgMS4wZik7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJB
cnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGlu
ZGV4LCB2LCAxKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAg
ICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCBzaXplLCAx
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKLXsKLSAgICB2ZXJ0ZXhBdHRy
aWJmSW1wbCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAsIHYxLCAwLjBmLCAxLjBmKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVy
dGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2Iiwg
aW5kZXgsIHYsIHNpemUsIDIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBH
QzNEZmxvYXQgdjIpCi17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjNmIiwg
aW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCi17
Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgMyk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgdmVydGV4QXR0
cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgc2l6ZSwgMyk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQot
ewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZiIsIGluZGV4LCA0LCB2MCwg
djEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRy
aWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCA0KTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRl
eEF0dHJpYjRmdiIsIGluZGV4LCB2LCBzaXplLCA0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6
ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlk
ZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllU
RToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlk
IHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhW
ZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6
ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUgfHwgb2Zmc2V0IDwgMCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIHNpemUsIHN0cmlkZSBvciBvZmZzZXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1l
bnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUsIHR5
cGUgYW5kIHN0cmlkZQotICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IHNpemVJbkJ5dGVzKHR5
cGUpOwotICAgIGlmICghdHlwZVNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW52
YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKChzdHJpZGUgJSB0
eXBlU2l6ZSkgfHwgKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkgJSB0eXBlU2l6ZSkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zmc2V0IG5vdCB2
YWxpZCBmb3IgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RzaXplaSBi
eXRlc1BlckVsZW1lbnQgPSBzaXplICogdHlwZVNpemU7Ci0KLSAgICBtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVsZW1lbnQsIHNp
emUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zm
c2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBv
aW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8
R0MzRGludHB0cj4ob2Zmc2V0KSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0KSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgsIGhl
aWdodCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250ZXh0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJjb250
ZXh0IGFscmVhZHkgbG9zdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250
ZXh0R3JvdXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29u
dGV4dE1vZGUgbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKLSAgICBtX2NvbnRleHRMb3N0TW9kZSA9
IG1vZGU7Ci0KLSAgICBpZiAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpIHsKLSAgICAgICAgLy8g
SW5mb3JtIHRoZSBlbWJlZGRlciB0aGF0IGEgbG9zdCBjb250ZXh0IHdhcyByZWNlaXZlZC4gSW4g
cmVzcG9uc2UsIHRoZSBlbWJlZGRlciBtaWdodAotICAgICAgICAvLyBkZWNpZGUgdG8gdGFrZSBh
Y3Rpb24gc3VjaCBhcyBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gdG8gdXNlIFdlYkdM
IGFnYWluLgotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50KCku
ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaWRMb3NlV2Vi
R0xDb250ZXh0KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3Rh
dHVzQVJCKCkpOwotICAgIH0KLQotICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKLQot
ICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgLy8gTWFrZSBhYnNvbHV0ZWx5IHN1
cmUgd2UgZG8gbm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRlZCB0ZXh0dXJlIG9yIGZyYW1l
YnVmZmVyLgotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmcoMCk7
Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOwotICAg
IH0KLQotICAgIC8vIFRoZXJlIGlzIG5vIGRpcmVjdCB3YXkgdG8gY2xlYXIgZXJyb3JzIGZyb20g
YSBHTCBpbXBsZW1lbnRhdGlvbiBhbmQKLSAgICAvLyBsb29waW5nIHVudGlsIGdldEVycm9yKCkg
YmVjb21lcyBOT19FUlJPUiBtaWdodCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGlmCi0gICAgLy8g
dGhlIGRyaXZlciBvciBjb250ZXh0IGltcGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4gU28sIGxvb3Ag
YSByZWFzb25hYmx5Ci0gICAgLy8gbGFyZ2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFueSBl
eGlzdGluZyBlcnJvcnMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewotICAg
ICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUikKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBDb25zb2xlRGlzcGxheVByZWZl
cmVuY2UgZGlzcGxheSA9IChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgPyBEaXNwbGF5SW5Db25z
b2xlOiBEb250RGlzcGxheUluQ29uc29sZTsKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBs
b3N0IiwgZGlzcGxheSk7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyByZXN0b3JhdGlvbiB1bmxlc3Mg
dGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVuCi0gICAgLy8gZGlzcGF0Y2hlZCBh
bmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgotICAgIG1fcmVzdG9yZUFsbG93ZWQg
PSBmYWxzZTsKLQotICAgIC8vIEFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGNvbnRl
eHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50Ci0gICAgLy8gdGhlIHNwZWMgYmVoYXZpb3Igb2Yg
cXVldWVpbmcgYSB0YXNrLgotICAgIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIuc3Rh
cnRPbmVTaG90KDApOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VSZXN0
b3JlQ29udGV4dCgpCi17Ci0gICAgaWYgKCFpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCBub3QgbG9zdCIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKSB7Ci0gICAgICAgIGlmICht
X2NvbnRleHRMb3N0TW9kZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJl
c3RvcmVDb250ZXh0IiwgImNvbnRleHQgcmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXN0b3JlVGltZXIuaXNBY3RpdmUoKSkK
LSAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi1QbGF0Zm9ybUxh
eWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAg
IHJldHVybiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KSA/IG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpIDogMDsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0
KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVj
dCogb2JqZWN0KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBtX2NvbnRl
eHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0KQotewot
ICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fY29udGV4dE9iamVjdHMucmVtb3ZlKG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0
KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBtX2NvbnRleHRPYmplY3Rz
LmFkZChvYmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5k
UmVtb3ZlQWxsT2JqZWN0cygpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKG1fY29udGV4dE9iamVjdHMuc2l6ZSgp
ID4gMCkgewotICAgICAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+OjppdGVyYXRvciBp
dCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKLSAgICAgICAgKCppdCktPmRldGFjaENvbnRl
eHQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYXNQZW5kaW5n
QWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnN0b3AoKQotewotICAgIGlmICghaXNDb250ZXh0TG9zdCgpICYmICFt
X2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgZm9yY2VMb3N0Q29udGV4dChT
eW50aGV0aWNMb3N0Q29udGV4dCk7Ci0gICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgp
OwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9v
bGVhblBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEYm9vbGVhbiB2YWx1ZSA9
IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci19Ci0KLVdlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNE
ZW51bSBwbmFtZSkKLXsKLSAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X1dSSVRFTUFTSykgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKDAsIDApOwotICAgIH0KLSAgICBHQzNEYm9vbGVhbiB2YWx1ZVs0XSA9IHsw
fTsKLSAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Ci0gICAgYm9vbCBi
b29sVmFsdWVbNF07Ci0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDQ7ICsraWkpCi0gICAgICAg
IGJvb2xWYWx1ZVtpaV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtpaV0pOwotICAgIHJldHVy
biBXZWJHTEdldEluZm8oYm9vbFZhbHVlLCA0KTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAg
R0MzRGZsb2F0IHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgJnZh
bHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLX0KLQotV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW50UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQot
ewotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5h
bWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci19Ci0KLVdlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQotewotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFt
ZSkKLXsKLSAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07Ci0gICAgbV9jb250ZXh0LT5nZXRG
bG9hdHYocG5hbWUsIHZhbHVlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIHN3aXRj
aCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJ
WkVfUkFOR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRI
X1JBTkdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgotICAgICAg
ICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORF9DT0xPUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9W
QUxVRToKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0MzRGVu
dW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAg
ICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVM6Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlZJRVdQT1JUOgotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCi17Ci0gICAgYm9vbCByZXNldEFj
dGl2ZVVuaXQgPSBmYWxzZTsKLSAgICBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25GbGFn
IGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25G
bGFnPigobV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRl
bnNpb25GbG9hdExpbmVhckVuYWJsZWQgOiAwKSB8IChtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25IYWxmRmxvYXRMaW5lYXJFbmFibGVk
IDogMCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5pdHMu
c2l6ZSgpOyArK2lpKSB7Ci0gICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUy
REJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1Vz
ZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKLSAgICAgICAgICAgIHx8IChtX3RleHR1cmVVbml0
c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJl
Q3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkpIHsKLSAg
ICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7Ci0gICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKLSAgICAgICAgICAgICAgICByZXNldEFj
dGl2ZVVuaXQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNldEFjdGl2ZVVuaXQp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOwotICAgICAg
ICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgV2ViR0xUZXh0dXJlKiB0ZXgyRDsKLSAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4
Q3ViZU1hcDsKLSAgICAgICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIG1zZyhTdHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVyZSB1bml0ICIpICsg
U3RyaW5nOjpudW1iZXIoaWkpCi0gICAgICAgICAgICAgICAgICAgICsgIiBpcyBub3QgcmVuZGVy
YWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21wYXRpYmxlIHRleHR1
cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgotICAgICAgICAgICAg
ICAgICAgICArICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUgd2l0aCBsaW5lYXIg
ZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxmLWZsb2F0IGxpbmVh
ciBleHRlbnNpb24gZW5hYmxlZC4iKTsKLSAgICAgICAgICAgICAgICBwcmludEdMV2FybmluZ1Rv
Q29uc29sZShmdW5jdGlvbk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAg
ICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgdGV4Q3Vi
ZU1hcCA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmlu
ZGluZy5nZXQoKTsKLSAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90ZXh0dXJlVW5pdHNb
aWldLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lv
bnMpKQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOwotICAgICAgICAgICAgaWYg
KG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJlVW5p
dHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVu
c2lvbnMpKQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhDdWJlTWFwKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKLSAgICAgICAgbV9jb250
ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCkKLXsKLSAg
ICB1bnNpZ25lZCBjaGFyIGJsYWNrW10gPSB7MCwgMCwgMCwgMjU1fTsKLSAgICBtX2JsYWNrVGV4
dHVyZTJEID0gY3JlYXRlVGV4dHVyZSgpOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmxhY2tUZXh0dXJlMkQtPm9iamVjdCgpKTsK
LSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwKTsKLSAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSBjcmVh
dGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUCwgbV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmplY3QoKSk7Ci0g
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
MSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250
ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2sp
OwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7Ci19Ci0KLWJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJD
b21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpCi17Ci0gICAgdW5zaWduZWQgbmVlZCA9
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KHRleEludGVybmFsRm9y
bWF0KTsKLSAgICB1bnNpZ25lZCBoYXZlID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxC
aXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3JtYXQpOwotICAgIHJldHVybiAobmVlZCAmIGhhdmUp
ID09IG5lZWQ7Ci19Ci0KLUdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkKLXsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICByZXR1cm4gbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7Ci0gICAgaWYgKG1fYXR0cmli
dXRlcy5hbHBoYSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwotICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwotfQotCi1pbnQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQotewotICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCi0gICAgICAgIHJl
dHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgpOwotICAgIHJl
dHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpIDog
bV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Ci19Ci0KLWlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKQotewot
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2Jq
ZWN0KCkpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZm
ZXJIZWlnaHQoKTsKLSAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVy
LT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkuaGVpZ2h0KCk7Ci19Ci0KLVdlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
dGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKLXsKLSAgICBXZWJHTFRleHR1cmUq
IHRleHR1cmUgPSBudWxscHRyOwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVu
aXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcuZ2V0KCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aOgotICAgICAgICBpZiAoIXVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVu
aXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UDoKLSAgICAgICAgaWYgKHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIH0KLSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZl
VGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1cmUiKTsKLSAgICByZXR1cm4gdGV4dHVyZTsKLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBjb25z
dCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2OwotICAgIGlmIChzdHJpbmcu
bGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJs
b2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
U2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KQotewot
ICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic2l6ZSA8IDAiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoIXZhbGlkYXRlQ2hhcmFj
dGVyKHN0cmluZ1tpXSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzdHJpbmcgbm90IEFTQ0lJ
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1
bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5D
RV9BTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9DT01QT05FTlQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3QgZW5h
YmxlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNS
R0JfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKLSAgICBkZWZh
dWx0OgotICAgICAgICBpZiAoKGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUIHx8IGZv
cm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKQotICAgICAgICAgICAgJiYgbV9l
eHRzUkdCKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4
dHVyZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgaWYgKG1fb2VzVGV4
dHVyZUZsb2F0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUhhbGZG
bG9hdCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1
cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF8yNF84OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgot
ICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFZlcmlmeSB0aGF0IHRo
ZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgotICAgIHN3aXRj
aCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxG
X0ZMT0FUX09FUykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9y
IGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6U1JHQl9FWFQ6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlw
ZSBmb3IgUkdCIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgotICAgICAgICBpZiAodHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAgICAgJiYgdHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNAotICAgICAgICAgICAgJiYg
dHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMQotICAgICAg
ICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYm
IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgIGlmICghbV93ZWJnbERl
cHRoVGV4dHVyZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERFUFRI
X0NPTVBPTkVOVCBub3QgZW5hYmxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhf
Q09NUE9ORU5UIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxldmVs
IG11c3QgYmUgMCBmb3IgREVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOwotICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lMIG5v
dCBlbmFibGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJTCBm
b3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAobGV2ZWwgPiAwKSB7Ci0gICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAg
Zm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgaWYgKGxldmVsIDwg
MCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEOgotICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2ZWwp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAg
ICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBUaGlzIGZ1bmN0aW9u
IG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQgZG9u
J3QKLSAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwuCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleEZ1bmNWYWxpZGF0
aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKLXsKLSAgICAv
LyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBjb21i
aW5hdGlvbi4KLSAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhUTUxJ
bWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKLSAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0
aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgotICAgIGlmICghdmFsaWRhdGVU
ZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpIHx8
ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVGb3JMZXZlbCA9IHBv
dygyLjAsIG1fbWF4VGV4dHVyZUxldmVsIC0gMSAtIGxldmVsKTsKLSAgICBzd2l0Y2ggKHRhcmdl
dCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGlm
ICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVyZVNp
emVGb3JMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQg
b2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWjoKLSAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFnZTJE
ICYmIHdpZHRoICE9IGhlaWdodCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9IGhl
aWdodCBmb3IgY3ViZSBtYXAiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBGb3IgdGV4SW1hZ2Ug
d2lkdGggPT0gaGVpZ2h0LgotICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2UgdGhhdCB3aWxsIGJl
IGNoZWNrZWQgd2hlbiBjaGVja2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGluIHJhbmdlLgotICAg
ICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGJvcmRlcikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAiYm9yZGVyICE9IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVU
ZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIHBp
eGVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51
bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKLXsKLSAgICBpZiAoIXBpeGVscykgewotICAgICAg
ICBpZiAoZGlzcG9zaXRpb24gPT0gTnVsbEFsbG93ZWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0aW9u
TmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBl
KCkgIT0gSlNDOjpUeXBlVWludDgpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBV
TlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGlmIChwaXhlbHMtPmdl
dFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
dHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJheSIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAot
ICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90
IEZsb2F0MzJBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VT
OiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Ci0gICAgICAgIC8vIEFzIHBlciB0aGUgc3BlY2lm
aWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdoZW4KLSAgICAgICAgLy8g
T0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgotICAgICAgICBpZiAocGl4ZWxzKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9BVF9PRVMgYnV0IEFycmF5
QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVzUmVxdWlyZWQ7
Ci0gICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVz
KGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5
dGVzUmVxdWlyZWQsIDApOwotICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1IpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7
Ci0gICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7Ci0gICAgICAgICAgZXJyb3Ig
PSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgs
IGhlaWdodCwgMSwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7Ci0gICAgICAgICAgaWYgKHBpeGVs
cy0+Ynl0ZUxlbmd0aCgpID09IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3Qgd2l0
aCBVTlBBQ0tfQUxJR05NRU5UID4gMSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmll
dyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKLXsKLSAgICByZXR1
cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KTsKLX0KLQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKLXsKLSAgICBp
ZiAoIXBpeGVscykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgYnl0ZXNSZXF1aXJlZCA9IDA7Ci0KLSAg
ICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
Ql9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdC
X0FNRDoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4Owot
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKLSAgICAgICAgICAgIGNvbnN0
IGludCBrQmxvY2tIZWlnaHQgPSA0OwotICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9zcyA9
ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKLSAgICAgICAgICAgIGlu
dCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8ga0Jsb2NrSGVp
Z2h0OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51bUJs
b2Nrc0Rvd24gKiBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBI
QV9BTUQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gMTY7
Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICAgICAgY29u
c3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzQWNyb3Nz
ID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOwotICAgICAgICAgICAg
aW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tI
ZWlnaHQ7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICogbnVt
QmxvY2tzRG93biAqIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4OwotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9j
a0hlaWdodCA9IDg7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRo
LCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiA0ICsgNykg
LyBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKLSAgICAgICAgewotICAg
ICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OwotICAgICAgICAgICAgY29uc3QgaW50
IGtCbG9ja1dpZHRoID0gMTY7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0g
ODsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dp
ZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAvIGtCbG9ja1Np
emU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSAhPSBieXRlc1JlcXVpcmVkKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZvciBk
aW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3Nl
ZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIGtC
bG9ja1dpZHRoID0gNDsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja0hlaWdodCA9IDQ7
Ci0gICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0YXJnZXQgPyBtX21heFRl
eHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7Ci0gICAgICAgIGNvbnN0IEdDM0Rz
aXplaSBtYXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVyZVNpemUgPj4gbGV2ZWw7Ci0g
ICAgICAgIGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0aCA9PSAxKSB8fCAobGV2ZWwg
JiYgd2lkdGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tXaWR0aCkgJiYgd2lkdGggPD0gbWF4
Q29tcHJlc3NlZERpbWVuc2lvbik7Ci0gICAgICAgIGJvb2wgaGVpZ2h0VmFsaWQgPSAobGV2ZWwg
JiYgaGVpZ2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQgPT0gMikgfHwgKCEoaGVpZ2h0ICUg
a0Jsb2NrSGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7Ci0gICAg
ICAgIGlmICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6
Ci0gICAgICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBwb3dlcnMgb2YgMi4KLSAgICAg
ICAgaWYgKCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBmb3Ig
bGV2ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4U3Vi
RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgV2ViR0xUZXh0
dXJlKiB0ZXgpCi17Ci0gICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwKSB7Ci0gICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIpOwotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKLSAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRo
ID0gNDsKLSAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgIGlmICgo
eG9mZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdodCkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBsZSBv
ZiA0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHdpZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKLSAgICAgICAg
ICAgIHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWxp
ZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICB9Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzogewotICAgICAgICBpZiAoeG9mZnNldCB8
fCB5b2Zmc2V0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlvZmZz
ZXQgbXVzdCBiZSB6ZXJvIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKLSAgICAg
ICAgICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3RpbmcgbGV2
ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdldCwg
bGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQ
T0lOVFM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9TVFJJUDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1A6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TElORVM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVA6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRSSUFOR0xFUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBkcmF3IG1vZGUiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
U3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBpZiAobV9z
dGVuY2lsTWFzayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5jUmVmICE9IG1f
c3RlbmNpbEZ1bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3RlbmNpbEZ1bmNN
YXNrQmFjaykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNrIHN0ZW5jaWxz
IHNldHRpbmdzIGRvIG5vdCBtYXRjaCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZ1bmMpCi17
Ci0gICAgc3dpdGNoIChmdW5jKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TkVWRVI6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpMRVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFQVRFUjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFVQUw6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpw
cmludEdMRXJyb3JUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICgh
bV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC0t
bV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQ7Ci0gICAgcHJpbnRXYXJuaW5nVG9Db25zb2xl
KG1lc3NhZ2UpOwotCi0gICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkKLSAg
ICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDogdG9vIG1hbnkgZXJyb3JzLCBubyBt
b3JlIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBjb25zb2xlIGZvciB0aGlzIGNvbnRl
eHQuIik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludFdhcm5pbmdUb0Nv
bnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghY2FudmFzKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgbWVzc2FnZSk7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVu
Y1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQpCi17Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIGF0dGFjaG1lbnQg
PiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKLSAgICAgICAgICAgICYmIGF0
dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlVOQ19BREQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVO
Q19TVUJUUkFDVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0VfU1VC
VFJBQ1Q6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6Ok1BWF9FWFQ6Ci0gICAgICAgIGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1JTl9F
WFQgfHwgbW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWluTWF4
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKLXsKLSAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01J
TlVTX0NPTlNUQU5UX0NPTE9SKQotICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
Q09OU1RBTlRfQUxQSEEpKQotICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09O
U1RBTlRfQ09MT1IpCi0gICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpD
T05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05T
VEFOVF9BTFBIQSkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNyYyBh
bmQgZHN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCi17Ci0gICAgc3dpdGNoIChjYXAp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDVUxMX0ZBQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
VEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U0FNUExFX0NPVkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
Y2FwYWJpbGl0eSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAgIGlmICghdikg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlv
bk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRN
aW5TaXplKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNp
emUpCi17Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYt
Pmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVp
IHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgcmV0dXJuIHZhbGlkYXRl
VW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYs
IHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAg
ICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRl
cnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0
aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkK
LXsKLSAgICBpZiAoIWxvY2F0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGxv
Y2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghdikgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8g
YXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAodHJhbnNwb3Nl
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwgKHNp
emUgJSByZXF1aXJlZE1pblNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
V2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFy
YW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gdXNhZ2UpCi17Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7Ci0gICAgc3dpdGNoICh0
YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZF
UjoKLSAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50
QXJyYXlCdWZmZXIoKS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSOgotICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlCdWZm
ZXIuZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBp
ZiAoIWJ1ZmZlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgc3dpdGNoICh1c2FnZSkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUQVRJQ19EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJB
VzoKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKLSAgICB9Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB1
c2FnZSIpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
SFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICgh
aW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBp
bWFnZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0IFVSTCYgdXJs
ID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7Ci0gICAgaWYgKHVybC5p
c051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIGltYWdlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlf
RVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7Ci0gICAgICAgIGVjID0g
U0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxW
aWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXZpZGVv
IHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKLSAgICAgICAgZWMgPSBTRUNVUklU
WV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBl
Y3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0Rm
bG9hdCB2MykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KLSAgICBp
ZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoZXhwZWN0
ZWRTaXplKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliMWYoaW5kZXgsIHYwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGYo
aW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotICAgIFZlcnRleEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0cmli
VmFsdWVbaW5kZXhdOwotICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7Ci0gICAgYXR0cmli
VmFsdWUudmFsdWVbMV0gPSB2MTsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOwotICAg
IGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgsIHYtPmRhdGEo
KSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4cGVj
dGVkU2l6ZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJp
bmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJbiBH
TCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlmIChpbmRleCB8
fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsK
LSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYo
aW5kZXgsIHYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YjNmdihpbmRleCwgdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAg
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJp
YlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0cmliVmFsdWUuaW5p
dFZhbHVlKCk7Ci0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytpaSkK
LSAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWldID0gdltpaV07Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCi17Ci0gICAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKLSAgICAKLSAgICBtX3ZlcnRleEF0
dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5v
YmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOwotICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQsIGZhbHNlLCAwLCAwKTsKLSAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCAwKTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KDApOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwotICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVsxXSA9IDAuMGY7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBmOwot
ICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKLSAgICBtX2ZvcmNlQXR0
cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUg
PSBmYWxzZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVydGV4
QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KQotewotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7Ci0gICAgY29uc3QgVmVydGV4QXR0cmli
VmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKLSAgICBpZiAoIW1f
Y3VycmVudFByb2dyYW0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIHVzaW5nVmVy
dGV4QXR0cmliMCA9IG1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7Ci0g
ICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMCkKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJl
Zm9yZSA9IHRydWU7Ci0gICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0ZXhBdHRyaWIw
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAgJiYg
IW1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
LT5vYmplY3QoKSk7Ci0gICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZlcnRl
eCArIDEpICogNCAqIHNpemVvZihHQzNEZmxvYXQpOwotICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+
IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJE
YXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFTaXplOwotICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZl
clJlZmlsbCA9IHRydWU7Ci0gICAgfQotICAgIGlmICh1c2luZ1ZlcnRleEF0dHJpYjAKLSAgICAg
ICAgJiYgKG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsCi0gICAgICAgICAgICB8fCBhdHRyaWJW
YWx1ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQotICAgICAgICAg
ICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVb
MV0KLSAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVydGV4QXR0cmli
MEJ1ZmZlclZhbHVlWzJdCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVszXSAhPSBt
X3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKLSAgICAgICAgYXV0byBidWZmZXJEYXRh
ID0gc3RkOjptYWtlX3VuaXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7Ci0g
ICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lpKSB7
Ci0gICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVswXTsK
LSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsx
XTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJWYWx1ZS52YWx1
ZVsyXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRyaWJWYWx1ZS52
YWx1ZVszXTsKLSAgICAgICAgfQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsw
XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVsxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwotICAgICAgICBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwotICAgICAgICBtX2Zv
cmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZl
clN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0YVNp
emUsIGJ1ZmZlckRhdGEuZ2V0KCkpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0
ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKLXsKLSAgICBjb25zdCBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIGlmIChzdGF0ZS5idWZm
ZXJCaW5kaW5nICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJv
KHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhB
dHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQs
IHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwotICAgIH0KLSAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3Ja
ZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKLXsKLSAgICBSZWZQdHI8V2ViR0xD
b250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOwotICAgIGNhbnZhcygp
LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKLSAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKTsKLSAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExvc3RD
b250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCi0gICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9y
ZUNvbnRleHQoKQotewotICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKLSAgICBpZiAoIW1fY29u
dGV4dExvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4
dCBpcyBub3QgcmVzdG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZQotICAg
IC8vIHdlYmdsY29udGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgotICAgIC8v
Ci0gICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1cCBmb3Ig
cmVhbCB2cy4gc3ludGhldGljIGxvc3QKLSAgICAvLyBjb250ZXh0IGV2ZW50cywgd2UgZG9uJ3Qg
aGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZwotICAgIC8vIHRo
ZSByZXRyeSBsb29wIGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCi0gICAgaWYgKCFtX3Jl
c3RvcmVBbGxvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgY29udGV4dExvc3RSZWFz
b24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QigpOwotCi0gICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgotICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0Qg
aW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5Ci0gICAgICAgIC8vIHN1cHBvcnQgR0xfQVJC
X3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCi0gICAgICAgIC8v
IFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVzZWQgdG8gZm9y
Y2UKLSAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6Ci0gICAgICAgIC8vIFRoZSBy
ZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0IHdhcwotICAg
ICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCi0gICAgICAgIHBy
aW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFnZSBj
YXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3JpbmcgdGhlIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJTk5PQ0VOVF9D
T05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBjb250ZXh0IHRv
IGJlIHJlc3RvcmVkLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VU5L
Tk9XTl9DT05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gV2Fybi4gSWRlYWxseSwgcHJvbXB0
IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCi0gICAgICAgIC8vIGNvbnRlbnQgb24g
dGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8KLSAgICAgICAg
Ly8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRpbnVlIHJ1bm5p
bmcKLSAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInllcyIgc2hvdWxk
IHdlIHN0YXJ0Ci0gICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgY29udGV4dC4K
LSAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50IG9u
IHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0Iik7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5k
b2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0dGlu
Z3MoKS53ZWJHTEVuYWJsZWQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyog
dmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0g
ICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3QoKTsKLSAgICBpZiAoIXJvb3QpCi0gICAg
ICAgIHJldHVybjsKLSAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdpbmRv
dygpOwotICAgIGlmICghaG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUobV9h
dHRyaWJ1dGVzLCBob3N0V2luZG93KSk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGlm
IChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCi0gICAgICAgICAgICBtX3Jl
c3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFwcGVu
IGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCi0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBu
ZXcgR3JhcGhpY3NDb250ZXh0M0QuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKLSAgICAgICAgRHJhd2luZ0J1
ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1dGVzLnByZXNl
cnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJhd2luZ0J1ZmZl
cjo6RGlzY2FyZDsKLSAgICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJlbWVudCBhbHBo
YSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDogRHJhd2luZ0J1
ZmZlcjo6T3BhcXVlOwotICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVyOjpj
cmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHByZXNlcnZlLCBh
bHBoYSk7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0KLQotICAgIG1f
Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwotICAgIHNldHVw
RmxhZ3MoKTsKLSAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwotICAgIGNhbnZhcygpLT5kaXNw
YXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29u
dGV4dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOwotfQotCi1TdHJpbmcgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4dCkgY29uc3QK
LXsKLSAgICBpZiAodGV4dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlTdHJp
bmcoKTsKLSAgICByZXR1cm4gdGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJ
bWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKLSAgICA6
IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5b
XT4oY2FwYWNpdHkpKQotICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKLXsKLX0KLQotSW1hZ2VC
dWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAw
OyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1
ZmZlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghYnVmKQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBidWJibGVUb0Zyb250KGkpOwotICAgICAgICByZXR1cm4gYnVmOwotICAg
IH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSwgMSk7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwotICAgIG1fYnVmZmVyc1tp
XSA9IFdURjo6bW92ZSh0ZW1wKTsKLQotICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNb
aV0uZ2V0KCk7Ci0gICAgYnViYmxlVG9Gcm9udChpKTsKLSAgICByZXR1cm4gYnVmOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxlVG9G
cm9udChpbnQgaWR4KQotewotICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCi0gICAg
ICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKLX0KLQotbmFtZXNwYWNlIHsK
LQotICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOwotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgotICAgICAgICAgICAgcmV0dXJu
ICJJTlZBTElEX1ZBTFVFIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT046Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9OIjsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKLSAgICAgICAgICAg
IHJldHVybiAiT1VUX09GX01FTU9SWSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAgcmV0dXJuICJJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKLSAgICAgICAgICAgIHJldHVybiAiQ09OVEVYVF9MT1NU
X1dFQkdMIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZv
cm1hdCgiV2ViR0wgRVJST1IoJTA0eCkiLCBlcnJvcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0g
Ly8gbmFtZXNwYWNlIGFub255bW91cwotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3lu
dGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5
KQotewotICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRpc3BsYXkgPT0g
RGlzcGxheUluQ29uc29sZSkgewotICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIp
ICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1lKSAr
ICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOwotICAgICAgcHJpbnRHTEVycm9yVG9Db25zb2xl
KHN0cik7Ci0gICAgfQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwot
fQotCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29uc29s
ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQotewot
ICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7Ci0gICAgICAgIFN0cmluZyBz
dHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0
cmluZyhkZXNjcmlwdGlvbik7Ci0gICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIpOwot
ICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRlc3Qo
KQotewotICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKLQotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1ZmZlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQ
dHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1
dGVzKCk7Ci0gICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+c3RlbmNpbCgp
OwotICAgIH0KLSAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
VEVTVCwKLSAgICAgICAgICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3RlbmNp
bEJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRpc2Fi
bGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSkK
LSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7Ci19Ci0KLUludFNpemUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2FudmFzU2l6ZSgpCi17Ci0gICAgcmV0dXJuIEludFNpemUo
Y2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBdKSwKLSAgICAg
ICAgICAgICAgICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3BvcnRE
aW1zWzFdKSk7Ci19Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhEcmF3
QnVmZmVycygpCi17Ci0gICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIGlmICghbV9tYXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhEcmF3
QnVmZmVycyk7Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhU
LCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKLSAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMgcmVx
dWlyZXMgTUFYX0NPTE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCi0gICAgcmV0
dXJuIHN0ZDo6bWluKG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7Ci19
Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRz
KCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhD
b2xvckF0dGFjaG1lbnRzKTsKLSAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVudW0g
YnVmKQotewotICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKLXsKLSAgICBFeGNlcHRp
b25Db2RlIGVjOwotICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCi17Ci0gICAgRXhjZXB0
aW9uQ29kZSBlYzsKLSAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5n
ZXQoKSwgZWMpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNEcmF3
QnVmZmVycygpCi17Ci0gICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVj
a2VkKSB7Ci0gICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSB0
cnVlOwotICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3QnVmZmVyczo6
c3VwcG9ydGVkKHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1N1cHBvcnRl
ZDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJbnN0YW5jZWQo
R0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkg
cHJpbWNvdW50KQotewotICAgIGlmICghcHJpbWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0
Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZURy
YXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHByaW1j
b3VudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAg
ICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xFUzJD
b21wbGlhbnQoKSkKLSAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVy
dGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmlj
dCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0YW5j
ZWQiLCB0cnVlKTsKLQotICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0KLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAm
JiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0
ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAg
ICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgZmFs
c2UpOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3Vu
dCkKLXsKLSAgICBpZiAoIXByaW1jb3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0g
MDsKLSAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQi
LCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgcHJpbWNvdW50KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJvb2wgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KSB7Ci0gICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxpZGF0ZUluZGV4
QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQp
LCBudW1FbGVtZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0
ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBpZiAoIWlzR0xFUzJOUE9U
U3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRz
SW5zdGFuY2VkIiwgdHJ1ZSk7Ci0KLSAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3RhbmNl
ZChtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgcHJp
bWNvdW50KTsKLQotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0
aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1
cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIGZhbHNlKTsKLSAgICBtYXJr
Q29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlzb3Ii
LCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRp
dmlzb3IpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNv
cik7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxNiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgV2ViR0xSZW5kZXJpbmdDb250ZXh0X2gKLSNkZWZpbmUgV2ViR0xSZW5kZXJp
bmdDb250ZXh0X2gKLQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVkZSA8bWVt
b3J5PgotI2luY2x1ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9JbnQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQU5HTEVJbnN0YW5jZWRBcnJheXM7Ci1jbGFzcyBFWFRC
bGVuZE1pbk1heDsKLWNsYXNzIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzsKLWNsYXNzIEVY
VFNoYWRlclRleHR1cmVMT0Q7Ci1jbGFzcyBFWFRzUkdCOwotY2xhc3MgRVhURnJhZ0RlcHRoOwot
Y2xhc3MgSFRNTEltYWdlRWxlbWVudDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Ci1jbGFzcyBJ
bWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBPRVNT
dGFuZGFyZERlcml2YXRpdmVzOwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0OwotY2xhc3MgT0VTVGV4
dHVyZUZsb2F0TGluZWFyOwotY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdDsKLWNsYXNzIE9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXI7Ci1jbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKLWNsYXNz
IE9FU0VsZW1lbnRJbmRleFVpbnQ7Ci1jbGFzcyBXZWJHTEFjdGl2ZUluZm87Ci1jbGFzcyBXZWJH
TEJ1ZmZlcjsKLWNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xDb250ZXh0T2Jq
ZWN0OwotY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLWNsYXNzIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOwotY2xh
c3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKLWNsYXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87
Ci1jbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLWNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlOwotY2xh
c3MgV2ViR0xEcmF3QnVmZmVyczsKLWNsYXNzIFdlYkdMRXh0ZW5zaW9uOwotY2xhc3MgV2ViR0xG
cmFtZWJ1ZmZlcjsKLWNsYXNzIFdlYkdMTG9zZUNvbnRleHQ7Ci1jbGFzcyBXZWJHTE9iamVjdDsK
LWNsYXNzIFdlYkdMUHJvZ3JhbTsKLWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwotY2xhc3MgV2Vi
R0xTaGFkZXI7Ci1jbGFzcyBXZWJHTFNoYXJlZE9iamVjdDsKLWNsYXNzIFdlYkdMU2hhZGVyUHJl
Y2lzaW9uRm9ybWF0OwotY2xhc3MgV2ViR0xUZXh0dXJlOwotY2xhc3MgV2ViR0xVbmlmb3JtTG9j
YXRpb247Ci1jbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwotCi10eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwotCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJs
aWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IGNy
ZWF0ZShIVE1MQ2FudmFzRWxlbWVudCosIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqKTsKLSAgICB2
aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpczNk
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2lmIFBMQVRGT1JNKFdJTikKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGFjY2VsZXJhdGVkIDNkIGNhbnZhcyBvbiBXaW5kb3dzLgot
ICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KLSNlbHNlCi0gICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotICAgIGludCBkcmF3aW5nQnVmZmVy
V2lkdGgoKSBjb25zdDsKLSAgICBpbnQgZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0OwotCi0g
ICAgdm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBH
QzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZy
YW1lYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgYmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBn
cmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSk7Ci0gICAgdm9pZCBibGVuZEVx
dWF0aW9uKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSk7Ci0gICAgdm9pZCBibGVuZEZ1bmMo
R0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3Rvcik7Ci0gICAgdm9pZCBibGVuZEZ1bmNT
ZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxw
aGEsIEdDM0RlbnVtIGRzdEFscGhhKTsKLQotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0
YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBH
QzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNE
ZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25n
IGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5
QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgR0MzRGVudW0gY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpOwotICAgIHZvaWQgY2xlYXIoR0MzRGJp
dGZpZWxkIG1hc2spOwotICAgIHZvaWQgY2xlYXJDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxv
YXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgY2xl
YXJEZXB0aChHQzNEZmxvYXQpOwotICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQpOwotICAg
IHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Ri
b29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKTsKLSAgICB2b2lkIGNvbXBpbGVTaGFkZXIo
V2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIGNvbXByZXNzZWRUZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwot
ICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwotCi0gICAgdm9pZCBjb3B5VGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlcik7Ci0gICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KTsKLQotICAgIFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZUJ1ZmZlcigpOwotICAg
IFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRlUHJvZ3JhbSgpOwotICAgIFBhc3NSZWZQdHI8
V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFBhc3NSZWZQdHI8
V2ViR0xTaGFkZXI+IGNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHZv
aWQgY3VsbEZhY2UoR0MzRGVudW0gbW9kZSk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJH
TEJ1ZmZlciopOwotICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciop
OwotICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKLSAgICB2b2lkIGRlbGV0
ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgIHZvaWQgZGVsZXRlU2hhZGVy
KFdlYkdMU2hhZGVyKik7Ci0gICAgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSopOwot
Ci0gICAgdm9pZCBkZXB0aEZ1bmMoR0MzRGVudW0pOwotICAgIHZvaWQgZGVwdGhNYXNrKEdDM0Ri
b29sZWFuKTsKLSAgICB2b2lkIGRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQg
ekZhcik7Ci0gICAgdm9pZCBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIq
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkaXNhYmxlKEdDM0RlbnVtIGNhcCk7Ci0gICAg
dm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIGRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwg
R0MzRHNpemVpIGNvdW50LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXAp
OwotICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGZpbmlzaCgpOwotICAgIHZvaWQgZmx1c2goKTsKLSAgICB2
b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlcios
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBXZWJHTFRl
eHR1cmUqLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmcm9udEZh
Y2UoR0MzRGVudW0gbW9kZSk7Ci0gICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJn
ZXQpOwotCi0gICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2ZUF0dHJpYihX
ZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NS
ZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIEdD
M0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBnZXRBdHRhY2hlZFNoYWRl
cnMoV2ViR0xQcm9ncmFtKiwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0QnVmZmVyUGFyYW1ldGVyKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNz
UmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0g
ICAgR0MzRGVudW0gZ2V0RXJyb3IoKTsKLSAgICBXZWJHTEV4dGVuc2lvbiogZ2V0RXh0ZW5zaW9u
KGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFBhcmFt
ZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0SW5mbyBn
ZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBX
ZWJHTEdldEluZm8gZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiwgR0MzRGVudW0gcG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTFNo
YWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lz
aW9uRm9ybWF0PiBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwg
R0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRT
aGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgVmVjdG9yPFN0
cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRUZXhQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFdlYkdMR2V0SW5mbyBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xV
bmlmb3JtTG9jYXRpb24+IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFZlcnRleEF0dHJp
YihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBs
b25nIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSk7Ci0KLSAgICB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKTsK
LSAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOwotICAgIGJvb2wgaXNDb250
ZXh0TG9zdCgpIGNvbnN0OwotICAgIEdDM0Rib29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXAp
OwotICAgIEdDM0Rib29sZWFuIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwotICAg
IEdDM0Rib29sZWFuIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKLSAgICBHQzNEYm9vbGVhbiBp
c1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgIEdDM0Rib29sZWFuIGlzU2hh
ZGVyKFdlYkdMU2hhZGVyKik7Ci0gICAgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFdlYkdMVGV4dHVy
ZSopOwotCi0gICAgdm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGxpbmtQcm9n
cmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHBpeGVsU3RvcmVp
KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKLSAgICB2b2lkIHBvbHlnb25PZmZzZXQo
R0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKTsKLSAgICB2b2lkIHJlYWRQaXhlbHMo
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci0gICAg
dm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBz
YW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7Ci0gICAg
dm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQpOwotICAgIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgY29uc3Qg
U3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0g
ZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbEZ1bmNT
ZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVp
bnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCk7Ci0gICAgdm9pZCBzdGVu
Y2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQg
c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7
Ci0gICAgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWls
LCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpOwotCi0gICAgdm9pZCB0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
Ci0gICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEltYWdlRGF0YSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwK
LSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
SW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52
YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lk
IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAg
ICB2b2lkIHRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGZsb2F0IHBhcmFtKTsKLSAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Ci0KLSAgICB2b2lkIHRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCB0ZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNlbmRpZgotCi0g
ICAgdm9pZCB1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RpbnQgeCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3Jt
MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHos
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1
bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3Jt
M2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQg
dywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIElu
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQz
MkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5z
cG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFs
dWUsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0
cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgeCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgs
IEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZl
cnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpOwot
ICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZh
bHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Ci0gICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVz
KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQg
dyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJh
eSogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYlBv
aW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJv
b2xlYW4gbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IHN0cmlkZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB2
aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KTsKLQotICAgIC8vIFdFQktJVF9sb3NlX2NvbnRleHQgc3VwcG9ydAotICAgIGVudW0g
TG9zdENvbnRleHRNb2RlIHsKLSAgICAgICAgLy8gTG9zdCBjb250ZXh0IG9jY3VycmVkIGF0IHRo
ZSBncmFwaGljcyBzeXN0ZW0gbGV2ZWwuCi0gICAgICAgIFJlYWxMb3N0Q29udGV4dCwKLQotICAg
ICAgICAvLyBMb3N0IGNvbnRleHQgcHJvdm9rZWQgYnkgV0VCS0lUX2xvc2VfY29udGV4dC4KLSAg
ICAgICAgU3ludGhldGljTG9zdENvbnRleHQKLSAgICB9OwotICAgIHZvaWQgZm9yY2VMb3N0Q29u
dGV4dChMb3N0Q29udGV4dE1vZGUpOwotICAgIHZvaWQgZm9yY2VSZXN0b3JlQ29udGV4dCgpOwot
ICAgIHZvaWQgbG9zZUNvbnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7IH0KLSAgICBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0R3JvdXAuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpOwotCi0gICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgb3ZlcnJpZGU7
Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKCk7Ci0KLSAgICB2b2lkIHJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCop
OwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKLSAg
ICAKLSAgICB1bnNpZ25lZCBnZXRNYXhWZXJ0ZXhBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gbV9t
YXhWZXJ0ZXhBdHRyaWJzOyB9Ci0KLSAgICAvLyBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIGV4dGVu
c2lvbiBmdW5jdGlvbnMuCi0gICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1v
ZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7
Ci0gICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNv
dW50KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1
aW50IGRpdmlzb3IpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJHTERyYXdCdWZm
ZXJzOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOwotICAgIGZyaWVuZCBjbGFz
cyBXZWJHTE9iamVjdDsKLSAgICBmcmllbmQgY2xhc3MgT0VTVmVydGV4QXJyYXlPYmplY3Q7Ci0g
ICAgZnJpZW5kIGNsYXNzIFdlYkdMRGVidWdTaGFkZXJzOwotICAgIGZyaWVuZCBjbGFzcyBXZWJH
TENvbXByZXNzZWRUZXh0dXJlQVRDOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEM7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RD
OwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxs
YmFjazsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKLQotICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzKTsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0Vs
ZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMpOwotICAgIHZvaWQgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKLSAgICB2b2lk
IHNldHVwRmxhZ3MoKTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAgIHZpcnR1YWwgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0
TmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJXZWJHTFJlbmRlcmluZ0NvbnRleHQiOyB9
Ci0KLSAgICB2b2lkIGFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOwotICAgIHZv
aWQgYWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKLSAgICB2b2lkIGRldGFj
aEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKLQotICAgIHZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4
dDNEKCk7Ci0gICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIC8vIFF1ZXJ5IHdo
ZXRoZXIgaXQgaXMgYnVpbHQgb24gdG9wIG9mIGNvbXBsaWFudCBHTEVTMiBpbXBsZW1lbnRhdGlv
bi4KLSAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSB7IHJldHVybiBtX2lzR0xFUzJDb21wbGlh
bnQ7IH0KLSAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gaXMgTlBPVCBzdHJp
Y3QuCi0gICAgYm9vbCBpc0dMRVMyTlBPVFN0cmljdCgpIHsgcmV0dXJuIG1faXNHTEVTMk5QT1RT
dHJpY3Q7IH0KLSAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVz
IGVycm9ycyBvbiBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3Nlcy4KLSAgICBib29sIGlzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSB7IHJldHVybiBtX2lzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7IH0KLSAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1w
bGVtZW50YXRpb24gaW5pdGlhbGl6ZXMgdGV4dHVyZXMvcmVuZGVyYnVmZmVycyB0byAwLgotICAg
IGJvb2wgaXNSZXNvdXJjZVNhZmUoKSB7IHJldHVybiBtX2lzUmVzb3VyY2VTYWZlOyB9Ci0gICAg
Ly8gUXVlcnkgaWYgZGVwdGhfc3RlbmNpbCBidWZmZXIgaXMgc3VwcG9ydGVkLgotICAgIGJvb2wg
aXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSB7IHJldHVybiBtX2lzRGVwdGhTdGVuY2lsU3VwcG9y
dGVkOyB9Ci0KLSAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9w
ZW5HTCBkYXRhIHR5cGVzCi0gICAgLy8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCi0gICAg
dW5zaWduZWQgaW50IHNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpOwotCi0gICAgLy8gQmFzaWMg
dmFsaWRhdGlvbiBvZiBjb3VudCBhbmQgb2Zmc2V0IGFnYWluc3QgbnVtYmVyIG9mIGVsZW1lbnRz
IGluIGVsZW1lbnQgYXJyYXkgYnVmZmVyCi0gICAgYm9vbCB2YWxpZGF0ZUVsZW1lbnRBcnJheVNp
emUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCk7Ci0K
LSAgICAvLyBDb25zZXJ2YXRpdmUgYnV0IHF1aWNrIGluZGV4IHZhbGlkYXRpb24KLSAgICBib29s
IHZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCYg
bnVtRWxlbWVudHNSZXF1aXJlZCk7Ci0KLSAgICAvLyBQcmVjaXNlIGJ1dCBzbG93IGluZGV4IHZh
bGlkYXRpb24gLS0gb25seSBkb25lIGlmIGNvbnNlcnZhdGl2ZSBjaGVja3MgZmFpbAotICAgIGJv
b2wgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCk7Ci0g
ICAgYm9vbCB2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1
bnNpZ25lZCBwcmltaXRpdmVDb3VudCA9IDApOwotCi0gICAgYm9vbCB2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KGNvbnN0IGNoYXIqLCBXZWJHTE9iamVjdCopOwotCi0gICAgYm9vbCB2YWxpZGF0ZURyYXdB
cnJheXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZp
cnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpOwotICAgIGJvb2wgdmFs
aWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2ln
bmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1jb3VudCk7Ci0KLSAgICAvLyBBZGRzIGEg
Y29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdC4KLSAgICB2b2lkIGFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEdDM0RlbnVtKTsKLQotICAgIFBhc3NSZWZQdHI8SW1hZ2U+IGRyYXdJbWFnZUludG9C
dWZmZXIoSW1hZ2UqLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3Rv
cik7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgUGFzc1JlZlB0cjxJbWFnZT4gdmlkZW9GcmFt
ZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIEJhY2tpbmdTdG9yZUNvcHksIEV4Y2VwdGlvbkNv
ZGUmKTsKLSNlbmRpZgotCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7
Ci0gICAgUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBtX2NvbnRleHRHcm91cDsKLQotICAgIC8v
IE9wdGlvbmFsIHN0cnVjdHVyZSBmb3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwgaW5z
dGVhZCBvZiBkaXJlY3RseQotICAgIC8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRleHQu
Ci0gICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKLQotICAgIC8vIERp
c3BhdGNoZXMgYSBjb250ZXh0IGxvc3QgZXZlbnQgb25jZSBpdCBpcyBkZXRlcm1pbmVkIHRoYXQg
b25lIGlzIG5lZWRlZC4KLSAgICAvLyBUaGlzIGlzIHVzZWQgYm90aCBmb3Igc3ludGhldGljIGFu
ZCByZWFsIGNvbnRleHQgbG9zc2VzLiBGb3IgcmVhbCBvbmVzLCBpdCdzCi0gICAgLy8gbGlrZWx5
IHRoYXQgdGhlcmUncyBubyBKYXZhU2NyaXB0IG9uIHRoZSBzdGFjaywgYnV0IHRoYXQgbWlnaHQg
YmUgZGVwZW5kZW50Ci0gICAgLy8gb24gaG93IGV4YWN0bHkgdGhlIHBsYXRmb3JtIGRpc2NvdmVy
cyB0aGF0IHRoZSBjb250ZXh0IHdhcyBsb3N0LiBGb3IgYmV0dGVyCi0gICAgLy8gcG9ydGFiaWxp
dHkgd2UgYWx3YXlzIGRlZmVyIHRoZSBkaXNwYXRjaCBvZiB0aGUgZXZlbnQuCi0gICAgVGltZXIg
bV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcjsKLSAgICBib29sIG1fcmVzdG9yZUFsbG93
ZWQ7Ci0gICAgVGltZXIgbV9yZXN0b3JlVGltZXI7Ci0KLSAgICBib29sIG1fbmVlZHNVcGRhdGU7
Ci0gICAgYm9vbCBtX21hcmtlZENhbnZhc0RpcnR5OwotICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0
T2JqZWN0Kj4gbV9jb250ZXh0T2JqZWN0czsKLQotICAgIC8vIExpc3Qgb2YgYm91bmQgVkJPJ3Mu
IFVzZWQgdG8gbWFpbnRhaW4gaW5mbyBhYm91dCBzaXplcyBmb3IgQVJSQVlfQlVGRkVSIGFuZCBz
dG9yZWQgdmFsdWVzIGZvciBFTEVNRU5UX0FSUkFZX0JVRkZFUgotICAgIFJlZlB0cjxXZWJHTEJ1
ZmZlcj4gbV9ib3VuZEFycmF5QnVmZmVyOwotICAgIAotICAgIFJlZlB0cjxXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTPiBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsKLSAgICBSZWZQdHI8V2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0OwotICAgIHZv
aWQgc2V0Qm91bmRWZXJ0ZXhBcnJheU9iamVjdChQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM+IGFycmF5T2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKGFycmF5T2JqZWN0KQot
ICAgICAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gYXJyYXlPYmplY3Q7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1fZGVmYXVs
dFZlcnRleEFycmF5T2JqZWN0OwotICAgIH0KLSAgICAKLSAgICBjbGFzcyBWZXJ0ZXhBdHRyaWJW
YWx1ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGluaXRWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICB2b2lkIGluaXRWYWx1ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbHVlWzBdID0gMC4w
ZjsKLSAgICAgICAgICAgIHZhbHVlWzFdID0gMC4wZjsKLSAgICAgICAgICAgIHZhbHVlWzJdID0g
MC4wZjsKLSAgICAgICAgICAgIHZhbHVlWzNdID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzRdOwotICAgIH07Ci0gICAgVmVjdG9yPFZlcnRleEF0
dHJpYlZhbHVlPiBtX3ZlcnRleEF0dHJpYlZhbHVlOwotICAgIHVuc2lnbmVkIG1fbWF4VmVydGV4
QXR0cmliczsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsK
LSAgICBsb25nIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemU7Ci0gICAgR0MzRGZsb2F0IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzRdOwotICAgIGJvb2wgbV9mb3JjZUF0dHJpYjBCdWZmZXJS
ZWZpbGw7Ci0gICAgYm9vbCBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlOwotCi0gICAgUmVmUHRy
PFdlYkdMUHJvZ3JhbT4gbV9jdXJyZW50UHJvZ3JhbTsKLSAgICBSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gbV9mcmFtZWJ1ZmZlckJpbmRpbmc7Ci0gICAgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVy
PiBtX3JlbmRlcmJ1ZmZlckJpbmRpbmc7Ci0gICAgc3RydWN0IFRleHR1cmVVbml0U3RhdGUgewot
ICAgICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXh0dXJlMkRCaW5kaW5nOwotICAgICAgICBS
ZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7Ci0gICAgfTsKLSAgICBW
ZWN0b3I8VGV4dHVyZVVuaXRTdGF0ZT4gbV90ZXh0dXJlVW5pdHM7Ci0gICAgdW5zaWduZWQgbG9u
ZyBtX2FjdGl2ZVRleHR1cmVVbml0OwotCi0gICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFj
a1RleHR1cmUyRDsKLSAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZUN1YmVN
YXA7Ci0KLSAgICBWZWN0b3I8R0MzRGVudW0+IG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwot
Ci0gICAgLy8gRml4ZWQtc2l6ZSBjYWNoZSBvZiByZXVzYWJsZSBpbWFnZSBidWZmZXJzIGZvciB2
aWRlbyB0ZXhJbWFnZTJEIGNhbGxzLgotICAgIGNsYXNzIExSVUltYWdlQnVmZmVyQ2FjaGUgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgTFJVSW1hZ2VCdWZmZXJDYWNoZShpbnQgY2FwYWNpdHkpOwot
ICAgICAgICAvLyBUaGUgcG9pbnRlciByZXR1cm5lZCBpcyBvd25lZCBieSB0aGUgaW1hZ2UgYnVm
ZmVyIG1hcC4KLSAgICAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKGNvbnN0IEludFNpemUm
IHNpemUpOwotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgYnViYmxlVG9Gcm9udChpbnQgaWR4
KTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5b
XT4gbV9idWZmZXJzOwotICAgICAgICBpbnQgbV9jYXBhY2l0eTsKLSAgICB9OwotICAgIExSVUlt
YWdlQnVmZmVyQ2FjaGUgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlOwotCi0gICAgR0MzRGludCBtX21h
eFRleHR1cmVTaXplOwotICAgIEdDM0RpbnQgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7Ci0gICAg
R0MzRGludCBtX21heFJlbmRlcmJ1ZmZlclNpemU7Ci0gICAgR0MzRGludCBtX21heFZpZXdwb3J0
RGltc1syXTsKLSAgICBHQzNEaW50IG1fbWF4VGV4dHVyZUxldmVsOwotICAgIEdDM0RpbnQgbV9t
YXhDdWJlTWFwVGV4dHVyZUxldmVsOwotCi0gICAgR0MzRGludCBtX21heERyYXdCdWZmZXJzOwot
ICAgIEdDM0RpbnQgbV9tYXhDb2xvckF0dGFjaG1lbnRzOwotICAgIEdDM0RlbnVtIG1fYmFja0Ry
YXdCdWZmZXI7Ci0gICAgYm9vbCBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2Vk
OwotICAgIGJvb2wgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZDsKLQotICAgIEdDM0RpbnQgbV9wYWNr
QWxpZ25tZW50OwotICAgIEdDM0RpbnQgbV91bnBhY2tBbGlnbm1lbnQ7Ci0gICAgYm9vbCBtX3Vu
cGFja0ZsaXBZOwotICAgIGJvb2wgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhOwotICAgIEdDM0Rl
bnVtIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb247Ci0gICAgYm9vbCBtX2NvbnRleHRMb3N0
OwotICAgIExvc3RDb250ZXh0TW9kZSBtX2NvbnRleHRMb3N0TW9kZTsKLSAgICBHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Ci0KLSAgICBib29sIG1fbGF5ZXJDbGVh
cmVkOwotICAgIEdDM0RmbG9hdCBtX2NsZWFyQ29sb3JbNF07Ci0gICAgYm9vbCBtX3NjaXNzb3JF
bmFibGVkOwotICAgIEdDM0RmbG9hdCBtX2NsZWFyRGVwdGg7Ci0gICAgR0MzRGludCBtX2NsZWFy
U3RlbmNpbDsKLSAgICBHQzNEYm9vbGVhbiBtX2NvbG9yTWFza1s0XTsKLSAgICBHQzNEYm9vbGVh
biBtX2RlcHRoTWFzazsKLQotICAgIGJvb2wgbV9zdGVuY2lsRW5hYmxlZDsKLSAgICBHQzNEdWlu
dCBtX3N0ZW5jaWxNYXNrLCBtX3N0ZW5jaWxNYXNrQmFjazsKLSAgICBHQzNEaW50IG1fc3RlbmNp
bEZ1bmNSZWYsIG1fc3RlbmNpbEZ1bmNSZWZCYWNrOyAvLyBOb3RlIHRoYXQgdGhlc2UgYXJlIHRo
ZSB1c2VyIHNwZWNpZmllZCB2YWx1ZXMsIG5vdCB0aGUgaW50ZXJuYWwgY2xhbXBlZCB2YWx1ZS4K
LSAgICBHQzNEdWludCBtX3N0ZW5jaWxGdW5jTWFzaywgbV9zdGVuY2lsRnVuY01hc2tCYWNrOwot
Ci0gICAgYm9vbCBtX2lzR0xFUzJDb21wbGlhbnQ7Ci0gICAgYm9vbCBtX2lzR0xFUzJOUE9UU3Ry
aWN0OwotICAgIGJvb2wgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzOwot
ICAgIGJvb2wgbV9pc1Jlc291cmNlU2FmZTsKLSAgICBib29sIG1faXNEZXB0aFN0ZW5jaWxTdXBw
b3J0ZWQ7Ci0gICAgYm9vbCBtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZDsKLQotICAgIGJvb2wg
bV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZTsKLSAgICBpbnQgbV9udW1HTEVycm9yc1RvQ29u
c29sZUFsbG93ZWQ7Ci0KLSAgICAvLyBBIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBjYW4gYmUgY3Jl
YXRlZCBpbiBhIHN0YXRlIHdoZXJlIGl0IGFwcGVhcnMgYXMKLSAgICAvLyBhIHZhbGlkIGFuZCBh
Y3RpdmUgY29udGV4dCwgYnV0IHdpbGwgbm90IGV4ZWN1dGUgYW55IGltcG9ydGFudCBvcGVyYXRp
b25zCi0gICAgLy8gdW50aWwgaXRzIGxvYWQgcG9saWN5IGlzIGNvbXBsZXRlbHkgcmVzb2x2ZWQu
Ci0gICAgYm9vbCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb247Ci0gICAgYm9vbCBtX2hhc1Jl
cXVlc3RlZFBvbGljeVJlc29sdXRpb247Ci0gICAgYm9vbCBpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCk7Ci0KLSAgICAvLyBFbmFibGVkIGV4dGVuc2lvbiBvYmplY3RzLgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxFWFRGcmFnRGVwdGg+IG1fZXh0RnJhZ0RlcHRoOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxF
WFRCbGVuZE1pbk1heD4gbV9leHRCbGVuZE1pbk1heDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RVhU
c1JHQj4gbV9leHRzUkdCOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWM+IG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxFWFRTaGFkZXJUZXh0dXJlTE9EPiBtX2V4dFNoYWRlclRleHR1cmVMT0Q7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE9FU1RleHR1cmVGbG9hdD4gbV9vZXNUZXh0dXJlRmxvYXQ7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE9FU1RleHR1cmVGbG9hdExpbmVhcj4gbV9vZXNUZXh0dXJlRmxvYXRMaW5l
YXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU1RleHR1cmVIYWxmRmxvYXQ+IG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVh
cj4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNT
dGFuZGFyZERlcml2YXRpdmVzPiBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPE9FU1ZlcnRleEFycmF5T2JqZWN0PiBtX29lc1ZlcnRleEFycmF5T2JqZWN0Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNFbGVtZW50SW5kZXhVaW50PiBtX29lc0VsZW1lbnRJbmRl
eFVpbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMTG9zZUNvbnRleHQ+IG1fd2ViZ2xMb3Nl
Q29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbz4gbV93
ZWJnbERlYnVnUmVuZGVyZXJJbmZvOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlYnVnU2hh
ZGVycz4gbV93ZWJnbERlYnVnU2hhZGVyczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM+IG1fd2ViZ2xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViR0xEZXB0aFRleHR1cmU+IG1fd2ViZ2xEZXB0aFRleHR1cmU7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkdMRHJhd0J1ZmZlcnM+IG1fd2ViZ2xEcmF3QnVmZmVyczsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8QU5HTEVJbnN0YW5jZWRBcnJheXM+IG1fYW5nbGVJbnN0YW5jZWRBcnJheXM7Ci0KLSAg
ICAvLyBIZWxwZXJzIGZvciBnZXRQYXJhbWV0ZXIgYW5kIG90aGVycwotICAgIFdlYkdMR2V0SW5m
byBnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0Qm9v
bGVhbkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0RmxvYXRQ
YXJhbWV0ZXIoR0MzRGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRJbnRQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihHQzNEZW51
bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51
bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0p
OwotCi0gICAgLy8gQ2xlYXIgdGhlIGJhY2tidWZmZXIgaWYgaXQgd2FzIGNvbXBvc2l0ZWQgc2lu
Y2UgdGhlIGxhc3Qgb3BlcmF0aW9uLgotICAgIC8vIGNsZWFyTWFzayBpcyBzZXQgdG8gdGhlIGJp
dGZpZWxkIG9mIGFueSBjbGVhciB0aGF0IHdvdWxkIGhhcHBlbiBhbnl3YXkgYXQgdGhpcyB0aW1l
Ci0gICAgLy8gYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhhdCBjbGVhciBpcyBu
b3cgdW5uZWNlc3NhcnkuCi0gICAgYm9vbCBjbGVhcklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQg
Y2xlYXJNYXNrID0gMCk7Ci0KLSAgICAvLyBIZWxwZXIgdG8gcmVzdG9yZSBzdGF0ZSB0aGF0IGNs
ZWFyaW5nIHRoZSBmcmFtZWJ1ZmZlciBtYXkgZGVzdHJveS4KLSAgICB2b2lkIHJlc3RvcmVTdGF0
ZUFmdGVyQ2xlYXIoKTsKLQotICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBH
cmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkRC
YXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291
cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsK
LQotICAgIHZvaWQgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqLCBib29sKTsK
LQotICAgIHZvaWQgY3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7Ci0KLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gZm9yIGNvcHlUZXh7U3VifUltYWdlLCBjaGVjayB3aGV0aGVyIHRoZSBp
bnRlcm5hbGZvcm1hdAotICAgIC8vIGFuZCB0aGUgY29sb3IgYnVmZmVyIGZvcm1hdCBvZiB0aGUg
Y3VycmVudCBib3VuZCBmcmFtZWJ1ZmZlciBjb21iaW5hdGlvbgotICAgIC8vIGlzIHZhbGlkLgot
ICAgIGJvb2wgaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChH
QzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpOwot
Ci0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIncyBj
b2xvciBidWZmZXIgZm9ybWF0LgotICAgIEdDM0RlbnVtIGdldEJvdW5kRnJhbWVidWZmZXJDb2xv
ckZvcm1hdCgpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJh
bWVidWZmZXIncyB3aWR0aC4KLSAgICBpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCk7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGhl
aWdodC4KLSAgICBpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZlcmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aCBvZiB1bmlmb3JtIGFu
ZCBhdHRyaWJ1dGUgbG9jYXRpb25zLgotICAgIGJvb2wgdmFsaWRhdGVMb2NhdGlvbkxlbmd0aChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHNpemUgaXMgbm9uLW5lZ2F0aXZlLgotICAgIC8vIEdlbmVy
YXRlIEdMIGVycm9yIGFuZCByZXR1cm4gZmFsc2UgZm9yIG5lZ2F0aXZlIGlucHV0czsgb3RoZXJ3
aXNlLCByZXR1cm4gdHJ1ZS4KLSAgICBib29sIHZhbGlkYXRlU2l6ZShjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byBjaGVjayBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGJlbG9uZyB0byB0aGUK
LSAgICAvLyBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbiBHTFNMIEVTIDEuMCBzcGVjIHNlY3Rp
b24gMy4xLgotICAgIGJvb2wgdmFsaWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBTdHJpbmcmKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0YXJn
ZXQgYW5kIHRleHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KLSAgICAvLyBHZW5lcmF0ZSBHTCBl
cnJvcnMgYW5kIHJldHVybiAwIGlmIHRhcmdldCBpcyBpbnZhbGlkIG9yIHRleHR1cmUgYm91bmQg
aXMKLSAgICAvLyBudWxsLiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHRleHR1cmUgYm91bmQgdG8g
dGhlIHRhcmdldC4KLSAgICBXZWJHTFRleHR1cmUqIHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNG
b3JDdWJlTWFwKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBmb3Jt
YXQvdHlwZSBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCi0gICAgLy8gR2VuZXJh
dGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQu
Ci0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKTsK
LQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBmb3IgZnVuY3Rp
b25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCBy
ZXR1cm5zIGZhbHNlIGlmIGxldmVsIGlzIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1
bmNMZXZlbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCk7Ci0KLSAgICBlbnVtIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIHsKLSAg
ICAgICAgTm90VGV4U3ViSW1hZ2UyRCwKLSAgICAgICAgVGV4U3ViSW1hZ2UyRCwKLSAgICB9Owot
Ci0gICAgZW51bSBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgewotICAgICAgICBTb3VyY2VB
cnJheUJ1ZmZlclZpZXcsCi0gICAgICAgIFNvdXJjZUltYWdlRGF0YSwKLSAgICAgICAgU291cmNl
SFRNTEltYWdlRWxlbWVudCwKLSAgICAgICAgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsCi0gICAg
ICAgIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsCi0gICAgfTsKLQotICAgIC8vIEhlbHBlciBmdW5j
dGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIGNoZWNrIGlmIHRoZSBpbnB1dCBmb3JtYXQvdHlw
ZS9sZXZlbC90YXJnZXQvd2lkdGgvaGVpZ2h0L2JvcmRlci94b2Zmc2V0L3lvZmZzZXQgYXJlIHZh
bGlkLgotICAgIC8vIE90aGVyd2lzZSwgaXQgd291bGQgcmV0dXJuIHF1aWNrbHkgd2l0aG91dCBk
b2luZyBvdGhlciB3b3JrLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxpZGF0
aW9uU291cmNlVHlwZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLAotICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
Y2hlY2sgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2Uu
Ci0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRl
cnMgYXJlIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSk7Ci0KLSAgICBlbnVtIE51bGxEaXNwb3NpdGlv
biB7Ci0gICAgICAgIE51bGxBbGxvd2VkLAotICAgICAgICBOdWxsTm90QWxsb3dlZAotICAgIH07
Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZ2l2ZW4gQXJy
YXlCdWZmZXJWaWV3Ci0gICAgLy8gaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSBhbmQgY29udGFpbnMg
ZW5vdWdoIGRhdGEgZm9yIHRoZSB0ZXhJbWFnZSBjYWxsLgotICAgIC8vIEdlbmVyYXRlcyBHTCBl
cnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJv
b2wgdmFsaWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQg
bGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1
ZmZlclZpZXcqIHBpeGVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVsbERpc3Bv
c2l0aW9uKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhIGdpdmVuIHRl
eHR1cmUgZm9ybWF0IGlzIHNldHRhYmxlIGFzIGluCi0gICAgLy8geW91IGNhbiBzdXBwbHkgZGF0
YSB0byB0ZXhJbWFnZTJELCBvciBjYWxsIHRleEltYWdlMkQsIGNvcHlUZXhJbWFnZTJEIGFuZAot
ICAgIC8vIGNvcHlUZXhTdWJJbWFnZTJELgotICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQg
cmV0dXJucyBmYWxzZSBpZiB0aGUgZm9ybWF0IGlzIG5vdCBzZXR0YWJsZS4KLSAgICBib29sIHZh
bGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBmb3JtYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNz
ZWQgdGV4dHVyZSBkYXRhIGlzIGNvcnJlY3Qgc2l6ZQotICAgIC8vIGZvciB0aGUgZ2l2ZW4gZm9y
bWF0IGFuZCBkaW1lbnNpb25zLgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0Rh
dGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZl
clZpZXcqIHBpeGVscyk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcg
Y29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdHMuCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRU
ZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2
YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1cmUgZGltZW5zaW9ucyBhcmUgdmFsaWQgZm9yCi0gICAg
Ly8gdGhlIGdpdmVuIGZvcm1hdC4KLSAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVu
c2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1
cmUgZGltZW5zaW9ucyBhcmUgdmFsaWQgZm9yCi0gICAgLy8gdGhlIGdpdmVuIGZvcm1hdC4KLSAg
ICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgV2ViR0xUZXh0dXJlKik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUg
bW9kZSBmb3IgZHJhd3tBcnJheXMvRWxlbWVudHN9LgotICAgIGJvb2wgdmFsaWRhdGVEcmF3TW9k
ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSBpZiBmcm9udC9iYWNrIHN0ZW5jaWxNYXNrIGFuZCBzdGVuY2ls
RnVuYyBzZXR0aW5ncyBhcmUgdGhlIHNhbWUuCi0gICAgYm9vbCB2YWxpZGF0ZVN0ZW5jaWxTZXR0
aW5ncyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHZhbGlkYXRlIHN0ZW5jaWwgZnVuYy4KLSAgICBib29sIHZhbGlkYXRlU3RlbmNpbEZ1bmMo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIHRleFBhcmFtZXRlcmYgYW5kIHRleFBhcmFtZXRlcmkuCi0gICAgdm9pZCB0ZXhQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFt
aSwgR0MzRGludCBwYXJhbWYsIGJvb2wgaXNGbG9hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gcHJpbnQgR0wgZXJyb3JzIHRvIGNvbnNvbGUuCi0gICAgdm9pZCBwcmludEdMRXJyb3JU
b0NvbnNvbGUoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwcmludEdMV2FybmluZ1RvQ29uc29s
ZShjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogcmVhc29uKTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byBwcmludCB3YXJuaW5ncyB0byBjb25zb2xlLiBDdXJyZW50bHkKLSAg
ICAvLyB1c2VkIG9ubHkgdG8gd2FybiBhYm91dCB1c2Ugb2Ygb2Jzb2xldGUgZnVuY3Rpb25zLgot
ICAgIHZvaWQgcHJpbnRXYXJuaW5nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZyYW1lYnVm
ZmVyIGZ1bmN0aW9ucy4KLSAgICAvLyBHZW5lcmF0ZSBHTCBlcnJvciBpZiBwYXJhbWV0ZXJzIGFy
ZSBpbGxlZ2FsLgotICAgIGJvb2wgdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBlcXVhdGlv
biBtb2RlLgotICAgIGJvb2wgdmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRl
IGJsZW5kIGZ1bmMgZmFjdG9ycy4KLSAgICBib29sIHZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KTsKLQot
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhIEdMIGNhcGFiaWxpdHkuCi0gICAg
Ym9vbCB2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVy
cyBmb3IgdW5pZm9ybSBmdW5jdGlvbnMuCi0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
LCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiosIEludDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiosIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBtb2QpOwotICAgIGJv
b2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBG
bG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgdm9pZCosIEdDM0RzaXplaSwgR0Mz
RHNpemVpIG1vZCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgcGFyYW1l
dGVycyBmb3IgYnVmZmVyRGF0YS4KLSAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgYm91bmQgYnVm
ZmVyIHRvIHRhcmdldCwgb3IgMCBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIFdlYkdM
QnVmZmVyKiB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSk7Ci0KLSAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkg
YW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KLSAgICBib29sIHZhbGlkYXRlSFRNTEltYWdlRWxl
bWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0
byBtYWtlIHN1cmUgY2FudmFzIGlzIHJlYWR5IGFuZCB3b3VsZG4ndCB0YWludCBPcmlnaW4uCi0g
ICAgYm9vbCB2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSNpZiBFTkFCTEUoVklE
RU8pCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBz
dXJlIHZpZGVvIGlzIHJlYWR5IHdvdWxkbid0IHRhaW50IE9yaWdpbi4KLSAgICBib29sIHZhbGlk
YXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxWaWRlb0Vs
ZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jZW5kaWYKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
bnMgZm9yIHZlcnRleEF0dHJpYk5me3Z9LgotICAgIHZvaWQgdmVydGV4QXR0cmliZkltcGwoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVk
U2l6ZSwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KTsKLSAgICB2
b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50
IGluZGV4LCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKLSAgICB2b2lk
IHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwotCi0g
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBkZWxldGUqIChkZWxldGVCdWZmZXIsIGRlbGV0ZVBy
b2dyYW0sIGV0YykgZnVuY3Rpb25zLgotICAgIC8vIFJldHVybiBmYWxzZSBpZiBjYWxsZXIgc2hv
dWxkIHJldHVybiB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4KLSAgICBib29sIGRlbGV0ZU9i
amVjdChXZWJHTE9iamVjdCopOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBiaW5kKiAo
YmluZEJ1ZmZlciwgYmluZFRleHR1cmUsIGV0YykgYW5kIHVzZVByb2dyYW0uCi0gICAgLy8gSWYg
dGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGRlbGV0ZWQsIHNldCBkZWxldGVkIHRvIHRydWUg
dXBvbiByZXR1cm4uCi0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJu
IHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLgotICAgIGJvb2wgY2hlY2tPYmplY3RUb0JlQm91
bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCosIGJvb2wmIGRlbGV0ZWQp
OwotCi0gICAgLy8gSGVscGVycyBmb3Igc2ltdWxhdGluZyB2ZXJ0ZXhBdHRyaWIwCi0gICAgdm9p
ZCBpbml0VmVydGV4QXR0cmliMCgpOwotICAgIGJvb2wgc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdD
M0RzaXplaSBudW1WZXJ0ZXgpOwotICAgIHZvaWQgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0
cmliMFNpbXVsYXRpb24oKTsKLQotICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCk7
Ci0gICAgLy8gSGVscGVyIGZvciByZXN0b3JhdGlvbiBhZnRlciBjb250ZXh0IGxvc3QuCi0gICAg
dm9pZCBtYXliZVJlc3RvcmVDb250ZXh0KCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgaWYgd2UgYXJl
IHJ1bm5pbmcgcHJpdmlsZWdlZCBjb2RlIGluIHRoZSBicm93c2VyLCBmb3IgZXhhbXBsZSwKLSAg
ICAvLyBhIFNhZmFyaSBvciBDaHJvbWUgZXh0ZW5zaW9uLgotICAgIGJvb2wgYWxsb3dQcml2aWxl
Z2VkRXh0ZW5zaW9ucygpIGNvbnN0OwotCi0gICAgZW51bSBDb25zb2xlRGlzcGxheVByZWZlcmVu
Y2UgewotICAgICAgICBEaXNwbGF5SW5Db25zb2xlLAotICAgICAgICBEb250RGlzcGxheUluQ29u
c29sZQotICAgIH07Ci0KLSAgICAvLyBXcmFwcGVyIGZvciBHcmFwaGljc0NvbnRleHQzRDo6c3lu
dGhlc2l6ZUdMRXJyb3IgdGhhdCBzZW5kcyBhIG1lc3NhZ2UKLSAgICAvLyB0byB0aGUgSmF2YVNj
cmlwdCBjb25zb2xlLgotICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0sIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNw
bGF5UHJlZmVyZW5jZSA9IERpc3BsYXlJbkNvbnNvbGUpOwotCi0gICAgU3RyaW5nIGVuc3VyZU5v
dE51bGwoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0KLSAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBz
dGVuY2lsIHRlc3QgYmFzZWQgb24gdXNlciBzZXR0aW5nIGFuZAotICAgIC8vIHdoZXRoZXIgdGhl
IGN1cnJlbnQgRkJPIGhhcyBhIHN0ZW5jaWwgYnVmZmVyLgotICAgIHZvaWQgYXBwbHlTdGVuY2ls
VGVzdCgpOwotCi0gICAgLy8gSGVscGVyIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYSBjYXBh
YmlsaXR5LgotICAgIHZvaWQgZW5hYmxlT3JEaXNhYmxlKEdDM0RlbnVtIGNhcGFiaWxpdHksIGJv
b2wgZW5hYmxlKTsKLQotICAgIC8vIENsYW1wIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIEdMX01B
WF9WSUVXUE9SVF9ESU1TLgotICAgIEludFNpemUgY2xhbXBlZENhbnZhc1NpemUoKTsKLQotICAg
IC8vIEZpcnN0IHRpbWUgY2FsbGVkLCBpZiBFWFRfZHJhd19idWZmZXJzIGlzIHN1cHBvcnRlZCwg
cXVlcnkgdGhlIHZhbHVlOyBvdGhlcndpc2UgcmV0dXJuIDAuCi0gICAgLy8gTGF0ZXIsIHJldHVy
biB0aGUgY2FjaGVkIHZhbHVlLgotICAgIEdDM0RpbnQgZ2V0TWF4RHJhd0J1ZmZlcnMoKTsKLSAg
ICBHQzNEaW50IGdldE1heENvbG9yQXR0YWNobWVudHMoKTsKLQotICAgIHZvaWQgc2V0QmFja0Ry
YXdCdWZmZXIoR0MzRGVudW0pOwotCi0gICAgdm9pZCByZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVy
KCk7Ci0gICAgdm9pZCByZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpOwotCi0gICAgLy8gQ2hlY2sg
aWYgRVhUX2RyYXdfYnVmZmVycyBleHRlbnNpb24gaXMgc3VwcG9ydGVkIGFuZCBpZiBpdCBzYXRp
c2ZpZXMgdGhlIFdlYkdMIHJlcXVpcmVtZW50cy4KLSAgICBib29sIHN1cHBvcnRzRHJhd0J1ZmZl
cnMoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5p
ZGwJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNjc3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotdHlwZWRlZiB1bnNp
Z25lZCBsb25nICBHTGVudW07Ci10eXBlZGVmIGJvb2xlYW4gICAgICAgIEdMYm9vbGVhbjsKLXR5
cGVkZWYgdW5zaWduZWQgbG9uZyAgR0xiaXRmaWVsZDsKLXR5cGVkZWYgYnl0ZSAgICAgICAgICAg
R0xieXRlOyAgICAgICAgIC8qICdieXRlJyBzaG91bGQgYmUgYSBzaWduZWQgOCBiaXQgdHlwZS4g
Ki8KLXR5cGVkZWYgc2hvcnQgICAgICAgICAgR0xzaG9ydDsKLXR5cGVkZWYgbG9uZyAgICAgICAg
ICAgR0xpbnQ7Ci10eXBlZGVmIGxvbmcgICAgICAgICAgIEdMc2l6ZWk7Ci10eXBlZGVmIGxvbmcg
bG9uZyAgICAgIEdMaW50cHRyOwotdHlwZWRlZiBsb25nIGxvbmcgICAgICBHTHNpemVpcHRyOwot
dHlwZWRlZiBvY3RldCAgICAgICAgICBHTHVieXRlOyAgICAgICAgLyogJ29jdGV0JyBzaG91bGQg
YmUgYW4gdW5zaWduZWQgOCBiaXQgdHlwZS4gKi8KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgR0x1
c2hvcnQ7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMdWludDsKLXR5cGVkZWYgdW5yZXN0cmlj
dGVkIGZsb2F0IEdMZmxvYXQ7Ci10eXBlZGVmIHVucmVzdHJpY3RlZCBmbG9hdCBHTGNsYW1wZjsK
LQotWwotICAgIENvbmRpdGlvbmFsPVdFQkdMLAotICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAot
ICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi1dIGludGVyZmFjZSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKLQotICAgIC8qIENsZWFyQnVmZmVyTWFzayAq
LwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgPSAweDAw
MDAwMTAwOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JVRkZFUl9CSVQgICAgICAgICAgICAg
PSAweDAwMDAwNDAwOwotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9CVUZGRVJfQklUICAgICAgICAg
ICAgICAgPSAweDAwMDA0MDAwOwotCi0gICAgLyogQmVnaW5Nb2RlICovCi0gICAgY29uc3QgR0xl
bnVtIFBPSU5UUyAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDsKLSAgICBjb25zdCBH
TGVudW0gTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAxOwotICAgIGNvbnN0
IEdMZW51bSBMSU5FX0xPT1AgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDI7Ci0gICAgY29u
c3QgR0xlbnVtIExJTkVfU1RSSVAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMzsKLSAgICBj
b25zdCBHTGVudW0gVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA0OwotICAg
IGNvbnN0IEdMZW51bSBUUklBTkdMRV9TVFJJUCAgICAgICAgICAgICAgICAgPSAweDAwMDU7Ci0g
ICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX0ZBTiAgICAgICAgICAgICAgICAgICA9IDB4MDAwNjsK
LQotICAgIC8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi8KLSAgICAv
KiAgICAgIE5FVkVSICovCi0gICAgLyogICAgICBMRVNTICovCi0gICAgLyogICAgICBFUVVBTCAq
LwotICAgIC8qICAgICAgTEVRVUFMICovCi0gICAgLyogICAgICBHUkVBVEVSICovCi0gICAgLyog
ICAgICBOT1RFUVVBTCAqLwotICAgIC8qICAgICAgR0VRVUFMICovCi0gICAgLyogICAgICBBTFdB
WVMgKi8KLQotICAgIC8qIEJsZW5kaW5nRmFjdG9yRGVzdCAqLwotICAgIGNvbnN0IEdMZW51bSBa
RVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOwotICAgIGNvbnN0IEdMZW51bSBPTkUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxOwotICAgIGNvbnN0IEdMZW51bSBTUkNfQ09M
T1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDA7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9N
SU5VU19TUkNfQ09MT1IgICAgICAgICAgICA9IDB4MDMwMTsKLSAgICBjb25zdCBHTGVudW0gU1JD
X0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzAyOwotICAgIGNvbnN0IEdMZW51bSBP
TkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgPSAweDAzMDM7Ci0gICAgY29uc3QgR0xlbnVt
IERTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwNDsKLSAgICBjb25zdCBHTGVu
dW0gT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgID0gMHgwMzA1OwotCi0gICAgLyogQmxl
bmRpbmdGYWN0b3JTcmMgKi8KLSAgICAvKiAgICAgIFpFUk8gKi8KLSAgICAvKiAgICAgIE9ORSAq
LwotICAgIGNvbnN0IEdMZW51bSBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAz
MDY7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19EU1RfQ09MT1IgICAgICAgICAgICA9IDB4
MDMwNzsKLSAgICBjb25zdCBHTGVudW0gU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgID0g
MHgwMzA4OwotICAgIC8qICAgICAgU1JDX0FMUEhBICovCi0gICAgLyogICAgICBPTkVfTUlOVVNf
U1JDX0FMUEhBICovCi0gICAgLyogICAgICBEU1RfQUxQSEEgKi8KLSAgICAvKiAgICAgIE9ORV9N
SU5VU19EU1RfQUxQSEEgKi8KLQotICAgIC8qIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAqLwotICAg
IGNvbnN0IEdMZW51bSBGVU5DX0FERCAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwMDY7Ci0g
ICAgY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OICAgICAgICAgICAgICAgICA9IDB4ODAwOTsK
LSAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAgID0gMHg4MDA5
OyAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KLSAgICBjb25zdCBHTGVudW0gQkxFTkRf
RVFVQVRJT05fQUxQSEEgICAgICAgICAgID0gMHg4ODNEOwotCi0gICAgLyogQmxlbmRTdWJ0cmFj
dCAqLwotICAgIGNvbnN0IEdMZW51bSBGVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgPSAw
eDgwMEE7Ci0gICAgY29uc3QgR0xlbnVtIEZVTkNfUkVWRVJTRV9TVUJUUkFDVCAgICAgICAgICA9
IDB4ODAwQjsKLQotICAgIC8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLwotICAgIGNvbnN0
IEdMZW51bSBCTEVORF9EU1RfUkdCICAgICAgICAgICAgICAgICAgPSAweDgwQzg7Ci0gICAgY29u
c3QgR0xlbnVtIEJMRU5EX1NSQ19SR0IgICAgICAgICAgICAgICAgICA9IDB4ODBDOTsKLSAgICBj
b25zdCBHTGVudW0gQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgID0gMHg4MENBOwotICAg
IGNvbnN0IEdMZW51bSBCTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgPSAweDgwQ0I7Ci0g
ICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICA9IDB4ODAwMTsK
LSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgID0gMHg4MDAy
OwotICAgIGNvbnN0IEdMZW51bSBDT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgPSAweDgw
MDM7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAgICAgICA9IDB4
ODAwNDsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgID0g
MHg4MDA1OwotCi0gICAgLyogQnVmZmVyIE9iamVjdHMgKi8KLSAgICBjb25zdCBHTGVudW0gQVJS
QVlfQlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4ODkyOwotICAgIGNvbnN0IEdMZW51bSBF
TEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgPSAweDg4OTM7Ci0gICAgY29uc3QgR0xlbnVt
IEFSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4ODg5NDsKLSAgICBjb25zdCBHTGVu
dW0gRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyAgID0gMHg4ODk1OwotCi0gICAgY29uc3Qg
R0xlbnVtIFNUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAgICA9IDB4ODhFMDsKLSAgICBjb25z
dCBHTGVudW0gU1RBVElDX0RSQVcgICAgICAgICAgICAgICAgICAgID0gMHg4OEU0OwotICAgIGNv
bnN0IEdMZW51bSBEWU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgPSAweDg4RTg7Ci0KLSAg
ICBjb25zdCBHTGVudW0gQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgID0gMHg4NzY0Owot
ICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfVVNBR0UgICAgICAgICAgICAgICAgICAgPSAweDg3NjU7
Ci0KLSAgICBjb25zdCBHTGVudW0gQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAgID0gMHg4
NjI2OwotCi0gICAgLyogQ3VsbEZhY2VNb2RlICovCi0gICAgY29uc3QgR0xlbnVtIEZST05UICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNDsKLSAgICBjb25zdCBHTGVudW0gQkFDSyAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA1OwotICAgIGNvbnN0IEdMZW51bSBGUk9O
VF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgPSAweDA0MDg7Ci0KLSAgICAvKiBEZXB0aEZ1bmN0
aW9uICovCi0gICAgLyogICAgICBORVZFUiAqLwotICAgIC8qICAgICAgTEVTUyAqLwotICAgIC8q
ICAgICAgRVFVQUwgKi8KLSAgICAvKiAgICAgIExFUVVBTCAqLwotICAgIC8qICAgICAgR1JFQVRF
UiAqLwotICAgIC8qICAgICAgTk9URVFVQUwgKi8KLSAgICAvKiAgICAgIEdFUVVBTCAqLwotICAg
IC8qICAgICAgQUxXQVlTICovCi0KLSAgICAvKiBFbmFibGVDYXAgKi8KLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgID0gMHgwREUxOwotICAgIGNvbnN0IEdM
ZW51bSBDVUxMX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgPSAweDBCNDQ7Ci0gICAgY29uc3Qg
R0xlbnVtIEJMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJFMjsKLSAgICBjb25z
dCBHTGVudW0gRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkQwOwotICAgIGNv
bnN0IEdMZW51bSBTVEVOQ0lMX1RFU1QgICAgICAgICAgICAgICAgICAgPSAweDBCOTA7Ci0gICAg
Y29uc3QgR0xlbnVtIERFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICA9IDB4MEI3MTsKLSAg
ICBjb25zdCBHTGVudW0gU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgID0gMHgwQzExOwot
ICAgIGNvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9GSUxMICAgICAgICAgICAgPSAweDgwMzc7
Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICA9IDB4ODA5
RTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgID0gMHg4
MEEwOwotCi0gICAgLyogRXJyb3JDb2RlICovCi0gICAgY29uc3QgR0xlbnVtIE5PX0VSUk9SICAg
ICAgICAgICAgICAgICAgICAgICA9IDA7Ci0gICAgY29uc3QgR0xlbnVtIElOVkFMSURfRU5VTSAg
ICAgICAgICAgICAgICAgICA9IDB4MDUwMDsKLSAgICBjb25zdCBHTGVudW0gSU5WQUxJRF9WQUxV
RSAgICAgICAgICAgICAgICAgID0gMHgwNTAxOwotICAgIGNvbnN0IEdMZW51bSBJTlZBTElEX09Q
RVJBVElPTiAgICAgICAgICAgICAgPSAweDA1MDI7Ci0gICAgY29uc3QgR0xlbnVtIE9VVF9PRl9N
RU1PUlkgICAgICAgICAgICAgICAgICA9IDB4MDUwNTsKLQotICAgIC8qIEZyb250RmFjZURpcmVj
dGlvbiAqLwotICAgIGNvbnN0IEdMZW51bSBDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDA5MDA7Ci0gICAgY29uc3QgR0xlbnVtIENDVyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDkwMTsKLQotICAgIC8qIEdldFBOYW1lICovCi0gICAgY29uc3QgR0xlbnVtIExJTkVf
V0lEVEggICAgICAgICAgICAgICAgICAgICA9IDB4MEIyMTsKLSAgICBjb25zdCBHTGVudW0gQUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgID0gMHg4NDZEOwotICAgIGNvbnN0IEdMZW51bSBB
TElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgPSAweDg0NkU7Ci0gICAgY29uc3QgR0xlbnVt
IENVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICA9IDB4MEI0NTsKLSAgICBjb25zdCBHTGVu
dW0gRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgID0gMHgwQjQ2OwotICAgIGNvbnN0IEdM
ZW51bSBERVBUSF9SQU5HRSAgICAgICAgICAgICAgICAgICAgPSAweDBCNzA7Ci0gICAgY29uc3Qg
R0xlbnVtIERFUFRIX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEI3MjsKLSAgICBjb25z
dCBHTGVudW0gREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQjczOwotICAgIGNv
bnN0IEdMZW51bSBERVBUSF9GVU5DICAgICAgICAgICAgICAgICAgICAgPSAweDBCNzQ7Ci0gICAg
Y29uc3QgR0xlbnVtIFNURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICA9IDB4MEI5MTsKLSAg
ICBjb25zdCBHTGVudW0gU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgID0gMHgwQjkyOwot
ICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgPSAweDBCOTQ7
Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICA9IDB4MEI5
NTsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgID0gMHgw
Qjk2OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1JFRiAgICAgICAgICAgICAgICAgICAgPSAw
eDBCOTc7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVkFMVUVfTUFTSyAgICAgICAgICAgICA9
IDB4MEI5MzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAg
ID0gMHgwQjk4OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAgICAg
ICAgPSAweDg4MDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19GQUlMICAgICAgICAg
ICAgICA9IDB4ODgwMTsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhf
RkFJTCAgID0gMHg4ODAyOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBU
SF9QQVNTICAgPSAweDg4MDM7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19SRUYgICAg
ICAgICAgICAgICA9IDB4OENBMzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1ZBTFVF
X01BU0sgICAgICAgID0gMHg4Q0E0OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLICAgICAgICAgPSAweDhDQTU7Ci0gICAgY29uc3QgR0xlbnVtIFZJRVdQT1JUICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MEJBMjsKLSAgICBjb25zdCBHTGVudW0gU0NJU1NPUl9CT1gg
ICAgICAgICAgICAgICAgICAgID0gMHgwQzEwOwotICAgIC8qICAgICAgU0NJU1NPUl9URVNUICov
Ci0gICAgY29uc3QgR0xlbnVtIENPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4MEMy
MjsKLSAgICBjb25zdCBHTGVudW0gQ09MT1JfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0gMHgw
QzIzOwotICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgPSAw
eDBDRjU7Ci0gICAgY29uc3QgR0xlbnVtIFBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICA9
IDB4MEQwNTsKLSAgICBjb25zdCBHTGVudW0gTUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAg
ID0gMHgwRDMzOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAg
ICAgPSAweDBEM0E7Ci0gICAgY29uc3QgR0xlbnVtIFNVQlBJWEVMX0JJVFMgICAgICAgICAgICAg
ICAgICA9IDB4MEQ1MDsKLSAgICBjb25zdCBHTGVudW0gUkVEX0JJVFMgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwRDUyOwotICAgIGNvbnN0IEdMZW51bSBHUkVFTl9CSVRTICAgICAgICAgICAg
ICAgICAgICAgPSAweDBENTM7Ci0gICAgY29uc3QgR0xlbnVtIEJMVUVfQklUUyAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEQ1NDsKLSAgICBjb25zdCBHTGVudW0gQUxQSEFfQklUUyAgICAgICAg
ICAgICAgICAgICAgID0gMHgwRDU1OwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9CSVRTICAgICAg
ICAgICAgICAgICAgICAgPSAweDBENTY7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQklUUyAg
ICAgICAgICAgICAgICAgICA9IDB4MEQ1NzsKLSAgICBjb25zdCBHTGVudW0gUE9MWUdPTl9PRkZT
RVRfVU5JVFMgICAgICAgICAgID0gMHgyQTAwOwotICAgIC8qICAgICAgUE9MWUdPTl9PRkZTRVRf
RklMTCAqLwotICAgIGNvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9GQUNUT1IgICAgICAgICAg
PSAweDgwMzg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQklORElOR18yRCAgICAgICAgICAg
ICA9IDB4ODA2OTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAg
ICAgID0gMHg4MEE4OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVTICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDgwQTk7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRV9WQUxVRSAg
ICAgICAgICA9IDB4ODBBQTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFX0lOVkVS
VCAgICAgICAgID0gMHg4MEFCOwotCi0gICAgLyogR2V0VGV4dHVyZVBhcmFtZXRlciAqLwotICAg
IC8qICAgICAgVEVYVFVSRV9NQUdfRklMVEVSICovCi0gICAgLyogICAgICBURVhUVVJFX01JTl9G
SUxURVIgKi8KLSAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9TICovCi0gICAgLyogICAgICBURVhU
VVJFX1dSQVBfVCAqLwotCi0gICAgY29uc3QgR0xlbnVtIENPTVBSRVNTRURfVEVYVFVSRV9GT1JN
QVRTICAgICA9IDB4ODZBMzsKLQotICAgIC8qIEhpbnRNb2RlICovCi0gICAgY29uc3QgR0xlbnVt
IERPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMDsKLSAgICBjb25zdCBHTGVu
dW0gRkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAxOwotICAgIGNvbnN0IEdM
ZW51bSBOSUNFU1QgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDI7Ci0KLSAgICAvKiBI
aW50VGFyZ2V0ICovCi0gICAgY29uc3QgR0xlbnVtIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAg
ICAgICAgPSAweDgxOTI7Ci0KLSAgICAvKiBEYXRhVHlwZSAqLwotICAgIGNvbnN0IEdMZW51bSBC
WVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDA7Ci0gICAgY29uc3QgR0xlbnVt
IFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA9IDB4MTQwMTsKLSAgICBjb25zdCBHTGVu
dW0gU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAyOwotICAgIGNvbnN0IEdM
ZW51bSBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgPSAweDE0MDM7Ci0gICAgY29uc3Qg
R0xlbnVtIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwNDsKLSAgICBjb25z
dCBHTGVudW0gVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgID0gMHgxNDA1OwotICAgIGNv
bnN0IEdMZW51bSBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDY7Ci0KLSAg
ICAvKiBQaXhlbEZvcm1hdCAqLwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DT01QT05FTlQgICAg
ICAgICAgICAgICAgPSAweDE5MDI7Ci0gICAgY29uc3QgR0xlbnVtIEFMUEhBICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MTkwNjsKLSAgICBjb25zdCBHTGVudW0gUkdCICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgxOTA3OwotICAgIGNvbnN0IEdMZW51bSBSR0JBICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDE5MDg7Ci0gICAgY29uc3QgR0xlbnVtIExVTUlOQU5DRSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MTkwOTsKLSAgICBjb25zdCBHTGVudW0gTFVNSU5BTkNF
X0FMUEhBICAgICAgICAgICAgICAgID0gMHgxOTBBOwotCi0gICAgLyogUGl4ZWxUeXBlICovCi0g
ICAgLyogICAgICBVTlNJR05FRF9CWVRFICovCi0gICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NI
T1JUXzRfNF80XzQgICAgICAgICA9IDB4ODAzMzsKLSAgICBjb25zdCBHTGVudW0gVU5TSUdORURf
U0hPUlRfNV81XzVfMSAgICAgICAgID0gMHg4MDM0OwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05F
RF9TSE9SVF81XzZfNSAgICAgICAgICAgPSAweDgzNjM7Ci0KLSAgICAvKiBTaGFkZXJzICovCi0g
ICAgY29uc3QgR0xlbnVtIEZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgID0gMHg4QjMw
OwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAgICA9IDB4
OEIzMTsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAgICAg
PSAweDg4Njk7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAg
ICAgID0gMHg4REZCOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkFSWUlOR19WRUNUT1JTICAgICAg
ICAgICAgICA9IDB4OERGQzsKLSAgICBjb25zdCBHTGVudW0gTUFYX0NPTUJJTkVEX1RFWFRVUkVf
SU1BR0VfVU5JVFMgPSAweDhCNEQ7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUUyAgID0gMHg4QjRDOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyAgICAgICAgICA9IDB4ODg3MjsKLSAgICBjb25zdCBHTGVudW0gTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgPSAweDhERkQ7Ci0gICAgY29uc3QgR0xlbnVtIFNIQURF
Ul9UWVBFICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjRGOwotICAgIGNvbnN0IEdMZW51bSBE
RUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICA9IDB4OEI4MDsKLSAgICBjb25zdCBHTGVu
dW0gTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCODI7Ci0gICAgY29uc3Qg
R0xlbnVtIFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgID0gMHg4QjgzOwotICAgIGNv
bnN0IEdMZW51bSBBVFRBQ0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICA9IDB4OEI4NTsKLSAg
ICBjb25zdCBHTGVudW0gQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgICAgPSAweDhCODY7
Ci0gICAgY29uc3QgR0xlbnVtIEFDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgID0gMHg4
Qjg5OwotICAgIGNvbnN0IEdMZW51bSBTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gICAgICAgICA9
IDB4OEI4QzsKLSAgICBjb25zdCBHTGVudW0gQ1VSUkVOVF9QUk9HUkFNICAgICAgICAgICAgICAg
ICAgPSAweDhCOEQ7Ci0KLSAgICAvKiBTdGVuY2lsRnVuY3Rpb24gKi8KLSAgICBjb25zdCBHTGVu
dW0gTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAwOwotICAgIGNvbnN0IEdM
ZW51bSBMRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDE7Ci0gICAgY29uc3Qg
R0xlbnVtIEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMjsKLSAgICBjb25z
dCBHTGVudW0gTEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAzOwotICAgIGNv
bnN0IEdMZW51bSBHUkVBVEVSICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDQ7Ci0gICAg
Y29uc3QgR0xlbnVtIE5PVEVRVUFMICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNTsKLSAg
ICBjb25zdCBHTGVudW0gR0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjA2Owot
ICAgIGNvbnN0IEdMZW51bSBBTFdBWVMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDc7
Ci0KLSAgICAvKiBTdGVuY2lsT3AgKi8KLSAgICAvKiAgICAgIFpFUk8gKi8KLSAgICBjb25zdCBH
TGVudW0gS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAwOwotICAgIGNvbnN0
IEdMZW51bSBSRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDE7Ci0gICAgY29u
c3QgR0xlbnVtIElOQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMjsKLSAgICBj
b25zdCBHTGVudW0gREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAzOwotICAg
IGNvbnN0IEdMZW51bSBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE1MEE7Ci0g
ICAgY29uc3QgR0xlbnVtIElOQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODUwNzsK
LSAgICBjb25zdCBHTGVudW0gREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0gMHg4NTA4
OwotCi0gICAgLyogU3RyaW5nTmFtZSAqLwotICAgIGNvbnN0IEdMZW51bSBWRU5ET1IgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDFGMDA7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkVSICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMTsKLSAgICBjb25zdCBHTGVudW0gVkVSU0lPTiAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAyOwotCi0gICAgLyogVGV4dHVyZU1hZ0ZpbHRl
ciAqLwotICAgIGNvbnN0IEdMZW51bSBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDI2MDA7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MjYwMTsKLQotICAgIC8qIFRleHR1cmVNaW5GaWx0ZXIgKi8KLSAgICAvKiAgICAgIE5FQVJF
U1QgKi8KLSAgICAvKiAgICAgIExJTkVBUiAqLwotICAgIGNvbnN0IEdMZW51bSBORUFSRVNUX01J
UE1BUF9ORUFSRVNUICAgICAgICAgPSAweDI3MDA7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVBUl9N
SVBNQVBfTkVBUkVTVCAgICAgICAgICA9IDB4MjcwMTsKLSAgICBjb25zdCBHTGVudW0gTkVBUkVT
VF9NSVBNQVBfTElORUFSICAgICAgICAgID0gMHgyNzAyOwotICAgIGNvbnN0IEdMZW51bSBMSU5F
QVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgPSAweDI3MDM7Ci0KLSAgICAvKiBUZXh0dXJlUGFy
YW1ldGVyTmFtZSAqLwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX01BR19GSUxURVIgICAgICAg
ICAgICAgPSAweDI4MDA7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfTUlOX0ZJTFRFUiAgICAg
ICAgICAgICA9IDB4MjgwMTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9XUkFQX1MgICAgICAg
ICAgICAgICAgID0gMHgyODAyOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX1dSQVBfVCAgICAg
ICAgICAgICAgICAgPSAweDI4MDM7Ci0KLSAgICAvKiBUZXh0dXJlVGFyZ2V0ICovCi0gICAgLyog
ICAgICBURVhUVVJFXzJEICovCi0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MTcwMjsKLQotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQ
ICAgICAgICAgICAgICAgPSAweDg1MTM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQklORElO
R19DVUJFX01BUCAgICAgICA9IDB4ODUxNDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YICAgID0gMHg4NTE1OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1ggICAgPSAweDg1MTY7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWSAgICA9IDB4ODUxNzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZICAgID0gMHg4NTE4OwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogICAgPSAweDg1MTk7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA9IDB4ODUxQTsKLSAgICBjb25zdCBHTGVudW0g
TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgID0gMHg4NTFDOwotCi0gICAgLyogVGV4dHVy
ZVVuaXQgKi8KLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEMwOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMSAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0QzE7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRDMjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTMgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEMzOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFNCAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0QzQ7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU1ICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODRDNTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTYgICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEM2OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFNyAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0Qzc7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU4ICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODRDODsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTkgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEM5OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0E7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUx
MSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RTEyICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENDOwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFMTMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Q7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkUxNCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRTsKLSAgICBjb25zdCBHTGVudW0g
VEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENGOwotICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDA7Ci0gICAgY29uc3QgR0xl
bnVtIFRFWFRVUkUxNyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMTsKLSAgICBjb25zdCBH
TGVudW0gVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQyOwotICAgIGNvbnN0
IEdMZW51bSBURVhUVVJFMTkgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDM7Ci0gICAgY29u
c3QgR0xlbnVtIFRFWFRVUkUyMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENDsKLSAgICBj
b25zdCBHTGVudW0gVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ1OwotICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDY7Ci0g
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENzsK
LSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ4
OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
RDk7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNiAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODREQTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NERCOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAg
PSAweDg0REM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyOSAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODRERDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTMwICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NERFOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMzEgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0REY7Ci0gICAgY29uc3QgR0xlbnVtIEFDVElWRV9URVhUVVJFICAgICAgICAg
ICAgICAgICA9IDB4ODRFMDsKLQotICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqLwotICAgIGNvbnN0
IEdMZW51bSBSRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI5MDE7Ci0gICAgY29u
c3QgR0xlbnVtIENMQU1QX1RPX0VER0UgICAgICAgICAgICAgICAgICA9IDB4ODEyRjsKLSAgICBj
b25zdCBHTGVudW0gTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgID0gMHg4MzcwOwotCi0g
ICAgLyogVW5pZm9ybSBUeXBlcyAqLwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9WRUMyICAgICAg
ICAgICAgICAgICAgICAgPSAweDhCNTA7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX1ZFQzMgICAg
ICAgICAgICAgICAgICAgICA9IDB4OEI1MTsKLSAgICBjb25zdCBHTGVudW0gRkxPQVRfVkVDNCAg
ICAgICAgICAgICAgICAgICAgID0gMHg4QjUyOwotICAgIGNvbnN0IEdMZW51bSBJTlRfVkVDMiAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTM7Ci0gICAgY29uc3QgR0xlbnVtIElOVF9WRUMz
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NDsKLSAgICBjb25zdCBHTGVudW0gSU5UX1ZF
QzQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU1OwotICAgIGNvbnN0IEdMZW51bSBCT09M
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTY7Ci0gICAgY29uc3QgR0xlbnVtIEJP
T0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NzsKLSAgICBjb25zdCBHTGVudW0g
Qk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU4OwotICAgIGNvbnN0IEdMZW51
bSBCT09MX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTk7Ci0gICAgY29uc3QgR0xl
bnVtIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QTsKLSAgICBjb25zdCBH
TGVudW0gRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVCOwotICAgIGNvbnN0
IEdMZW51bSBGTE9BVF9NQVQ0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUM7Ci0gICAgY29u
c3QgR0xlbnVtIFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1RTsKLSAgICBj
b25zdCBHTGVudW0gU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgID0gMHg4QjYwOwotCi0g
ICAgLyogVmVydGV4IEFycmF5cyAqLwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FS
UkFZX0VOQUJMRUQgICAgICAgID0gMHg4NjIyOwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRU
UklCX0FSUkFZX1NJWkUgICAgICAgICAgID0gMHg4NjIzOwotICAgIGNvbnN0IEdMZW51bSBWRVJU
RVhfQVRUUklCX0FSUkFZX1NUUklERSAgICAgICAgID0gMHg4NjI0OwotICAgIGNvbnN0IEdMZW51
bSBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgID0gMHg4NjI1OwotICAgIGNvbnN0
IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQgICAgID0gMHg4ODZBOwotICAg
IGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgICAgICAgID0gMHg4NjQ1
OwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HID0g
MHg4ODlGOwotCi0gICAgLyogU2hhZGVyIFNvdXJjZSAqLwotICAgIGNvbnN0IEdMZW51bSBDT01Q
SUxFX1NUQVRVUyAgICAgICAgICAgICAgICAgPSAweDhCODE7Ci0KLSAgICAvKiBTaGFkZXIgUHJl
Y2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLwotICAgIGNvbnN0IEdMZW51bSBMT1dfRkxPQVQgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhERjA7Ci0gICAgY29uc3QgR0xlbnVtIE1FRElVTV9GTE9B
VCAgICAgICAgICAgICAgICAgICA9IDB4OERGMTsKLSAgICBjb25zdCBHTGVudW0gSElHSF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgID0gMHg4REYyOwotICAgIGNvbnN0IEdMZW51bSBMT1dfSU5U
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjM7Ci0gICAgY29uc3QgR0xlbnVtIE1FRElV
TV9JTlQgICAgICAgICAgICAgICAgICAgICA9IDB4OERGNDsKLSAgICBjb25zdCBHTGVudW0gSElH
SF9JTlQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REY1OwotCi0gICAgLyogRnJhbWVidWZm
ZXIgT2JqZWN0LiAqLwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUiAgICAgICAgICAgICAg
ICAgICAgPSAweDhENDA7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUiAgICAgICAgICAg
ICAgICAgICA9IDB4OEQ0MTsKLQotICAgIGNvbnN0IEdMZW51bSBSR0JBNCAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDgwNTY7Ci0gICAgY29uc3QgR0xlbnVtIFJHQjVfQTEgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODA1NzsKLSAgICBjb25zdCBHTGVudW0gUkdCNTY1ICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4RDYyOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DT01QT05F
TlQxNiAgICAgICAgICAgICAgPSAweDgxQTU7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfSU5E
RVggICAgICAgICAgICAgICAgICA9IDB4MTkwMTsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9J
TkRFWDggICAgICAgICAgICAgICAgID0gMHg4RDQ4OwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9T
VEVOQ0lMICAgICAgICAgICAgICAgICAgPSAweDg0Rjk7Ci0KLSAgICBjb25zdCBHTGVudW0gU1JH
Ql9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhDNDA7Ci0gICAg
Y29uc3QgR0xlbnVtIFNSR0JfQUxQSEFfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QzQyOwotICAgIGNvbnN0IEdMZW51bSBTUkdCOF9BTFBIQThfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4OEM0MzsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQgICAgPSAweDgyMTA7Ci0KLSAgICBjb25zdCBH
TGVudW0gTUlOX0VYVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA3OwotICAgIGNvbnN0
IEdMZW51bSBNQVhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwMDg7Ci0KLSAgICBj
b25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgID0gMHg4RDQyOwotICAg
IGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgPSAweDhENDM7Ci0g
ICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQgICA9IDB4OEQ0NDsK
LSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgID0gMHg4RDUw
OwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgPSAweDhE
NTE7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9CTFVFX1NJWkUgICAgICAgICA9IDB4
OEQ1MjsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgID0g
MHg4RDUzOwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAg
PSAweDhENTQ7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUgICAg
ICA9IDB4OEQ1NTsKLQotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9UWVBFICAgICAgICAgICA9IDB4OENEMDsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgPSAweDhDRDE7Ci0gICAgY29uc3Qg
R0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCAgICAgICAgID0gMHg4
Q0QyOwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VC
RV9NQVBfRkFDRSA9IDB4OENEMzsKLQotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9BVFRBQ0hNRU5U
MCAgICAgICAgICAgICAgPSAweDhDRTA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX0FUVEFDSE1F
TlQgICAgICAgICAgICAgICA9IDB4OEQwMDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9BVFRB
Q0hNRU5UICAgICAgICAgICAgID0gMHg4RDIwOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQgICAgICAgPSAweDgyMUE7Ci0KLSAgICBjb25zdCBHTGVudW0gTk9ORSAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLQotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJV
RkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICA9IDB4OENENTsKLSAgICBjb25zdCBH
TGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgPSAweDhDRDY7
Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hN
RU5UID0gMHg4Q0Q3OwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJ
TUVOU0lPTlMgICAgICAgICA9IDB4OENEOTsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAweDhDREQ7Ci0KLSAgICBjb25zdCBHTGVu
dW0gRlJBTUVCVUZGRVJfQklORElORyAgICAgICAgICAgID0gMHg4Q0E2OwotICAgIGNvbnN0IEdM
ZW51bSBSRU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgPSAweDhDQTc7Ci0gICAgY29uc3Qg
R0xlbnVtIE1BWF9SRU5ERVJCVUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRFODsKLQotICAgIGNv
bnN0IEdMZW51bSBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiAgPSAweDA1MDY7Ci0KLSAg
ICAvKiBXZWJHTC1zcGVjaWZpYyBlbnVtcyAqLwotICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfRkxJ
UF9ZX1dFQkdMICAgICAgICAgICAgICAgID0gMHg5MjQwOwotICAgIGNvbnN0IEdMZW51bSBVTlBB
Q0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgICAgID0gMHg5MjQxOwotICAgIGNvbnN0IEdMZW51
bSBDT05URVhUX0xPU1RfV0VCR0wgICAgICAgICAgICAgICAgID0gMHg5MjQyOwotICAgIGNvbnN0
IEdMZW51bSBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzOwotICAg
IGNvbnN0IEdMZW51bSBCUk9XU0VSX0RFRkFVTFRfV0VCR0wgICAgICAgICAgICAgID0gMHg5MjQ0
OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1ZmZlcldpZHRoOwot
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJIZWlnaHQ7Ci0KLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBhY3Rp
dmVUZXh0dXJlKEdMZW51bSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtIHByb2dy
YW0sIFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBHTHVpbnQgaW5kZXgsIERPTVN0cmluZyBuYW1lKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQnVmZmVyKEdMZW51bSB0
YXJnZXQsIFdlYkdMQnVmZmVyIGJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQs
IFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRSZW5kZXJidWZmZXIoR0xlbnVtIHRh
cmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kVGV4dHVyZShHTGVudW0g
dGFyZ2V0LCBXZWJHTFRleHR1cmUgdGV4dHVyZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGJsZW5kQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xj
bGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBibGVuZEVxdWF0aW9uKEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdMZW51bSBtb2RlUkdC
LCBHTGVudW0gbW9kZUFscGhhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgYmxlbmRGdW5jKEdMZW51bSBzZmFjdG9yLCBHTGVudW0gZGZhY3Rvcik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVuY1NlcGFyYXRlKEdMZW51bSBzcmNS
R0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZm
ZXJEYXRhKEdMZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyPyBkYXRhLCBHTGVudW0gdXNhZ2UpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1
ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhLCBHTGVudW0gdXNh
Z2UpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNh
Z2UpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1
ZmZlcj8gZGF0YSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQs
IEFycmF5QnVmZmVyVmlldz8gZGF0YSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVu
dW0gICAgICAgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0gdGFyZ2V0KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXIoR0xiaXRmaWVsZCBtYXNrKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJDb2xvcihHTGNsYW1wZiBy
ZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoR0xjbGFtcGYgZGVw
dGgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhclN0ZW5jaWwo
R0xpbnQgcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbG9yTWFz
ayhHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xl
YW4gYWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLQotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb21wcmVzc2VkVGV4SW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgQXJyYXlCdWZmZXJWaWV3IGRhdGEpOwotICAgIAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBjb3B5VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgY29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdM
QnVmZmVyIGNyZWF0ZUJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMRnJh
bWVidWZmZXIgY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBX
ZWJHTFByb2dyYW0gY3JlYXRlUHJvZ3JhbSgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdl
YkdMUmVuZGVyYnVmZmVyIGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xTaGFkZXIgY3JlYXRlU2hhZGVyKEdMZW51bSB0
eXBlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVy
ZSgpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGN1bGxGYWNlKEdM
ZW51bSBtb2RlKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxl
dGVCdWZmZXIoV2ViR0xCdWZmZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZl
cik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVByb2dyYW0o
V2ViR0xQcm9ncmFtIHByb2dyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlU2hhZGVyKFdlYkdM
U2hhZGVyIHNoYWRlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRl
bGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlIHRleHR1cmUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIGRlcHRoRnVuYyhHTGVudW0gZnVuYyk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoTWFzayhHTGJvb2xlYW4gZmxhZyk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoUmFuZ2UoR0xjbGFtcGYgek5l
YXIsIEdMY2xhbXBmIHpGYXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
ZGlzYWJsZShHTGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJh
d0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgR0xpbnRw
dHIgb2Zmc2V0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBlbmFi
bGUoR0xlbnVtIGNhcCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4KTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmluaXNoKCk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGZsdXNoKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSByZW5kZXJidWZmZXJ0
YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIFdl
YkdMVGV4dHVyZSB0ZXh0dXJlLCBHTGludCBsZXZlbCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGZyb250RmFjZShHTGVudW0gbW9kZSk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGdlbmVyYXRlTWlwbWFwKEdMZW51bSB0YXJnZXQpOwotICAg
IAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJ
bmZvIGdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMQWN0aXZlSW5m
byBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgpOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLQotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIEdMaW50ICAgICAgICBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0g
cHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tXSBhbnkgZ2V0QnVmZmVyUGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGdldENv
bnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVudW0gZ2V0
RXJyb3IoKTsKLQotICAgIC8vIG9iamVjdCBnZXRFeHRlbnNpb24oRE9NU3RyaW5nIG5hbWUpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdldEV4dGVuc2lvbihET01TdHJp
bmcgbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2Vw
dGlvbl0gYW55IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFBhcmFtZXRlcihHTGVudW0gcG5h
bWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBh
bnkgZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0xlbnVtIHBuYW1l
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51
bGwsIFJhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJv
Z3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4
Y2VwdGlvbl0gYW55IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0
aW9uXSBhbnkgZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyIHNoYWRlciwgR0xlbnVtIHBu
YW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5n
QXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVySW5mb0xvZyhX
ZWJHTFNoYWRlciBzaGFkZXIpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdCBnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlKTsKLQotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhj
ZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRlcik7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHNlcXVlbmNlPERPTVN0cmluZz4g
Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRUZXhQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBhbnkgZ2V0VW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24pOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQ
cm9ncmFtIHByb2dyYW0sIERPTVN0cmluZyBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VmVydGV4QXR0cmliKEdMdWludCBp
bmRleCwgR0xlbnVtIHBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMc2l6ZWlw
dHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lKTsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBoaW50KEdMZW51bSB0YXJnZXQs
IEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNC
dWZmZXIoV2ViR0xCdWZmZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJv
b2xlYW4gICAgaXNDb250ZXh0TG9zdCgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9v
bGVhbiAgICBpc0VuYWJsZWQoR0xlbnVtIGNhcCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
R0xib29sZWFuICAgIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzUHJvZ3JhbShXZWJHTFBy
b2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlz
UmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzU2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzVGV4dHVyZShXZWJHTFRl
eHR1cmUgdGV4dHVyZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGxp
bmVXaWR0aChHTGZsb2F0IHdpZHRoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBpeGVsU3RvcmVpKEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBwb2x5Z29uT2Zmc2V0KEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsKLQotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHJlYWRQ
aXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcgcGl4ZWxzKTsKLSAgICAK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcmVsZWFzZVNoYWRlckNvbXBp
bGVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc2Npc3NvcihHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgc2hhZGVyU291cmNlKFdlYkdMU2hh
ZGVyIHNoYWRlciwgRE9NU3RyaW5nIHN0cmluZyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIHN0ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBt
YXNrKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmNT
ZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2sp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsTWFzayhHTHVp
bnQgbWFzayk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE9wKEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWws
IEdMZW51bSB6cGFzcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0
ZW5jaWxPcFNlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBH
TGVudW0genBhc3MpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHRl
eFBhcmFtZXRlcmYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdGV4UGFyYW1ldGVyaShHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKLQotICAgIC8vIFN1cHBvcnRl
ZCBmb3JtczoKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscyk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBI
VE1MQ2FudmFzRWxlbWVudD8gY2FudmFzKTsKLSNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYg
RU5BQkxFX1ZJREVPCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2
aWRlbyk7Ci0jZW5kaWYKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhT
dWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFn
ZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1l
bnQ/IGNhbnZhcyk7Ci0jaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRl
eFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/IHZp
ZGVvKTsKLSNlbmRpZgotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHVuaWZvcm0xZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCB1bmlmb3JtMWZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkg
dik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm0xaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFpdihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJmKFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJmdihXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmkoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaXYoV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zZihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmdihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2koV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0z
aXYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkgdik7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwg
R0xmbG9hdCB3KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCB1bmlmb3JtNGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkIHVuaWZvcm00aShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xpbnQgeiwgR0xpbnQgdyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSBhcnJheSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybU1hdHJpeDNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFu
IHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4NGZ2KFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkg
YXJyYXkpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdmFsaWRhdGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdMdWludCBpbmR4
LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgdmVydGV4QXR0cmliMmYoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdM
dWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliM2YoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xm
bG9hdCB5LCBHTGZsb2F0IHopOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9p
ZCB2ZXJ0ZXhBdHRyaWIzZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0ZihHTHVpbnQg
aW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdMdWludCBp
bmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBpbmR4
LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6
ZWkgc3RyaWRlLCBHTGludHB0ciBvZmZzZXQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIHZpZXdwb3J0KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjM1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV0VCR0wpCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorCisjaW5j
bHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgor
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RVhUQmxlbmRNaW5NYXguaCIKKyNpbmNsdWRlICJFWFRGcmFnRGVwdGguaCIKKyNpbmNsdWRlICJF
WFRTaGFkZXJUZXh0dXJlTE9ELmgiCisjaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljLmgiCisjaW5jbHVkZSAiRVhUc1JHQi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJI
VE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgorI2luY2x1ZGUgIk9FU1N0YW5kYXJk
RGVyaXZhdGl2ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJP
RVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0Lmgi
CisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIk9FU1Zl
cnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckJv
eC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJX
ZWJHTEFjdGl2ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldl
YkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0
dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2lu
Y2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRF
dmVudC5oIgorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCisjaW5jbHVkZSAiV2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5j
bHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgi
CisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRl
eHQuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1
ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgorCisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+
CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvVWludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5S
ZXN0b3JlQXR0ZW1wdHMgPSAxLjA7Citjb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25z
b2xlID0gMjU2OworCituYW1lc3BhY2UgeworICAgIAorY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZl
ckJpbmRlciB7CitwdWJsaWM6CisgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3aW5n
QnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJpbmRp
bmcpCisgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCisgICAgICAgICwg
bV9mcmFtZWJ1ZmZlckJpbmRpbmcoZnJhbWVidWZmZXJCaW5kaW5nKQorICAgIHsKKyAgICAgICAg
Ly8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGlu
ZykKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIH0KKyAgICAKKyAg
ICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigpCisgICAgeworICAgICAgICAvLyBSZXN0b3Jl
IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5k
KCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdC
dWZmZXI7CisgICAgV2ViR0xGcmFtZWJ1ZmZlciogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7Cit9Owor
CitQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQorewor
ICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDogMDsKK30KKwordm9pZCBjbGlw
MUQoR0MzRGludCBzdGFydCwgR0MzRHNpemVpIHJhbmdlLCBHQzNEc2l6ZWkgc291cmNlUmFuZ2Us
IEdDM0RpbnQqIGNsaXBwZWRTdGFydCwgR0MzRHNpemVpKiBjbGlwcGVkUmFuZ2UpCit7CisgICAg
QVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlwcGVkUmFuZ2UpOworICAgIGlmIChzdGFydCA8IDAp
IHsKKyAgICAgICAgcmFuZ2UgKz0gc3RhcnQ7CisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICB9Cisg
ICAgR0MzRGludCBlbmQgPSBzdGFydCArIHJhbmdlOworICAgIGlmIChlbmQgPiBzb3VyY2VSYW5n
ZSkKKyAgICAgICAgcmFuZ2UgLT0gZW5kIC0gc291cmNlUmFuZ2U7CisgICAgKmNsaXBwZWRTdGFy
dCA9IHN0YXJ0OworICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKK30KKworLy8gUmV0dXJucyBm
YWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGkuZS4sIHgsIHksIHdpZHRoLCBoZWln
aHQgc3RheSB0aGUgc2FtZS4KK2Jvb2wgY2xpcDJEKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICBHQzNEc2l6ZWkgc291
cmNlV2lkdGgsIEdDM0RzaXplaSBzb3VyY2VIZWlnaHQsCisgICAgICAgICAgICBHQzNEaW50KiBj
bGlwcGVkWCwgR0MzRGludCogY2xpcHBlZFksIEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNE
c2l6ZWkqY2xpcHBlZEhlaWdodCkKK3sKKyAgICBBU1NFUlQoY2xpcHBlZFggJiYgY2xpcHBlZFkg
JiYgY2xpcHBlZFdpZHRoICYmIGNsaXBwZWRIZWlnaHQpOworICAgIGNsaXAxRCh4LCB3aWR0aCwg
c291cmNlV2lkdGgsIGNsaXBwZWRYLCBjbGlwcGVkV2lkdGgpOworICAgIGNsaXAxRCh5LCBoZWln
aHQsIHNvdXJjZUhlaWdodCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOworICAgIHJldHVybiAo
KmNsaXBwZWRYICE9IHggfHwgKmNsaXBwZWRZICE9IHkgfHwgKmNsaXBwZWRXaWR0aCAhPSB3aWR0
aCB8fCAqY2xpcHBlZEhlaWdodCAhPSBoZWlnaHQpOworfQorCitHQzNEaW50IGNsYW1wKEdDM0Rp
bnQgdmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKK3sKKyAgICBpZiAodmFsdWUgPCBt
aW4pCisgICAgICAgIHZhbHVlID0gbWluOworICAgIGlmICh2YWx1ZSA+IG1heCkKKyAgICAgICAg
dmFsdWUgPSBtYXg7CisgICAgcmV0dXJuIHZhbHVlOworfQorCisvLyBSZXR1cm4gdHJ1ZSBpZiBh
IGNoYXJhY3RlciBiZWxvbmdzIHRvIHRoZSBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbgorLy8g
R0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9uIDMuMS4KK2Jvb2wgdmFsaWRhdGVDaGFyYWN0ZXIodW5z
aWduZWQgY2hhciBjKQoreworICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4
Y2VwdCAiICQgYCBAIFwgJyBERUwuCisgICAgaWYgKGMgPj0gMzIgJiYgYyA8PSAxMjYKKyAgICAg
ICAgJiYgYyAhPSAnIicgJiYgYyAhPSAnJCcgJiYgYyAhPSAnYCcgJiYgYyAhPSAnQCcgJiYgYyAh
PSAnXFwnICYmIGMgIT0gJ1wnJykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gSG9yaXpv
bnRhbCB0YWIsIGxpbmUgZmVlZCwgdmVydGljYWwgdGFiLCBmb3JtIGZlZWQsIGNhcnJpYWdlIHJl
dHVybgorICAgIC8vIGFyZSBhbHNvIHZhbGlkLgorICAgIGlmIChjID49IDkgJiYgYyA8PSAxMykK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGlzUHJl
Zml4UmVzZXJ2ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLnN0YXJ0c1dp
dGgoImdsXyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRo
KCJfd2ViZ2xfIikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gU3RyaXBzIGNvbW1lbnRzIGZyb20gc2hhZGVyIHRleHQuIFRoaXMgYWxsb3dzIG5vbi1B
U0NJSSBjaGFyYWN0ZXJzCisvLyB0byBiZSB1c2VkIGluIGNvbW1lbnRzIHdpdGhvdXQgcG90ZW50
aWFsbHkgYnJlYWtpbmcgT3BlbkdMCisvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVjdGluZyBj
aGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgorY2xhc3MgU3RyaXBDb21tZW50cyB7
CitwdWJsaWM6CisgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJpbmcmIHN0cikKKyAgICAgICAg
OiBtX3BhcnNlU3RhdGUoQmVnaW5uaW5nT2ZMaW5lKQorICAgICAgICAsIG1fc291cmNlU3RyaW5n
KHN0cikKKyAgICAgICAgLCBtX2xlbmd0aChzdHIubGVuZ3RoKCkpCisgICAgICAgICwgbV9wb3Np
dGlvbigwKQorICAgIHsKKyAgICAgICAgcGFyc2UoKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5n
IHJlc3VsdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBib29sIGhhc01vcmVDaGFyYWN0ZXJzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAobV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBwYXJzZSgpCisgICAgeworICAgICAgICB3aGlsZSAoaGFzTW9yZUNoYXJh
Y3RlcnMoKSkgeworICAgICAgICAgICAgcHJvY2VzcyhjdXJyZW50KCkpOworICAgICAgICAgICAg
Ly8gcHJvY2VzcygpIG1pZ2h0IGFkdmFuY2UgdGhlIHBvc2l0aW9uLgorICAgICAgICAgICAgaWYg
KGhhc01vcmVDaGFyYWN0ZXJzKCkpCisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvY2VzcyhVQ2hhcik7CisgICAgCisgICAgYm9v
bCBwZWVrKFVDaGFyJiBjaGFyYWN0ZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9wb3Np
dGlvbiArIDEgPj0gbV9sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGNoYXJhY3RlciA9IG1fc291cmNlU3RyaW5nW21fcG9zaXRpb24gKyAxXTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9wb3NpdGlvbiA8IG1f
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fc291cmNlU3RyaW5nW21fcG9zaXRpb25dOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgKyttX3Bvc2l0aW9u
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzTmV3bGluZShVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0
CisgICAgeworICAgICAgICAvLyBEb24ndCBhdHRlbXB0IHRvIGNhbm9uaWNhbGl6ZSBuZXdsaW5l
IHJlbGF0ZWQgY2hhcmFjdGVycy4KKyAgICAgICAgcmV0dXJuIChjaGFyYWN0ZXIgPT0gJ1xuJyB8
fCBjaGFyYWN0ZXIgPT0gJ1xyJyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdChVQ2hhciBj
aGFyYWN0ZXIpCisgICAgeworICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKGNoYXJhY3Rlcik7Cisg
ICAgfQorICAgIAorICAgIGVudW0gUGFyc2VTdGF0ZSB7CisgICAgICAgIC8vIEhhdmUgbm90IHNl
ZW4gYW4gQVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIHlldCBvbgorICAgICAgICAvLyB0
aGlzIGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgc2VlIGEgcHJlcHJvY2Vzc29yCisgICAg
ICAgIC8vIGRpcmVjdGl2ZS4KKyAgICAgICAgQmVnaW5uaW5nT2ZMaW5lLAorICAgICAgICAKKyAg
ICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9uZSBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFy
YWN0ZXIKKyAgICAgICAgLy8gb24gdGhpcyBsaW5lLgorICAgICAgICBNaWRkbGVPZkxpbmUsCisg
ICAgICAgIAorICAgICAgICAvLyBIYW5kbGluZyBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFBh
c3NlcyB0aHJvdWdoIGFsbAorICAgICAgICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2Yg
dGhlIGxpbmUuIERpc2FibGVzIGNvbW1lbnQKKyAgICAgICAgLy8gcHJvY2Vzc2luZy4KKyAgICAg
ICAgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmUsCisgICAgICAgIAorICAgICAgICAvLyBIYW5kbGlu
ZyBhIHNpbmdsZS1saW5lIGNvbW1lbnQuIFRoZSBjb21tZW50IHRleHQgaXMKKyAgICAgICAgLy8g
cmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4KKyAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVu
dCwKKyAgICAgICAgCisgICAgICAgIC8vIEhhbmRsaW5nIGEgbXVsdGktbGluZSBjb21tZW50LiBO
ZXdsaW5lcyBhcmUgcGFzc2VkCisgICAgICAgIC8vIHRocm91Z2ggdG8gcHJlc2VydmUgbGluZSBu
dW1iZXJzLgorICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKKyAgICB9OworICAgIAorICAgIFBh
cnNlU3RhdGUgbV9wYXJzZVN0YXRlOworICAgIFN0cmluZyBtX3NvdXJjZVN0cmluZzsKKyAgICB1
bnNpZ25lZCBtX2xlbmd0aDsKKyAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uOworICAgIFN0cmluZ0J1
aWxkZXIgbV9idWlsZGVyOworfTsKKwordm9pZCBTdHJpcENvbW1lbnRzOjpwcm9jZXNzKFVDaGFy
IGMpCit7CisgICAgaWYgKGlzTmV3bGluZShjKSkgeworICAgICAgICAvLyBObyBtYXR0ZXIgd2hh
dCBzdGF0ZSB3ZSBhcmUgaW4sIHBhc3MgdGhyb3VnaCBuZXdsaW5lcworICAgICAgICAvLyBzbyB3
ZSBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisgICAgICAgIGVtaXQoYyk7CisgICAgICAgIAorICAg
ICAgICBpZiAobV9wYXJzZVN0YXRlICE9IEluTXVsdGlMaW5lQ29tbWVudCkKKyAgICAgICAgICAg
IG1fcGFyc2VTdGF0ZSA9IEJlZ2lubmluZ09mTGluZTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgVUNoYXIgdGVtcCA9IDA7CisgICAgc3dpdGNoIChtX3BhcnNl
U3RhdGUpIHsKKyAgICBjYXNlIEJlZ2lubmluZ09mTGluZToKKyAgICAgICAgaWYgKFdURjo6aXNB
U0NJSVNwYWNlKGMpKSB7CisgICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjID09ICcjJykgeworICAgICAgICAg
ICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7CisgICAgICAgICAgICBl
bWl0KGMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFRyYW5zaXRpb24gdG8gbm9ybWFsIHN0YXRlIGFuZCByZS1oYW5kbGUgY2hhcmFjdGVyLgor
ICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7CisgICAgICAgIHByb2Nlc3MoYyk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE1pZGRsZU9mTGluZToKKyAgICAg
ICAgaWYgKGMgPT0gJy8nICYmIHBlZWsodGVtcCkpIHsKKyAgICAgICAgICAgIGlmICh0ZW1wID09
ICcvJykgeworICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluU2luZ2xlTGluZUNvbW1l
bnQ7CisgICAgICAgICAgICAgICAgZW1pdCgnICcpOworICAgICAgICAgICAgICAgIGFkdmFuY2Uo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHRlbXAgPT0gJyonKSB7CisgICAgICAgICAgICAgICAgbV9wYXJzZVN0
YXRlID0gSW5NdWx0aUxpbmVDb21tZW50OworICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNv
bW1lbnQgc3RhcnQgaW4gY2FzZSB0aGUgdXNlciBoYXMKKyAgICAgICAgICAgICAgICAvLyBhbiB1
bmNsb3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCisgICAgICAgICAgICAgICAgLy8g
c2lnbmFsIGFuIGVycm9yLgorICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAgICAgICAgICAg
ICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBl
bWl0KGMpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBJblByZXByb2Nlc3Nv
ckRpcmVjdGl2ZToKKyAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgdGhlIGNoYXJhY3RlciBpcywg
anVzdCBwYXNzIGl0CisgICAgICAgIC8vIHRocm91Z2guIERvIG5vdCBwYXJzZSBjb21tZW50cyBp
biB0aGlzIHN0YXRlLiBUaGlzCisgICAgICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhp
bmcgdG8gZG8gbG9uZyB0ZXJtLCBidXQgaXQKKyAgICAgICAgLy8gc2hvdWxkIGhhbmRsZSB0aGUg
I2Vycm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuCisgICAgICAgIGVtaXQoYyk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEluU2luZ2xlTGluZUNvbW1lbnQ6CisgICAgICAg
IC8vIFRoZSBuZXdsaW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNh
cmUKKyAgICAgICAgLy8gb2YgcmVzZXR0aW5nIG91ciBzdGF0ZSB3aGVuIHdlIGdldCBvdXQgb2Yg
dGhlCisgICAgICAgIC8vIHNpbmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVyIGNo
YXJhY3RlcnMuCisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEluTXVsdGlMaW5l
Q29tbWVudDoKKyAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9PSAn
LycpIHsKKyAgICAgICAgICAgIGVtaXQoJyonKTsKKyAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAg
ICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKKyAgICAgICAgICAgIGFkdmFu
Y2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJzLiBVbmNsZWFyIHdoZXRoZXIgd2UgbWF5Cisg
ICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0IGVtaXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVy
IHRvIHRyeQorICAgICAgICAvLyB0byBwcmVzZXJ2ZSBjb2x1bW4gbnVtYmVycyBmb3IgZGVidWdn
aW5nIHB1cnBvc2VzLgorICAgICAgICBicmVhazsKKyAgICB9Cit9Cit9IC8vIG5hbWVzcGFjZSBh
bm9ueW1vdXMKKworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrIDogcHVi
bGljIEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRMb3N0Q2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY2IpIAorICAgIDog
bV9jb250ZXh0KGNiKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0KCkgb3Zl
cnJpZGUgCisgICAgeyAKKyAgICAgICAgbV9jb250ZXh0LT5mb3JjZUxvc3RDb250ZXh0KFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OlJlYWxMb3N0Q29udGV4dCk7IAorICAgIH0KKyAgICB2aXJ0
dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6Cisg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogbV9jb250ZXh0OworfTsKKworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjYikgCisgICAgOiBtX2Nv
bnRleHQoY2IpIHsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yTWVzc2FnZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIEdDM0RpbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
bV9jb250ZXh0LT5tX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKQorICAgICAgICAgICAgbV9j
b250ZXh0LT5wcmludEdMRXJyb3JUb0NvbnNvbGUobWVzc2FnZSk7CisgICAgfQorICAgIHZpcnR1
YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKCkgeyB9Citwcml2
YXRlOgorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKK307CisKK3N0
ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgV2ViR0xDb250ZXh0
QXR0cmlidXRlcyogYXR0cnMsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBEb2N1bWVudCYg
ZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAKKyAgICAvLyBUaGUgRnJhbWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3JlYXRpb24gb2Yg
YSBuZXcgV2ViR0wgY29udGV4dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBpbgorICAgIC8v
IHBhcnRpY3VsYXIsIGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3IgbW9yZSB0aW1l
cyB2aWEgdGhlIEdMX0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KKyAgICBpZiAoIWZyYW1lLT5s
b2FkZXIoKS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxl
ZCgpKSkgeworICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxz
ZSwgdHJ1ZSwgIldlYiBwYWdlIHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBXZWJHTCBjb250
ZXh0LiIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiA9IGZhbHNlOworICAgIERvY3VtZW50JiB0b3BEb2N1
bWVudCA9IGRvY3VtZW50LnRvcERvY3VtZW50KCk7CisgICAgUGFnZSogcGFnZSA9IHRvcERvY3Vt
ZW50LnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiAhdG9wRG9jdW1lbnQudXJsKCkuaXNMb2NhbEZp
bGUoKSkgeworICAgICAgICBXZWJHTExvYWRQb2xpY3kgcG9saWN5ID0gcGFnZS0+bWFpbkZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkud2ViR0xQb2xpY3lGb3JVUkwodG9wRG9jdW1lbnQudXJsKCkp
OworICAgICAgICAKKyAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pIHsK
KyAgICAgICAgICAgIExPRyhXZWJHTCwgIlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJMICglcykgaXMg
dG8gYmxvY2sgV2ViR0wuIiwgdG9wRG9jdW1lbnQudXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmIChwb2xpY3kgPT0gV2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExP
RyhXZWJHTCwgIldlYkdMIHBvbGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZl
ZCBsYXRlci4iKTsKKyAgICAgICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVl
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMgPSBhdHRycyA/IGF0dHJzLT5hdHRyaWJ1dGVzKCkgOiBHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcygpOworICAgIAorICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlh
cykgeworICAgICAgICBpZiAoIWZyYW1lLT5zZXR0aW5ncygpLm9wZW5HTE11bHRpc2FtcGxpbmdF
bmFibGVkKCkpCisgICAgICAgICAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisgICAgYXR0cmli
dXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOworICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3Jl
dGVHUFUgPSB0cnVlOworICAgIAorICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKS5mb3JjZVNvZnR3
YXJlV2ViR0xSZW5kZXJpbmcoKSkKKyAgICAgICAgYXR0cmlidXRlcy5mb3JjZVNvZnR3YXJlUmVu
ZGVyZXIgPSB0cnVlOworICAgIAorICAgIGlmIChwYWdlKQorICAgICAgICBhdHRyaWJ1dGVzLmRl
dmljZVBpeGVsUmF0aW8gPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIAorICAgIGlm
IChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkNyZWF0
ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQgd2lsbCByZXF1aXJlIGEgcG9s
aWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U+IHJlbmRlcmluZ0NvbnRleHQgPSBuaWw7CisgICAgICAgIGlm
ICh0eXBlID09ICJleHBlcmltZW50YWwtd2ViZ2wyIikKKyAgICAgICAgICAgIHJlbmRlcmluZ0Nv
bnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4obmV3IFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wxUmVuZGVy
aW5nQ29udGV4dD4obmV3IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1dGVz
KSk7CisgICAgfQorICAgIAorICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVudC52
aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5k
b3cpKTsKKyAgICAKKyAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKSB7CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZh
bHNlLCB0cnVlLCAiQ291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNp
b25zID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChleHRlbnNpb25zLT5zdXBw
b3J0cygiR0xfRVhUX2RlYnVnX21hcmtlciIpKQorICAgICAgICBleHRlbnNpb25zLT5wdXNoR3Jv
dXBNYXJrZXJFWFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOworICAgIAorICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiByZW5kZXJpbmdDb250ZXh0ID0gbmls
OworICAgIGlmICh0eXBlID09ICJleHBlcmltZW50YWwtd2ViZ2wyIikKKyAgICAgICAgcmVuZGVy
aW5nQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihuZXcg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQsIGF0dHJpYnV0ZXMpKTsKKyAg
ICBlbHNlCisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wx
UmVuZGVyaW5nQ29udGV4dD4obmV3IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBjb250
ZXh0LCBhdHRyaWJ1dGVzKSk7CisgICAgcmVuZGVyaW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVk
KCk7CisgICAgCisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Cit9CisKK1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoSFRNTENhbnZhc0VsZW1l
bnQqIHBhc3NlZENhbnZhcywgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRl
cykKKyAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQorICAgICwgQWN0
aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCisgICAgLCBtX2NvbnRleHQo
MCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQorICAgICwgbV9kaXNwYXRjaENvbnRleHRMb3N0
RXZlbnRUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoQ29u
dGV4dExvc3RFdmVudCkKKyAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCisgICAgLCBtX3Jl
c3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1heWJlUmVzdG9y
ZUNvbnRleHQpCisgICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoMCkKKyAgICAsIG1fY29udGV4
dExvc3QoZmFsc2UpCisgICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4
dCkKKyAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICwgbV9zeW50aGVzaXplZEVy
cm9yc1RvQ29uc29sZSh0cnVlKQorICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQo
bWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQorICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uKHRydWUpCisgICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFsc2Up
Cit7Cit9CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCxHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzKQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBB
Y3RpdmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4
dChjb250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29u
dGV4dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlz
cGF0Y2hDb250ZXh0TG9zdEV2ZW50KQorICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKKyAg
ICAsIG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5
YmVSZXN0b3JlQ29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSg0KQorICAgICwg
bV9jb250ZXh0TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xv
c3RDb250ZXh0KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRo
ZXNpemVkRXJyb3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xl
QWxsb3dlZChtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1Bv
bGljeVJlc29sdXRpb24oZmFsc2UpCisgICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRp
b24oZmFsc2UpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgbV9jb250ZXh0R3JvdXAg
PSBXZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKCk7CisgICAgbV9jb250ZXh0R3JvdXAtPmFkZENv
bnRleHQodGhpcyk7CisgICAgCisgICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdw
b3J0RGltc1sxXSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKKyAgICAKKyAgICBp
ZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAg
ICAKKyAgICBzZXR1cEZsYWdzKCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCgpCit7
CisgICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0KTsKKyAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsK
KyAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAgbV9hY3RpdmVUZXh0dXJlVW5p
dCA9IDA7CisgICAgbV9wYWNrQWxpZ25tZW50ID0gNDsKKyAgICBtX3VucGFja0FsaWdubWVudCA9
IDQ7CisgICAgbV91bnBhY2tGbGlwWSA9IGZhbHNlOworICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSA9IGZhbHNlOworICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGlj
c0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMOworICAgIG1fYm91bmRBcnJheUJ1ZmZl
ciA9IDA7CisgICAgbV9jdXJyZW50UHJvZ3JhbSA9IDA7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgPSAwOworICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7CisgICAgbV9kZXB0aE1hc2sg
PSB0cnVlOworICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICBtX3N0ZW5jaWxNYXNr
ID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7CisgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IDA7CisgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOworICAg
IG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0Jh
Y2sgPSAweEZGRkZGRkZGOworICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CisgICAgbV9udW1H
TEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7Cisg
ICAgCisgICAgbV9jbGVhckNvbG9yWzBdID0gbV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9y
WzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsKKyAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7
CisgICAgbV9jbGVhckRlcHRoID0gMTsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9j
b2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1h
c2tbM10gPSB0cnVlOworICAgIAorICAgIEdDM0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKTsKKyAgICBtX3RleHR1cmVVbml0cy5jbGVhcigpOworICAgIG1fdGV4dHVyZVVuaXRz
LnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAKKyAgICBHQzNEaW50
IG51bVZlcnRleEF0dHJpYnMgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJm51bVZlcnRleEF0dHJpYnMpOworICAg
IG1fbWF4VmVydGV4QXR0cmlicyA9IG51bVZlcnRleEF0dHJpYnM7CisgICAgCisgICAgbV9tYXhU
ZXh0dXJlU2l6ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpOworICAgIG1fbWF4VGV4
dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heFRleHR1cmVT
aXplLCBtX21heFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSA9IDA7
CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRSwgJm1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1
YmVNYXBUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4
Q3ViZU1hcFRleHR1cmVTaXplLCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhS
ZW5kZXJidWZmZXJTaXplID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUsICZtX21heFJlbmRlcmJ1ZmZlclNpemUp
OworICAgIAorICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRfZHJhd19idWZmZXJzIGFy
ZSBsYXppbHkgcXVlcmllZC4KKyAgICBtX21heERyYXdCdWZmZXJzID0gMDsKKyAgICBtX21heENv
bG9yQXR0YWNobWVudHMgPSAwOworICAgIAorICAgIG1fYmFja0RyYXdCdWZmZXIgPSBHcmFwaGlj
c0NvbnRleHQzRDo6QkFDSzsKKyAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVj
a2VkID0gZmFsc2U7CisgICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZCA9IGZhbHNlOworICAgIAor
ICAgIG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uzo6Y3JlYXRlKHRoaXMsIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0
KTsKKyAgICBhZGRDb250ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgp
KTsKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9i
amVjdDsKKyAgICAKKyAgICBtX3ZlcnRleEF0dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0
dHJpYnMpOworICAgIAorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY3Jl
YXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkpCisgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisgICAgCisgICAgSW50U2l6ZSBjYW52
YXNTaXplID0gY2xhbXBlZENhbnZhc1NpemUoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOworICAgIAorICAgIG1f
Y29udGV4dC0+cmVzaGFwZShjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkp
OworICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52
YXNTaXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQtPnNjaXNzb3IoMCwgMCwgY2FudmFzU2l6
ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKKyAgICAKKyAgICBtX2NvbnRleHQtPnNl
dENvbnRleHRMb3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRl
eHRMb3N0Q2FsbGJhY2s+KHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNh
bGxiYWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdl
Q2FsbGJhY2s+KHRoaXMpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpz
ZXR1cEZsYWdzKCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICAKKyAgICBpZiAoUGFn
ZSogcGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgbV9zeW50aGVz
aXplZEVycm9yc1RvQ29uc29sZSA9IHBhZ2UtPnNldHRpbmdzKCkud2ViR0xFcnJvcnNUb0NvbnNv
bGVFbmFibGVkKCk7CisgICAgCisgICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5p
c0dMRVMyQ29tcGxpYW50KCk7CisgICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0Fj
Y2Vzc2VzID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01J
VU1fc3RyaWN0X2F0dHJpYnMiKTsKKyAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOwor
ICAgIGlmIChtX2lzR0xFUzJDb21wbGlhbnQpIHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmlj
dCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVy
ZV9ucG90Iik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwi
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9v
Zl90d28iKTsKKyAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIp
OworICAgIH0KKyAgICBtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNv
bnN0Cit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkp
CisgICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnByaXZpbGVnZWRXZWJHTEV4dGVuc2lv
bnNFbmFibGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkK
K3sKKyAgICBpZiAoIW1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCkp
CisgICAgICAgIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmFwcGVuZChmb3JtYXQpOworfQor
CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSgp
Cit7CisgICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0
aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVm
b3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgor
ICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9kZWZhdWx0VmVydGV4QXJy
YXlPYmplY3QgPSBudWxscHRyOworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxw
dHI7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRQ
cm9ncmFtID0gbnVsbHB0cjsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxwdHI7Cisg
ICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKKyAgICAKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fdGV4
dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBtX3RleHR1
cmVVbml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICAK
KyAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVN
YXAgPSBudWxscHRyOworICAgIAorICAgIGlmICghbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KSB7CisgICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKyAgICAgICAgZGVzdHJv
eUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVDb250
ZXh0KHRoaXMpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
ZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJl
c29sdXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUaGUgZHJhd2luZyBidWZm
ZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAor
ICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KKyAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKKyAgICAK
KyAgICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RD
YWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxs
YmFjayhudWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgfQorfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit7Cisg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
bV9jb250ZXh0LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAKKyAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsK
KyAgICAKKyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOworICAgIFJlbmRlckJveCogcmVuZGVy
Qm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOworICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYg
cmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7Cisg
ICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICBjYW52YXMoKS0+Y2xl
YXJDb3BpZWRJbWFnZSgpOworICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZh
c0NoYW5nZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0
eSkgeworICAgICAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7CisgICAgICAgICAg
ICBjYW52YXMoKS0+ZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgwLCAwKSwgY2xhbXBlZENh
bnZhc1NpemUoKSkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBpZiAoIW1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFy
ZWQKKyAgICAgICAgfHwgbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFz
ayAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gY29udGV4dEF0dHJpYnV0ZXMgPSBn
ZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIAorICAgIC8vIERldGVybWluZSBpZiBpdCdzIHBv
c3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2VyIGFza2VkIGZvciBhbmQgdGhpcyBj
bGVhci4KKyAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBtYXNrICYmICFtX3NjaXNzb3JFbmFibGVk
OworICAgIAorICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKKyAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkgeworICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3Io
bV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29sb3JbMV0gOiAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0gPyBtX2NsZWFyQ29sb3JbMl0g
OiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbM10gPyBtX2Ns
ZWFyQ29sb3JbM10gOiAwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNv
bG9yKDAsIDAsIDAsIDApOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRy
dWUsIHRydWUpOworICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPmRlcHRoKCkp
IHsKKyAgICAgICAgaWYgKCFjb21iaW5lZENsZWFyIHx8ICFtX2RlcHRoTWFzayB8fCAhKG1hc2sg
JiBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCkpCisgICAgICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyRGVwdGgoMS4wZik7CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICAgICAgbV9jb250ZXh0LT5kZXB0aE1hc2so
dHJ1ZSk7CisgICAgfQorICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+c3RlbmNpbCgpKSB7Cisg
ICAgICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCht
X2NsZWFyU3RlbmNpbCAmIG1fc3RlbmNpbE1hc2spOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgICAgIG1fY29udGV4dC0+c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4RkZGRkZGRkYpOwor
ICAgIH0KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmNsZWFyRnJhbWVidWZmZXJzKGNsZWFyTWFzayk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIG1fY29udGV4
dC0+Y2xlYXIoY2xlYXJNYXNrKTsKKyAgICB9CisgICAgCisgICAgcmVzdG9yZVN0YXRlQWZ0ZXJD
bGVhcigpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RP
clplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2xheWVyQ2xlYXJlZCA9
IHRydWU7CisgICAgCisgICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpCit7CisgICAgLy8g
UmVzdG9yZSB0aGUgc3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCisgICAgaWYgKG1fc2Npc3Nv
ckVuYWJsZWQpCisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NsZWFyQ29sb3JbMF0s
IG1fY2xlYXJDb2xvclsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGVhckNvbG9y
WzJdLCBtX2NsZWFyQ29sb3JbM10pOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JN
YXNrWzBdLCBtX2NvbG9yTWFza1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9y
TWFza1syXSwgbV9jb2xvck1hc2tbM10pOworICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChtX2Ns
ZWFyRGVwdGgpOworICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsKTsK
KyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
T05ULCBtX3N0ZW5jaWxNYXNrKTsKKyAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhtX2RlcHRoTWFz
ayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFya0xheWVyQ29tcG9z
aXRlZCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKGNhbnZhcygpLT5kb2N1bWVudCgpLnByaW50aW5nKCkpCisgICAgICAgIGNh
bnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICAKKyAgICAvLyBVbnRpbCB0aGUg
Y2FudmFzIGlzIHdyaXR0ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAor
ICAgIC8vIGhhcHBlbmVkIGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVk
IGJ5IHRoZSBjb21wb3NpdG9yLgorICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgp
ICYmICFtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fY29u
dGV4dC0+cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7
CisgICAgICAgIAorICAgICAgICBjYW52YXMoKS0+bWFrZVByZXNlbnRhdGlvbkNvcHkoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOworICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5
ICYmICFtX2xheWVyQ2xlYXJlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNhbnZhcygp
LT5jbGVhckNvcGllZEltYWdlKCk7CisgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwor
ICAgIAorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
Y29tbWl0KCk7CisgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhj
YW52YXMoKS0+YnVmZmVyKCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgCisgICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9
Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2xlYXJJZkNvbXBv
c2l0ZWQoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmNvbW1pdCgpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IG1fY29udGV4
dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEobV9kcmF3aW5nQnVmZmVyLmdldCgp
KTsKKyAgICAKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJC
aW5kaW5nLmdldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIGFwcHJveGltYXRpb24gYmVjYXVzZSBhdCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbGV2ZWwgd2UgZG9uJ3QKKyAgICAvLyBrbm93IGlmIHRoZSB1bmRlcmx5
aW5nIEZCTyB1c2VzIHRleHR1cmVzIG9yIHJlbmRlcmJ1ZmZlcnMuCisgICAgR0MzRGludCBtYXhT
aXplID0gc3RkOjptaW4obV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhSZW5kZXJidWZmZXJTaXplKTsK
KyAgICAvLyBMaW1pdCBkcmF3aW5nIGJ1ZmZlciBzaXplIHRvIDRrIHRvIGF2b2lkIG1lbW9yeSBl
eGhhdXN0aW9uLgorICAgIGNvbnN0IGludCBzaXplVXBwZXJMaW1pdCA9IDQwOTY7CisgICAgbWF4
U2l6ZSA9IHN0ZDo6bWluKG1heFNpemUsIHNpemVVcHBlckxpbWl0KTsKKyAgICBHQzNEaW50IG1h
eFdpZHRoID0gc3RkOjptaW4obWF4U2l6ZSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pOworICAgIEdD
M0RpbnQgbWF4SGVpZ2h0ID0gc3RkOjptaW4obWF4U2l6ZSwgbV9tYXhWaWV3cG9ydERpbXNbMV0p
OworICAgIHdpZHRoID0gY2xhbXAod2lkdGgsIDEsIG1heFdpZHRoKTsKKyAgICBoZWlnaHQgPSBj
bGFtcChoZWlnaHQsIDEsIG1heEhlaWdodCk7CisgICAgCisgICAgaWYgKG1fbmVlZHNVcGRhdGUp
IHsKKyAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7
CisgICAgICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCkpCisgICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0No
YW5nZWQpOworICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgfQorICAgIAorICAg
IC8vIFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUg
bmV3bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgorICAgIC8vIGNs
ZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KKyAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworICAgIAor
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG9iamVjdE9yWmVybyhtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJl
MkRCaW5kaW5nLmdldCgpKSk7CisgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG9iamVjdE9yWmVybyhtX3JlbmRlcmJ1ZmZlckJp
bmRpbmcuZ2V0KCkpKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
b2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Cit9CisKK2ludCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdAoreworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNp
emUoKS53aWR0aCgpOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJh
bWVidWZmZXJTaXplKCkud2lkdGgoKTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdAoreworICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKKyAg
ICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhl
aWdodCgpOworfQorCit1bnNpZ25lZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzaXplSW5C
eXRlcyhHQzNEZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJZVEU6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGJ5dGUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIHJldHVy
biBzaXplb2YoR0MzRHVieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEc2hvcnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1c2hvcnQp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihHQzNEaW50KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVpbnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RmbG9hdCk7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRleHR1cmUgLSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJh
Y3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBtX2FjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZSAtIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMDsKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUodGV4dHVy
ZSk7CisgICAgCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5zZXRBY3RpdmVUZXh0dXJlVW5pdCh0ZXh0dXJlKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJH
TFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xP
YmplY3QoImF0dGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJh
dHRhY2hTaGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFwcm9ncmFt
LT5hdHRhY2hTaGFkZXIoc2hhZGVyKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJhdHRhY2hTaGFkZXIiLCAic2hhZGVy
IGF0dGFjaG1lbnQgYWxyZWFkeSBoYXMgc2hhZGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmpl
Y3RPclplcm8oc2hhZGVyKSk7CisgICAgc2hhZGVyLT5vbkF0dGFjaGVkKCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0cmliTG9jYXRpb24i
LCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxl
bmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRB
dHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYmluZEF0dHJp
YkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgaW5kZXgsIG5hbWUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNo
ZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3Qq
IG9iamVjdCwgYm9vbCYgZGVsZXRlZCkKK3sKKyAgICBkZWxldGVkID0gZmFsc2U7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChvYmplY3QpIHsKKyAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgp
LCB0aGlzKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qgbm90IGZyb20gdGhp
cyBjb250ZXh0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgZGVsZXRlZCA9ICFvYmplY3QtPm9iamVjdCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kQnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVj
dFRvQmVCb3VuZCgiYmluZEJ1ZmZlciIsIGJ1ZmZlciwgZGVsZXRlZCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgYnVmZmVyID0gMDsKKyAgICBpZiAoYnVmZmVy
ICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiYmluZEJ1ZmZlciIsICJidWZmZXJzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11
bHRpcGxlIHRhcmdldHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGFyZ2V0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIpCisgICAgICAgIG1fYm91bmRBcnJh
eUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPnNldEVsZW1lbnRBcnJheUJ1ZmZlcihidWZmZXIpOworICAgIGVsc2UgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEJ1
ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsK
KyAgICBpZiAoYnVmZmVyKQorICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVj
a09iamVjdFRvQmVCb3VuZCgiYmluZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAgICBidWZmZXIgPSAwOworICAg
IGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5k
RnJhbWVidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZyhvYmpl
Y3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9m
IGJpbmRpbmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+YmluZCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoYnVmZmVyKQor
ICAgICAgICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKKyAgICBhcHBseVN0ZW5jaWxU
ZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZFJlbmRlcmJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJCdWZmZXIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxl
dGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRSZW5kZXJidWZmZXIiLCBy
ZW5kZXJCdWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlbGV0ZWQp
CisgICAgICAgIHJlbmRlckJ1ZmZlciA9IDA7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kUmVuZGVyYnVmZmVyIiwgImludmFsaWQg
dGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9yZW5kZXJidWZmZXJCaW5k
aW5nID0gcmVuZGVyQnVmZmVyOworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJn
ZXQsIG9iamVjdE9yWmVybyhyZW5kZXJCdWZmZXIpKTsKKyAgICBpZiAocmVuZGVyQnVmZmVyKQor
ICAgICAgICByZW5kZXJCdWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdl
YkdMVGV4dHVyZSogdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3Vu
ZCgiYmluZFRleHR1cmUiLCB0ZXh0dXJlLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChkZWxldGVkKQorICAgICAgICB0ZXh0dXJlID0gMDsKKyAgICBpZiAodGV4dHVyZSAmJiB0
ZXh0dXJlLT5nZXRUYXJnZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiYmluZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVs
dGlwbGUgdGFyZ2V0cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RpbnQgbWF4
TGV2ZWwgPSAwOworICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQpIHsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVy
ZTJEQmluZGluZyA9IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2
ZWw7CisgICAgICAgIAorICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyICYmICFtX2FjdGl2ZVRl
eHR1cmVVbml0KQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRUZXh0dXJlMkRCaW5k
aW5nKG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7CisgICAgICAgIAorICAgIH0gZWxzZSBpZiAodGFy
Z2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7CisgICAgICAgIG1f
dGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZyA9
IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJiaW5kVGV4dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmpl
Y3RPclplcm8odGV4dHVyZSkpOworICAgIGlmICh0ZXh0dXJlKQorICAgICAgICB0ZXh0dXJlLT5z
ZXRUYXJnZXQodGFyZ2V0LCBtYXhMZXZlbCk7CisgICAgCisgICAgLy8gTm90ZTogcHJldmlvdXNs
eSB3ZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBURVhUVVJFX1dSQVBfUgorICAgIC8v
IHJlcGVhdCBtb2RlIHRvIENMQU1QX1RPX0VER0UgZm9yIGN1YmUgbWFwIHRleHR1cmVzLCBiZWNh
dXNlIE9wZW5HTAorICAgIC8vIEVTIDIuMCBkb2Vzbid0IGV4cG9zZSB0aGlzIGZsYWcgKGEgYnVn
IGluIHRoZSBzcGVjaWZpY2F0aW9uKSBhbmQKKyAgICAvLyBvdGhlcndpc2UgdGhlIGFwcGxpY2F0
aW9uIGhhcyBubyBjb250cm9sIG92ZXIgdGhlIHNlYW1zIGluIHRoaXMKKyAgICAvLyBkaW1lbnNp
b24uIEhvd2V2ZXIsIGl0IGFwcGVhcnMgdGhhdCBzdXBwb3J0aW5nIHRoaXMgcHJvcGVybHkgb24g
YWxsCisgICAgLy8gcGxhdGZvcm1zIGlzIGZhaXJseSBpbnZvbHZlZCAod2lsbCByZXF1aXJlIGEg
SGFzaE1hcCBmcm9tIHRleHR1cmUgSUQKKyAgICAvLyBpbiBhbGwgcG9ydHMpLCBhbmQgd2UgaGF2
ZSBub3QgaGFkIGFueSBjb21wbGFpbnRzLCBzbyB0aGUgbG9naWMgaGFzCisgICAgLy8gYmVlbiBy
ZW1vdmVkLgorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kQ29sb3Io
R0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0
IGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kRXF1YXRpb24oR0Mz
RGVudW0gbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJH
QiwgR0MzRGVudW0gbW9kZUFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGVSR0IpIHx8
ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlQWxwaGEpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJH
QiwgbW9kZUFscGhhKTsKK30KKworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJs
ZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxl
bmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVt
IGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAgIC8v
IE5vdGU6IEFscGhhIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIFJHQi4K
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0Zh
Y3RvcnMoImJsZW5kRnVuYyIsIHNyY1JHQiwgZHN0UkdCKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fY29udGV4dC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBk
c3RBbHBoYSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0
YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZl
ciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVz
YWdlKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzaXplIDwg
MCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoIXNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPT0gMCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRh
KHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4oc2l6ZSkpKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEi
LCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
OworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXpl
aXB0cj4oc2l6ZSksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBm
YWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtz
IGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAg
IH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0g
dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2Up
OworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFkYXRhKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiYnVmZmVyRGF0YSIsICJubyBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAgICAg
aWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVy
RGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0
aCgpLCBkYXRhLT5kYXRhKCksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3Jz
VG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5j
dGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQg
dGhpbmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgp
OworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIq
IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJn
ZXQsIHVzYWdlKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
ZGF0YSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7
CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRo
ZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEt
PmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSwgdXNhZ2UpOworICAgIGlmIChtX2Nv
bnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRo
ZSBidWZmZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3Qg
aGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVyLT5kaXNhc3Nv
Y2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBB
cnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMo
ImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7
CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAob2Zmc2V0IDwgMCkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5h
c3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRh
dGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZm
ZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+
Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRh
IGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0
YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJE
YXRhKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZl
clN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZp
ZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdl
YkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJT
dWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIGlm
ICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJi
dWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRl
QnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVF
cnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0
YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5n
dGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEg
ZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRh
IGl0IHRoaW5rcyBpdCBkb2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRh
dGEoKTsKKyAgICB9Cit9CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxpZCB0
YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURTsKKyAgICBjb25zdCBj
aGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgR0MzRGVudW0gcmVz
dWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3RhdHVzKCZyZWFzb24pOworICAgIGlm
IChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Cisg
ICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwg
cmVhc29uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgcmVzdWx0ID0gbV9j
b250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhcihHQzNEYml0Zmll
bGQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1hc2sgJiB+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJf
QklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyIiwgImludmFsaWQgbWFzayIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFt
ZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNv
dXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY2xlYXIiLCByZWFz
b24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghY2xlYXJJZkNvbXBvc2l0ZWQo
bWFzaykpCisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIobWFzayk7CisgICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJDb2xv
cihHQzNEZmxvYXQgciwgR0MzRGZsb2F0IGcsIEdDM0RmbG9hdCBiLCBHQzNEZmxvYXQgYSkKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKHN0ZDo6aXNuYW4ocikpCisgICAgICAgIHIgPSAwOworICAgIGlmIChzdGQ6OmlzbmFuKGcp
KQorICAgICAgICBnID0gMDsKKyAgICBpZiAoc3RkOjppc25hbihiKSkKKyAgICAgICAgYiA9IDA7
CisgICAgaWYgKHN0ZDo6aXNuYW4oYSkpCisgICAgICAgIGEgPSAxOworICAgIG1fY2xlYXJDb2xv
clswXSA9IHI7CisgICAgbV9jbGVhckNvbG9yWzFdID0gZzsKKyAgICBtX2NsZWFyQ29sb3JbMl0g
PSBiOworICAgIG1fY2xlYXJDb2xvclszXSA9IGE7CisgICAgbV9jb250ZXh0LT5jbGVhckNvbG9y
KHIsIGcsIGIsIGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFy
RGVwdGgoR0MzRGZsb2F0IGRlcHRoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsKKyAgICBtX2Nv
bnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xlYXJTdGVuY2lsID0gczsKKyAg
ICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwg
R0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29sb3JNYXNrWzBdID0g
cmVkOworICAgIG1fY29sb3JNYXNrWzFdID0gZ3JlZW47CisgICAgbV9jb2xvck1hc2tbMl0gPSBi
bHVlOworICAgIG1fY29sb3JNYXNrWzNdID0gYWxwaGE7CisgICAgbV9jb250ZXh0LT5jb2xvck1h
c2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RP
clplcm8oc2hhZGVyKSk7CisgICAgR0MzRGludCB2YWx1ZTsKKyAgICBtX2NvbnRleHQtPmdldFNo
YWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9T
VEFUVVMsICZ2YWx1ZSk7CisgICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBk
YXRhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIs
IHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCF2YWxpZGF0
ZUNvbXByZXNzZWRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4
SW1hZ2UyRCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGJvcmRlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRl
ciBub3QgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21w
cmVzc2VkVGV4RGltZW5zaW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVs
LCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIs
IHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29t
cHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7CisgICAgICAgIGlmIChs
ZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJj
b21wcmVzc2VkVGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2NvbnRleHQtPm1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGRhdGEtPmJ5dGVMZW5ndGgo
KSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGNvbXByZXNzZWRUZXhJbWFn
ZTJEIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2
ZSB0aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KKyAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJn
ZXQsIGxldmVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB0ZXgtPnNldExl
dmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgIHRleC0+c2V0Q29tcHJlc3NlZCgp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVUZXhGdW5j
TGV2ZWwoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChmb3JtYXQpKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIGZvcm1hdCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEo
ImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwor
ICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGZvcm1hdCAhPSB0
ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEIiwgImZvcm1hdCBkb2VzIG5vdCBtYXRjaCB0ZXh0dXJlIGZvcm1hdCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghdmFsaWRhdGVDb21wcmVz
c2VkVGV4U3ViRGltZW5zaW9ucygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHRleCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICB0ZXgtPnNl
dENvbXByZXNzZWQoKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
Zm9ybWF0KQoreworICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlGb3Jt
YXQoZm9ybWF0KSAmIChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiZm9ybWF0IGNhbiBub3QgYmUgc2V0LCBvbmx5IHJlbmRlcmVkIHRvIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFn
ZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4
SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0YXJn
ZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1Rl
eEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0
LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleElt
YWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBX
ZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJE
IiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCByZWFzb24pOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlzUmVzb3VyY2VT
YWZlKCkpIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3
aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIG1f
Y29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgs
IHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU2NvcGVk
RHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1l
YnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZ
OworICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OworICAgICAg
ICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0
aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAm
Y2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAg
JiYgY2xpcHBlZEhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNs
aXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Cisg
ICAgfQorICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBu
b25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCisgICAgdGV4LT5zZXRMZXZlbElu
Zm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVu
Y0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1
cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5
VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB4b2Zmc2V0
LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBo
ZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlz
IGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KKyAgICBpZiAo
eG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsgaGVpZ2h0IDwgMCkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlU
ZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkg
fHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiY29weVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xlIG91dCBvZiByYW5nZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0ID0gdGV4LT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVU
ZXhGb3JtYXQoImNvcHlUZXhTdWJJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlv
blZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRp
YmxlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJl
YXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQz
RCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAi
Y29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKKyAgICAg
ICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgp
LCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIG1fY29udGV4dC0+Y29weVRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBl
ZFk7CisgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CisgICAg
ICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldp
ZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFks
ICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgeworICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAg
ICAgIEdDM0RlbnVtIHR5cGUgPSB0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCk7CisgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hhcltdPiB6ZXJvOworICAgICAgICAgICAg
aWYgKHdpZHRoICYmIGhlaWdodCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemU7Cisg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNp
emVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQs
ICZzaXplLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVy
cm9yLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB6ZXJv
ID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KHNpemUpOworICAgICAgICAgICAg
ICAgIGlmICghemVybykgeworICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91
dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJv
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWln
aHQgPiAwKSB7CisgICAgICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5k
ZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0ICsgY2xpcHBlZFggLSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZ
LCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9k
cmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAg
ICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorfQorCitQ
YXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVC
dWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbyA9IFdlYkdMQnVmZmVyOjpj
cmVhdGUodGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBv
OworfQorCitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gbyA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRDb250ZXh0
T2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKHRoaXMpOwor
ICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1Jl
ZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVByb2dy
YW0oKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJHTFByb2dyYW06OmNy
ZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87
Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdlYkdMUmVuZGVy
YnVmZmVyPiBvID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFy
ZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xT
aGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0
eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSICYmIHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY3JlYXRlU2hhZGVyIiwg
ImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIAorICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhp
cywgdHlwZSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmN1bGxGYWNlKEdDM0RlbnVtIG1v
ZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+Y3VsbEZhY2UobW9kZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRl
eHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAob2JqZWN0LT5vYmpl
Y3QoKSkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gY29udGV4dCBoZXJlIGJlY2F1
c2Ugd2Ugd2FudAorICAgICAgICAvLyB0aGluZ3MgaW4gdGhpcyBjb250ZXh0IHVuYm91bmQuCisg
ICAgICAgIG9iamVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
ZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVj
dChidWZmZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9
PSBidWZmZXIpCisgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7CisgICAgCisgICAgbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0LT51bmJpbmRCdWZmZXIoYnVmZmVyKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVm
ZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZlcikp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJp
bmRpbmcpIHsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgICAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1l
YnVmZmVyQmluZGluZygwKTsKKyAgICAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVi
dWZmZXIgaGVyZSB0byBiaW5kIGJhY2sgdG8gaW50ZXJuYWwgZmJvLgorICAgICAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlUHJvZ3Jh
bShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgZGVsZXRlT2JqZWN0KHByb2dyYW0pOwor
ICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFByb2dyYW0gdG8gMCBoZXJlIGJlY2F1c2Ug
dGhlIGRlbGV0aW9uIG9mIHRoZQorICAgIC8vIGN1cnJlbnQgcHJvZ3JhbSBpcyBkZWxheWVkLgor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihX
ZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghZGVsZXRlT2JqZWN0
KHJlbmRlcmJ1ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVmZmVyID09
IG1fcmVuZGVyYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0g
MDsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIocmVuZGVyYnVmZmVy
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVTaGFkZXIoV2Vi
R0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBkZWxldGVPYmplY3Qoc2hhZGVyKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSog
dGV4dHVyZSkKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJE
QmluZGluZykKKyAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcg
PSBudWxscHRyOworICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVVbml0c1tpXS50ZXh0
dXJlQ3ViZU1hcEJpbmRpbmcpCisgICAgICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJl
Q3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJv
bUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZGVwdGhGdW5j
KGZ1bmMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlcHRoTWFzayhH
QzNEYm9vbGVhbiBmbGFnKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2RlcHRoTWFzayA9IGZsYWc7CisgICAgbV9jb250ZXh0LT5k
ZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVw
dGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoek5lYXIgPiB6
RmFyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCFwcm9ncmFtLT5kZXRhY2hTaGFkZXIoc2hhZGVyKSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRh
Y2hTaGFkZXIiLCAic2hhZGVyIG5vdCBhdHRhY2hlZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2Jq
ZWN0T3JaZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRl
eHQzRCgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlKEdD
M0RlbnVtIGNhcCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7CisgICAgICAgIG1fc3Rl
bmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkgeworICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNz
b3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOworICAgIH0KKyAgICBtX2NvbnRleHQtPmRpc2Fi
bGUoY2FwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3RhdGUuZW5hYmxlZCA9IGZhbHNlOworICAg
IAorICAgIGlmIChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICBtX2Nv
bnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgUmVmUHRyPFdl
YkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qt
PmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG9mZnNldCA8IDApCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBhcnJheSwg
b2Zmc2V0IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDQgZm9yIGFsaWdubWVudCByZWFzb25zLgorICAg
ICAgICBpZiAob2Zmc2V0ICUgNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgb2Zm
c2V0IC89IDQ7CisgICAgICAgIAorICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJh
eUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gNDsKKyAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291
bnQgPiBuIC0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKKyAgICAgICAg
Ly8gRm9yIGFuIHVuc2lnbmVkIHNob3J0IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUg
YnkgMiBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCisgICAgICAgIGlmIChvZmZzZXQgJSAyKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSB1b2Zmc2V0
IGFuIGVsZW1lbnQgb2Zmc2V0LgorICAgICAgICBvZmZzZXQgLz0gMjsKKyAgICAgICAgCisgICAg
ICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAy
OworICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFy
cmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CisgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50
ID4gbiAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJ
bmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50
c1JlcXVpcmVkKQoreworICAgIC8vIFBlcmZvcm1zIGNvbnNlcnZhdGl2ZSB2YWxpZGF0aW9uIGJ5
IGNhY2hpbmcgYSBtYXhpbXVtIGluZGV4IG9mCisgICAgLy8gdGhlIGdpdmVuIHR5cGUgcGVyIGVs
ZW1lbnQgYXJyYXkgYnVmZmVyLiBJZiBhbGwgb2YgdGhlIGJvdW5kCisgICAgLy8gYXJyYXkgYnVm
ZmVycyBoYXZlIGVub3VnaCBlbGVtZW50cyB0byBzYXRpc2Z5IHRoYXQgbWF4aW11bQorICAgIC8v
IGluZGV4LCBza2lwcyB0aGUgZXhwZW5zaXZlIHBlci1kcmF3LWNhbGwgaXRlcmF0aW9uIGluCisg
ICAgLy8gdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZS4KKyAgICAKKyAgICBSZWZQdHI8V2ViR0xC
dWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0
RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVu
dHMgPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICAvLyBUaGUgY2FzZSBj
b3VudD09MCBpcyBhbHJlYWR5IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxp
ZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUuCisgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50
QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXIpOwor
ICAgIAorICAgIGludCBtYXhJbmRleCA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Z2V0Q2FjaGVkTWF4
SW5kZXgodHlwZSk7CisgICAgaWYgKG1heEluZGV4IDwgMCkgeworICAgICAgICAvLyBDb21wdXRl
IHRoZSBtYXhpbXVtIGluZGV4IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlw
ZSBvZiBpbmRleC4KKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6IHsKKyAgICAgICAgICAgIGNvbnN0IEdDM0R1Ynl0
ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAg
ICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykK
KyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2Fz
dDxpbnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOiB7CisgICAgICAgICAgICBudW1F
bGVtZW50cyAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgICAgICBjb25zdCBHQzNEdXNo
b3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGJ1ZmZlci0+ZGF0YSgpKTsK
KyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkr
KykKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNf
Y2FzdDxpbnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDogeworICAgICAgICAgICAgaWYg
KCFtX29lc0VsZW1lbnRJbmRleFVpbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgICAg
IGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVpbnQqPihidWZmZXIt
PmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVs
ZW1lbnRzOyBpKyspCisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRl
eCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGVsZW1lbnRBcnJheUJ1ZmZlci0+c2V0Q2FjaGVkTWF4SW5kZXgodHlwZSwgbWF4
SW5kZXgpOworICAgIH0KKyAgICAKKyAgICBpZiAobWF4SW5kZXggPj0gMCkgeworICAgICAgICAv
LyBUaGUgbnVtYmVyIG9mIHJlcXVpcmVkIGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG1h
eGltdW0KKyAgICAgICAgLy8gaW5kZXggdGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgorICAgICAgICBu
dW1FbGVtZW50c1JlcXVpcmVkID0gbWF4SW5kZXggKyAxOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0MzRHNpemVpIGNvdW50LCBH
QzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVx
dWlyZWQpCit7CisgICAgQVNTRVJUKGNvdW50ID49IDAgJiYgb2Zmc2V0ID49IDApOworICAgIHVu
c2lnbmVkIGxhc3RJbmRleCA9IDA7CisgICAgCisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVt
ZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpOworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBudW1FbGVtZW50
c1JlcXVpcmVkID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlm
ICghZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHVuc2lnbmVkIGxvbmcgdW9mZnNldCA9IG9mZnNldDsKKyAg
ICB1bnNpZ25lZCBsb25nIG4gPSBjb3VudDsKKyAgICAKKyAgICBpZiAodHlwZSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBl
bGVtZW50IG9mZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVpbnQpOworICAg
ICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oZWxl
bWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7
CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5k
ZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX1NIT1JUKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4K
KyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgIGNvbnN0IEdD
M0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oZWxlbWVudEFycmF5
QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7CisgICAgICAg
IHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgpCisgICAg
ICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUp
IHsKKyAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVi
eXRlKj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSAr
IHVvZmZzZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAg
PiBsYXN0SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAg
ICArK3A7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlbiBzZXQgdGhlIGxhc3Qg
aW5kZXggaW4gdGhlIGluZGV4IGFycmF5IGFuZCBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCisgICAg
bnVtRWxlbWVudHNSZXF1aXJlZCA9IGxhc3RJbmRleCArIDE7CisgICAgcmV0dXJuIG51bUVsZW1l
bnRzUmVxdWlyZWQgPiAwOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHBy
aW1pdGl2ZUNvdW50KQoreworICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRy
aWIgYW5kIGNoZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAgICAg
aWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZh
bGlkYXRlQmluZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAK
KyAgICBpZiAoZWxlbWVudENvdW50IDw9IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIAorICAgIC8vIExvb2sgaW4gZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUg
Y3VycmVudCBwcm9ncmFtKS4KKyAgICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNl
OworICAgIGJvb2wgc2F3RW5hYmxlZEF0dHJpYiA9IGZhbHNlOworICAgIGludCBudW1BY3RpdmVB
dHRyaWJMb2NhdGlvbnMgPSBtX2N1cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlv
bnMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsg
KytpKSB7CisgICAgICAgIGludCBsb2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRy
aWJMb2NhdGlvbihpKTsKKyAgICAgICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0
PGludD4obV9tYXhWZXJ0ZXhBdHRyaWJzKSkgeworICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShsb2MpOworICAgICAgICAgICAgaWYg
KHN0YXRlLmVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAvLyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVt
ZW50cyBjb21wdXRhdGlvbi4KKyAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVu
dCwgd2Ugd2lsbCBvbmx5IHRvdWNoIHRoZSBkYXRhIGZvciB0aGUKKyAgICAgICAgICAgICAgICAv
LyBlbGVtZW50IGFuZCBub3RoaW5nIGJleW9uZCBpdC4KKyAgICAgICAgICAgICAgICBpbnQgYnl0
ZXNSZW1haW5pbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVM
ZW5ndGgoKSAtIHN0YXRlLm9mZnNldCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxl
bWVudHMgPSAwOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYnl0ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50
KQorICAgICAgICAgICAgICAgICAgICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcg
LSBzdGF0ZS5ieXRlc1BlckVsZW1lbnQpIC8gc3RhdGUuc3RyaWRlOworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGluc3RhbmNlc1JlcXVpcmVkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc3Rh
dGUuZGl2aXNvcikgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNl
aWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghc2F3Tm9uSW5z
dGFuY2VkQXR0cmliICYmIHNhd0VuYWJsZWRBdHRyaWIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5vYmplY3QoKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0IG9yIG9iamVjdCBkZWxldGVkIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRl
eHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5v
dCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWl0aXZlQ291
bnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3
TW9kZShmdW5jdGlvbk5hbWUsIG1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGZpcnN0IDwgMCB8fCBjb3VudCA8IDApIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIGlmICghY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHBy
aW1pdGl2ZUNvdW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghaXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZl
IGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8R0Mz
RGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2Vk
Q291bnQ7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQ
cmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CisgICAgICAgIGlmIChjaGVja2VkU3VtLmhh
c092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8
ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hlY2tl
ZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0
cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVm
ZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVh
c29uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzKEdDM0Rl
bnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlRHJh
d0FycmF5cygiZHJhd0FycmF5cyIsIG1vZGUsIGZpcnN0LCBjb3VudCwgMCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIAorICAgIGJvb2wgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KQorICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIw
KGZpcnN0ICsgY291bnQgLSAxKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAg
ICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0FycmF5cyIsIHRydWUpOworICAgIAor
ICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworICAgIAorICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAg
ICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYg
KCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3Mo
ImRyYXdBcnJheXMiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50cywgR0MzRHNp
emVpIHByaW1pdGl2ZUNvdW50KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25O
YW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKKyAgICAgICAgaWYgKG1fb2VzRWxlbWVu
dEluZGV4VWludCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
Y291bnQgb3Igb2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIGlmICghY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByaW1pdGl2ZUNvdW50IDwg
MCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1F
TlRfQVJSQVlfQlVGRkVSIGJvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsK
KyAgICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKKyAgICAg
ICAgaWYgKCF2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0
PEdDM0RpbnRwdHI+KG9mZnNldCkpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInJlcXVl
c3Qgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVudCBFTEVNRU5UX0FSUkFZX0JVRkZFUiIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghY291bnQpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBDaGVja2VkPEdDM0Rp
bnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOworICAgICAgICBDaGVja2Vk
PEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZl
Q291bnQpOworICAgICAgICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVj
a2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghdmFs
aWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRh
dGVWZXJ0ZXhBdHRyaWJ1dGVzKG51bUVsZW1lbnRzLCBjaGVja2VkUHJpbWl0aXZlQ291bnQudW5z
YWZlR2V0KCkpKSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2Uo
Y2hlY2tlZENvdW50LnVuc2FmZUdldCgpLCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVt
ZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMi
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcygw
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0
bHkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nl
c3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgCisgICAgdW5zaWduZWQgbnVtRWxlbWVu
dHMgPSAwOworICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50cyIsIG1v
ZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzLCAwKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgYm9vbCB2ZXJ0ZXhB
dHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsK
KyAgICAgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgICAgIHZhbGlkYXRlSW5kZXhBcnJh
eVByZWNpc2UoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51
bUVsZW1lbnRzKTsKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVy
dGV4QXR0cmliMChudW1FbGVtZW50cyk7CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJp
Y3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHMiLCB0
cnVlKTsKKyAgICAKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlw
ZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CisgICAgCisgICAgaWYgKCFpc0dM
RVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgcmVzdG9y
ZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1l
bnRzIiwgZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJlbmFibGUiLCBj
YXApKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9URVNUKSB7CisgICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgPSB0cnVlOworICAgICAg
ICBhcHBseVN0ZW5jaWxUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CisgICAgICAgIG1fc2Npc3Nv
ckVuYWJsZWQgPSB0cnVlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsK
KyAgICB9CisgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGluZGV4ID49
IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImlu
ZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91
bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgIHN0
YXRlLmVuYWJsZWQgPSB0cnVlOworICAgIAorICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZp
bmlzaCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+ZmluaXNoKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Zmx1c2goKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFdlYkdMUmVuZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIs
IHRhcmdldCwgYXR0YWNobWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVm
ZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAo
KSwgdGhpcykpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gYnVmZmVy
IG9yIGJ1ZmZlciBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRh
dGVkOyBhbGwgY3VycmVudAorICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVy
bmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXJPYmpl
Y3QgPSBvYmplY3RPclplcm8oYnVmZmVyKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAg
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmpl
Y3QpOworICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0
LCBidWZmZXJPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVu
ZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgYnVm
ZmVyKTsKKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwg
R0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVm
ZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2ht
ZW50KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChsZXZlbCkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVy
VGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUg
bm90IGZyb20gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8g
RG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1
cnJlbnQKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBs
YWNlIG9mIHRoZSBkZWZhdWx0CisgICAgLy8gRkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFt
ZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9y
WmVybyh0ZXh0dXJlKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
QVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVO
VDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAg
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0
YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgIH0KKyAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyb250RmFjZShHQzNEZW51
bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPmZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdl
YkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAi
LCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghdGV4LT5jYW5HZW5lcmF0ZU1pcG1hcHMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIs
ICJsZXZlbCAwIG5vdCBwb3dlciBvZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIzOTE2LiBDb21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBh
bGxvd2VkIGluIFdlYkdMIDI6CisgICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2VuZXJhdGVNaXBtYXAiLCAidHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21w
cmVzc2VkIHRleHR1cmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlk
YXRlU2V0dGFibGVUZXhGb3JtYXQoImdlbmVyYXRlTWlwbWFwIiwgdGV4LT5nZXRJbnRlcm5hbEZv
cm1hdCh0YXJnZXQsIDApKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIGdlbmVyYXRl
TWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVyIGlzIG5vdCBORUFSRVNUX01J
UE1BUF9MSU5FQVIKKyAgICAvLyBvbiBNYWMuIFJlbW92ZSB0aGUgaGFjayBvbmNlIHRoaXMgZHJp
dmVyIGJ1ZyBpcyBmaXhlZC4KKyNpZiBPUyhEQVJXSU4pCisgICAgYm9vbCBuZWVkVG9SZXNldE1p
bkZpbHRlciA9IGZhbHNlOworICAgIGlmICh0ZXgtPmdldE1pbkZpbHRlcigpICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpIHsKKyAgICAgICAgbV9jb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUik7CisgICAgICAgIG5l
ZWRUb1Jlc2V0TWluRmlsdGVyID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAgICBtX2NvbnRleHQt
PmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CisjaWYgT1MoREFSV0lOKQorICAgIGlmIChuZWVkVG9S
ZXNldE1pbkZpbHRlcikKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGV4LT5nZXRNaW5GaWx0ZXIo
KSk7CisjZW5kaWYKKyAgICB0ZXgtPmdlbmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7Cit9CisKK1Bh
c3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRB
Y3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVBdHRyaWIi
LCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgQWN0aXZlSW5mbyBpbmZv
OworICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHByb2dy
YW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIExP
RyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgYXR0cmlidXRlICVkOiAlcyIsIGluZGV4LCBpbmZv
Lm5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgCisgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6
Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworfQorCitQYXNzUmVmUHRy
PFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlVW5p
Zm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9n
cmFtKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQWN0aXZlSW5mbyBpbmZvOworICAgIGlmICgh
bV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgs
IGluZm8pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlh
bnQoKSkgeworICAgICAgICBpZiAoaW5mby5zaXplID4gMSAmJiAhaW5mby5uYW1lLmVuZHNXaXRo
KCJbMF0iKSkKKyAgICAgICAgICAgIGluZm8ubmFtZS5hcHBlbmQoIlswXSIpOworICAgIH0KKyAg
ICAKKyAgICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZlIHVuaWZvcm0gJWQ6ICVzIiwgaW5k
ZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAKKyAgICByZXR1cm4gV2ViR0xBY3Rp
dmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3Rz
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIHNoYWRl
ck9iamVjdHMuY2xlYXIoKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGNvbnN0IEdDM0RlbnVtIHNoYWRlclR5cGVbXSA9
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIsCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIKKyAgICB9OworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplb2Yoc2hhZGVyVHlwZSkgLyBzaXplb2YoR0MzRGVudW0pOyArK2kp
IHsKKyAgICAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hh
ZGVyKHNoYWRlclR5cGVbaV0pOworICAgICAgICBpZiAoc2hhZGVyKQorICAgICAgICAgICAgc2hh
ZGVyT2JqZWN0cy5hcHBlbmQoc2hhZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0cmliTG9jYXRpb24oV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0cmliTG9j
YXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmICghdmFsaWRhdGVM
b2NhdGlvbkxlbmd0aCgiZ2V0QXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkp
CisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdldEF0dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOworICAgICAg
ICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0
aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9C
VUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGlmIChwbmFtZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUgJiYgcG5hbWUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkJVRkZFUl9VU0FHRSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
KyAgICAKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclBh
cmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgaWYgKHBuYW1lID09IEdyYXBo
aWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2
YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFs
dWUpKTsKK30KKworUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gV2Ug
YWx3YXlzIG5lZWQgdG8gcmV0dXJuIGEgbmV3IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgb2JqZWN0
IHRvCisgICAgLy8gcHJldmVudCB0aGUgdXNlciBmcm9tIG11dGF0aW5nIGFueSBjYWNoZWQgdmVy
c2lvbi4KKyAgICAKKyAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2UgcmVxdWVzdGVkIHZh
bHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAorICAgIC8vIGFuZCBzdGVuY2lsLCByZWdhcmRsZXNz
IG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCisgICAgLy8gR3JhcGhpY3NDb250
ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRl
cz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZShtX2NvbnRleHQt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOworICAgIGlmICghbV9hdHRyaWJ1dGVzLmRlcHRoKQor
ICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7CisgICAgaWYgKCFtX2F0dHJpYnV0
ZXMuc3RlbmNpbCkKKyAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNpbChmYWxzZSk7CisgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBUaGUgRHJhd2luZ0J1ZmZlciBvYnRh
aW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRy
aWJ1dGVzKCksCisgICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3duIGRldGVybWluYXRpb24g
b2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KKyAgICAgICAgYXR0cmlidXRl
cy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1wbGUoKSk7CisgICAgfQor
ICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKK30KKworR0MzRGVudW0gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXJyb3IoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKK30KKworV2ViR0xFeHRlbnNpb24q
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfYmxl
bmRfbWlubWF4IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBv
cnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpIHsKKyAgICAgICAgaWYgKCFtX2V4dEJsZW5kTWlu
TWF4KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIpOworICAgICAgICAgICAgbV9leHRCbGVuZE1pbk1h
eCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7CisgICAgICAgIGlmICgh
bV9leHRzUkdCKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsKKyAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0ZDo6
bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1f
ZXh0c1JHQi5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJF
WFRfZnJhZ19kZXB0aCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgeworICAgICAgICBpZiAoIW1fZXh0RnJhZ0Rl
cHRoKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKKyAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRoID0g
c3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKKyAgICAgICAgJiYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRl
cl90ZXh0dXJlX2xvZCIpKSkgeworICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxPRCkg
eworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIG1fZXh0U2hhZGVyVGV4
dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsKKyAg
ICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgeworICAg
ICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPih0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgeworICAgICAg
ICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyIpOworICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjptYWtl
X3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOworICAgIH0KKyAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKKyAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9h
dCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1RleHR1cmVGbG9hdD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2Vz
VGV4dHVyZUZsb2F0LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpIHsK
KyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zs
b2F0X2xpbmVhciIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOworICAgIH0KKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQorICAg
ICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKSkgeworICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdCkg
eworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhh
bGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsKKyAg
ICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBw
b3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgeworICAgICAgICBpZiAo
IW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRf
bGluZWFyIik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7CisgICAg
fQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKKyAgICAgICAgaWYgKCFtX29lc1ZlcnRleEFy
cmF5T2JqZWN0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAgICAgICAgIG1f
b2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5T2Jq
ZWN0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJheU9i
amVjdC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNf
ZWxlbWVudF9pbmRleF91aW50IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKKyAgICAgICAgaWYg
KCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7Cisg
ICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU0Vs
ZW1lbnRJbmRleFVpbnQ+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29lc0Vs
ZW1lbnRJbmRleFVpbnQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsTG9zZUNv
bnRleHQpCisgICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VDb250
ZXh0LmdldCgpOworICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJL
SVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQorICAgICAgICAmJiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dlYmds
Q29tcHJlc3NlZFRleHR1cmVBVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1
cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRoaXMp
OworICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOworICAg
IH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJl
c3NlZF90ZXh0dXJlX3B2cnRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9
IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOworICAgIH0K
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVy
ZV9zM3RjIikKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRl
ZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMpCisg
ICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3VuaXF1
ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7CisgICAgICAgIHJldHVybiBtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQorICAgICAgICAmJiBXZWJHTERl
cHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7CisgICAgICAgIGlm
ICghbV93ZWJnbERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsKKyAg
ICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVw
dGhUZXh0dXJlPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV93ZWJnbERlcHRo
VGV4dHVyZS5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKKyAgICAgICAg
aWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAgICAg
ICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1ZmZl
cnM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZlcnMu
Z2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykp
IHsKKyAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFu
Y2VkX2FycmF5cyIpOworICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0ZDo6
bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOworICAgIH0KKyAgICBpZiAo
YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgICAgICBtX3dlYmdsRGVi
dWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlckluZm8+
KHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5nZXQo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdM
X2RlYnVnX3NoYWRlcnMiKQorICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgeworICAg
ICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQorICAgICAgICAgICAgICAgIG1fd2Vi
Z2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0aGlz
KTsKKyAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCitXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0
ZXJzKCJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0YXJnZXQsIGF0dGFjaG1l
bnQpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgCisgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZl
ciBib3VuZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAor
ICAgIFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0
QXR0YWNobWVudE9iamVjdChhdHRhY2htZW50KTsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAg
ICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
T0JKRUNUX1RZUEUpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29u
dGV4dDNEOjpOT05FKTsKKyAgICAgICAgLy8gT3BlbkdMIEVTIDIuMCBzcGVjaWZpZXMgSU5WQUxJ
RF9FTlVNIGluIHRoaXMgY2FzZSwgd2hpbGUgZGVza3RvcCBHTAorICAgICAgICAvLyBzcGVjaWZp
ZXMgSU5WQUxJRF9PUEVSQVRJT04uCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorICAgIAorICAgIEFTU0VSVChvYmplY3QtPmlzVGV4dHVyZSgpIHx8IG9i
amVjdC0+aXNSZW5kZXJidWZmZXIoKSk7CisgICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkpIHsK
KyAgICAgICAgc3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRSk7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Cisg
ICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihy
ZWludGVycHJldF9jYXN0PFdlYkdMVGV4dHVyZSo+KG9iamVjdCkpKTsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RF
WFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAgICAgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7CisgICAgICAgICAgICBHQzNEaW50
IHZhbHVlID0gMDsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIpOworICAgICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKTsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4o
cmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCkpKTsKKyAgICAgICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdf
RVhUOiB7CisgICAgICAgICAgICBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyID0gcmVp
bnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCk7CisgICAgICAgICAgICBH
QzNEZW51bSByZW5kZXJCdWZmZXJGb3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9y
bWF0KCk7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lv
bnMzRDo6U1JHQl9FWFQgJiYgcmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lvbnMzRDo6U1JH
Ql9BTFBIQV9FWFQpOworICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlckZvcm1hdCA9PSBFeHRl
bnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9FWFQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhFeHRlbnNpb25zM0Q6OlNSR0JfRVhUKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIH0KKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsKKyAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgIH0KK30KKworV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgY29uc3QgaW50IGludFplcm8gPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKKyAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJH
TEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRB
cnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFf
QklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6CisgICAgICAgIHJldHVybiBnZXRC
b29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RF9DT0xPUjoKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgorICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9SR0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFV
QVRJT05fQUxQSEE6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgorICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RF9TUkNfUkdCOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMVUVfQklUUzoKKyAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQ0xFQVJfVkFMVUU6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoK
KyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oVWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5kYXRhKCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKKyAgICAgICAgcmV0dXJuIGdl
dEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNV
TExfRkFDRV9NT0RFOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50
UHJvZ3JhbSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6CisgICAg
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKKyAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oaW50WmVybyk7CisgICAgICAgIHJldHVybiBn
ZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NMRUFSX1ZBTFVFOgorICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0ZVTkM6CisgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6CisgICAg
ICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9XUklURU1BU0s6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAg
ICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBh
c3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9GQUNFOgorICAgICAgICByZXR1cm4gZ2V0VW5z
aWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdF
TkVSQVRFX01JUE1BUF9ISU5UOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CisgICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTkVfV0lEVEg6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6CisgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJC
VUZGRVJfU0laRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9URVhUVVJFX1NJWkU6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6Cisg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhU
VVJFX0lNQUdFX1VOSVRTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVM6CisgICAgICAgIHJldHVybiBnZXRXZWJHTElu
dEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1f
U0hBREVSX0JJTkFSWV9GT1JNQVRTOgorICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5
cyByZXR1cm4gMCBmb3IgdGhpcz8KKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9G
SUxMOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6CisgICAgICAgIHJldHVy
biBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVEX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVm
ZmVyQmluZGluZykpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IFdlYkdMIikpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9CVUZGRVJTOgorICAgICAgICByZXR1cm4gZ2V0
SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVf
Q09WRVJBR0VfSU5WRVJUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgor
ICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNBTVBMRVM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgICAgICBy
ZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFH
RV9WRVJTSU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEu
MCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xB
TkdVQUdFX1ZFUlNJT04pICsgIikiKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0JBQ0tfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKKyAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6CisgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9CQUNLX1JFRjoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6
CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JJVFM6CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgIW1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhpbnRaZXJvKTsKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKKyAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKKyAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9N
QVNLOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgorICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZykpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5p
dHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0ZMSVBfWV9XRUJHTDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZ
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFf
V0VCR0w6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05W
RVJTSU9OX1dFQkdMOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3Jz
cGFjZUNvbnZlcnNpb24pOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhTdHJpbmcoIldlYktpdCIpKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJX
ZWJHTCAxLjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVS
U0lPTikgKyAiKSIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgorICAg
ICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMKKyAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZl
cykKKyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25z
M0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90
IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2Vi
R0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6CisgICAgICAgIGlm
IChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3Jl
bmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OworICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdM
OgorICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6
VkVORE9SKSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VC
R0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5H
X09FUzogLy8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICAgICAgaWYgKG1fb2VzVmVydGV4
QXJyYXlPYmplY3QpIHsKKyAgICAgICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5pc0RlZmF1bHRPYmplY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0KSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0K
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2Fy
cmF5X29iamVjdCBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDog
Ly8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAgICAgIGlmIChtX2V4dFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYykKKyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmls
dGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDog
Ly8gRVhUX2RyYXdfYnVmZmVycyBCRUdJTgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJz
KQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRz
KCkpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2Ry
YXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgorICAgICAgICBp
ZiAobV93ZWJnbERyYXdCdWZmZXJzKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhn
ZXRNYXhEcmF3QnVmZmVycygpKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1
ZmZlcnMKKyAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIw
X0VYVAorICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5z
aW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKKyAgICAg
ICAgICAgIEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAg
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKKyAgICAgICAgICAgIGVs
c2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNr
RHJhd0J1ZmZlcjsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVT
RURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1QYXJhbWV0ZXIiLCBwcm9ncmFtKSkKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIAorICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAg
IHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RB
VFVTOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHByb2dyYW0tPmlzRGVsZXRlZCgpKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWQUxJREFURV9TVEFUVVM6CisgICAgICAgIG1f
Y29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUp
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUzoKKyAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFUVEFDSEVEX1NIQURFUlM6CisgICAgICAgIG1fY29udGV4dC0+Z2V0
UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFDVElWRV9BVFRSSUJVVEVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9V
TklGT1JNUzoKKyAgICAgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291
bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1QYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiAiIjsKKyAg
ICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVj
dE9yWmVybyhwcm9ncmFtKSkpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgaWYgKCFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgIm5vIHJlbmRlcmJ1ZmZlciBib3VuZCIpOwor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGlmIChtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1NURU5DSUwKKyAgICAgICAgJiYgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+aXNW
YWxpZCgpKSB7CisgICAgICAgIEFTU0VSVCghaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7Cisg
ICAgICAgIGludCB2YWx1ZSA9IDA7CisgICAgICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1dJRFRIOgorICAgICAgICAgICAg
dmFsdWUgPSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdI
VDoKKyAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9HUkVFTl9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfQkxVRV9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJf
REVQVEhfU0laRToKKyAgICAgICAgICAgIHZhbHVlID0gMjQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1NURU5DSUxfU0la
RToKKyAgICAgICAgICAgIHZhbHVlID0gODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgorICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldElu
dGVybmFsRm9ybWF0KCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lE
VEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgorICAgICAgICBtX2NvbnRleHQtPmdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworV2ViR0xH
ZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclBhcmFtZXRlcihXZWJH
TFNoYWRlciogc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJQYXJhbWV0ZXIiLCBzaGFkZXIpKQorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAg
c3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFTEVURV9TVEFU
VVM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc2hhZGVyLT5pc0RlbGV0ZWQoKSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVM6CisgICAgICAgIG1fY29u
dGV4dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIHBuYW1lLCAmdmFsdWUpOwor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBREVSX1RZUEU6CisgICAgICAgIG1fY29udGV4
dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIHBuYW1lLCAmdmFsdWUpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitTdHJp
bmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRl
ciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlckluZm9Mb2ciLCBzaGFk
ZXIpKQorICAgICAgICByZXR1cm4gIiI7CisgICAgcmV0dXJuIGVuc3VyZU5vdE51bGwobV9jb250
ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG9iamVjdE9yWmVybyhzaGFkZXIpKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51
bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01F
TlRfU0hBREVSOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJl
Y2lzaW9uRm9ybWF0IiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxPV19GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpN
RURJVU1fRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1FRElVTV9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9JTlQ6
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQiLCAiaW52YWxpZCBwcmVjaXNpb24gdHlwZSIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgCisgICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKKyAgICBHQzNEaW50
IHByZWNpc2lvbiA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQo
c2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOworICAgIHJldHVy
biBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwg
cHJlY2lzaW9uKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNo
YWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdl
dFNoYWRlclNvdXJjZSIsIHNoYWRlcikpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4g
ZW5zdXJlTm90TnVsbChzaGFkZXItPmdldFNvdXJjZSgpKTsKK30KKworVmVjdG9yPFN0cmluZz4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpCit7Cisg
ICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworICAgIAorICAgIGlmIChtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX2JsZW5kX21pbm1heCIpKQor
ICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRfYmxlbmRfbWlubWF4Iik7CisgICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NSR0IiKSkKKyAgICAgICAg
cmVzdWx0LmFwcGVuZCgiRVhUX3NSR0IiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfZnJhZ19kZXB0aCIpKQorICAgICAgICByZXN1bHQuYXBw
ZW5kKCJFWFRfZnJhZ19kZXB0aCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0IikpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoIk9FU190ZXh0dXJlX2Zsb2F0Iik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOworICAgIGlmIChtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQi
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAg
IGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJl
X2hhbGZfZmxvYXRfbGluZWFyIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJl
X2hhbGZfZmxvYXRfbGluZWFyIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAgIGlmIChtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB8
fCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FSQl9zaGFkZXJfdGV4
dHVyZV9sb2QiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJX
RUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgaWYgKG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qi
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAg
ICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVu
dF9pbmRleF91aW50IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU19lbGVtZW50X2luZGV4
X3VpbnQiKTsKKyAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9sb3NlX2NvbnRleHQiKTsKKyAgICBp
ZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpOworICAg
IGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIp
OworICAgIGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKHRoaXMpKQor
ICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpOwor
ICAgIGlmIChXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkp
KQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZXB0aF90ZXh0dXJlIik7CisgICAgaWYg
KHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZHJh
d19idWZmZXJzIik7CisgICAgaWYgKEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhp
cykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKKyAg
ICAKKyAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmICht
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRf
c2hhZGVyX3NvdXJjZSIpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdf
c2hhZGVycyIpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9p
bmZvIik7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1
cmVCaW5kaW5nKCJnZXRUZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRl
eCkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIEdDM0RpbnQgdmFsdWUgPSAw
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5f
RklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgorICAgICAgICBtX2NvbnRl
eHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKSk7CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOworICAgICAgICB9CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
IG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFt
KSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGlmICghdW5pZm9ybUxvY2F0
aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJvZ3JhbSgpICE9IHByb2dyYW0pIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
Z2V0VW5pZm9ybSIsICJubyB1bmlmb3JtbG9jYXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHBy
b2dyYW0iKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICBHQzNE
aW50IGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0aW9uLT5sb2NhdGlvbigpOworICAgIAorICAgIEdD
M0RlbnVtIGJhc2VUeXBlOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICBzd2l0Y2ggKHVuaWZv
cm1Mb2NhdGlvbi0+dHlwZSgpKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVu
Z3RoID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9P
TF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAg
ICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCT09MX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJP
T0w7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkJPT0xfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUM0OgorICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMjoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxl
bmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwor
ICAgICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVF9WRUM0OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDM6CisgICAgICAgIGJhc2VUeXBl
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA5OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQ0OgorICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0g
MTY7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJf
MkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFOgorICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIENhbid0IGhhbmRsZSB0aGlz
IHR5cGUKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVuaGFuZGxlZCB0eXBlIik7CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgc3dpdGNoIChiYXNlVHlwZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiB7CisgICAgICAgIEdDM0RmbG9hdCB2YWx1ZVsx
Nl0gPSB7MH07CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWZ2RVhUKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDE2ICogc2l6ZW9mKEdDM0RmbG9hdCksIHZhbHVl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtZnYob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3Ro
ID09IDEpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3Ro
KSk7CisgICAgfQorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDogeworICAgICAgICBH
QzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBw
b3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZv
cm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdDM0Rp
bnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5p
Zm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAg
aWYgKGxlbmd0aCA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZVsw
XSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVl
LCBsZW5ndGgpKTsKKyAgICB9CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDogewor
ICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5l
c3NFWFRTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
Z2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6
ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsK
KyAgICAgICAgaWYgKGxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIGJvb2wgYm9vbFZhbHVlWzE2
XSA9IHswfTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBsZW5ndGg7IGor
KykKKyAgICAgICAgICAgICAgICBib29sVmFsdWVbal0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1
ZVtqXSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGJvb2xWYWx1ZSwgbGVuZ3Ro
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJv
b2w+KHZhbHVlWzBdKSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGdldCBoZXJlLCBzb21ldGhpbmcgd2Vu
dCB3cm9uZyBpbiBvdXIgdW5mb3J0dW5hdGVseSBjb21wbGV4IGxvZ2ljIGFib3ZlCisgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlm
b3JtIiwgInVua25vd24gZXJyb3IiKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cit9CisK
K1Bhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBuYW1l
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiZ2V0
VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
IChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtTG9jYXRp
b24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CisgICAgaWYgKHVuaWZvcm1Mb2Nh
dGlvbiA9PSAtMSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgR0MzRGludCBh
Y3RpdmVVbmlmb3JtcyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3lt
Ym9sQ291bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZF
X1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9ybXMpOworICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8
IGFjdGl2ZVVuaWZvcm1zOyBpKyspIHsKKyAgICAgICAgQWN0aXZlSW5mbyBpbmZvOworICAgICAg
ICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSks
IGksIGluZm8pKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIC8vIFN0cmlw
ICJbMF0iIGZyb20gdGhlIG5hbWUgaWYgaXQncyBhbiBhcnJheS4KKyAgICAgICAgaWYgKGluZm8u
bmFtZS5lbmRzV2l0aCgiWzBdIikpCisgICAgICAgICAgICBpbmZvLm5hbWUgPSBpbmZvLm5hbWUu
bGVmdChpbmZvLm5hbWUubGVuZ3RoKCkgLSAzKTsKKyAgICAgICAgLy8gSWYgaXQncyBhbiBhcnJh
eSwgd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggZWFjaCBlbGVtZW50LCBhcHBlbmRpbmcgIltp
bmRleF0iIHRvIHRoZSBuYW1lLgorICAgICAgICBmb3IgKEdDM0RpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGluZm8uc2l6ZTsgKytpbmRleCkgeworICAgICAgICAgICAgU3RyaW5nIHVuaWZvcm1OYW1l
ID0gaW5mby5uYW1lICsgIlsiICsgU3RyaW5nOjpudW1iZXIoaW5kZXgpICsgIl0iOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAobmFtZSA9PSB1bmlmb3JtTmFtZSB8fCBuYW1lID09IGlu
Zm8ubmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNy
ZWF0ZShwcm9ncmFtLCB1bmlmb3JtTG9jYXRpb24sIGluZm8udHlwZSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIAor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICAKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiZ2V0VmVydGV4QXR0cmliIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGNvbnN0IFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgIAorICAgIGlmIChtX2Fu
Z2xlSW5zdGFuY2VkQXJyYXlzICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0RJVklTT1JfQU5HTEUpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
c3RhdGUuZGl2aXNvcik7CisgICAgCisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAg
ICAgIGlmICgoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiAhaW5kZXggJiYgbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKS5idWZmZXJCaW5kaW5nID09IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlcikKKyAgICAgICAgICAgIHx8ICFzdGF0ZS5idWZmZXJCaW5kaW5nCisg
ICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFz
c1JlZlB0cjxXZWJHTEJ1ZmZlcj4oc3RhdGUuYnVmZmVyQmluZGluZykpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5lbmFibGVkKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGUubm9ybWFsaXplZCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0
YXRlLnNpemUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJS
QVlfU1RSSURFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm9yaWdpbmFsU3Ry
aWRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZ
UEU6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUudHlwZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKG1fdmVydGV4QXR0cmliVmFsdWVbaW5k
ZXhdLnZhbHVlLCA0KSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFZlcnRleEF0dHJpYiIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAg
ICB9Cit9CisKK2xvbmcgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhB
dHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIEdDM0RzaXpl
aXB0ciByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5h
bWUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHJlc3VsdCk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOworICAgIHN3aXRjaCAodGFyZ2V0KSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAg
ICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcworICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKQorICAgICAg
ICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIWlz
VmFsaWQpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2NvbnRleHQtPmhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xl
YW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZl
cikKK3sKKyAgICBpZiAoIWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIGlmICghYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzQnVmZmVy
KGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmlzQ29udGV4dExvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRMb3N0OworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzQ29udGV4dExvc3RPclBlbmRpbmco
KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gJiYgIW1faGFzUmVxdWVz
dGVkUG9saWN5UmVzb2x1dGlvbikgeworICAgICAgICBMT0coV2ViR0wsICJDb250ZXh0IGlzIGJl
aW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgcG9saWN5LiIpOworICAgICAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgpOworICAg
ICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpOworICAgICAgICBpZiAocGFnZSAmJiAh
ZG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFt
ZSgpLmxvYWRlcigpLmNsaWVudCgpLnJlc29sdmVXZWJHTFBvbGljeUZvclVSTChkb2N1bWVudC51
cmwoKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkgZG8gYW55dGhpbmcg
d2l0aCB0aGUgcmVzdWx0IGZyb20gcmVzb2x1dGlvbi4gQSBtb3JlCisgICAgICAgIC8vIGNvbXBs
ZXRlIGltcGxlbWVudGF0aW9uIG1pZ2h0IHRyeSB0byBjb25zdHJ1Y3QgYSByZWFsIGNvbnRleHQs
IGV0YyBhbmQgcHJvY2VlZAorICAgICAgICAvLyB3aXRoIG5vcm1hbCBvcGVyYXRpb24uCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkxMjIKKyAg
ICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
OworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0VuYWJsZWQo
R0MzRGVudW0gY2FwKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlQ2FwYWJpbGl0eSgiaXNFbmFibGVkIiwgY2FwKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKQorICAgICAgICBy
ZXR1cm4gbV9zdGVuY2lsRW5hYmxlZDsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQo
Y2FwKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNGcmFt
ZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1l
YnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgaWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyLT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9n
cmFtIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKK30K
KworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNSZW5kZXJidWZmZXIo
V2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRlcmJ1ZmZl
ciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIGlmICghcmVuZGVyYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCisgICAgICAgIHJldHVy
biAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1
ZmZlci0+b2JqZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyIHx8
IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
cmV0dXJuIG1fY29udGV4dC0+aXNTaGFkZXIoc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK0dDM0Ri
b29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUq
IHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKCF0ZXh0dXJlLT5oYXNFdmVyQmVl
bkJvdW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQt
PmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5saW5l
V2lkdGgod2lkdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmxpbmtQ
cm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJsaW5rUHJvZ3JhbSIsIHByb2dyYW0pKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgV2ViR0xTaGFkZXIq
IHZlcnRleFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICAgICAgV2ViR0xTaGFkZXIqIGZyYWdtZW50U2hhZGVy
ID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5U
X1NIQURFUik7CisgICAgICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlz
VmFsaWQoKSB8fCAhZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc1ZhbGlkKCkg
fHwgIW1fY29udGV4dC0+cHJlY2lzaW9uc01hdGNoKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIp
LCBvYmplY3RPclplcm8oZnJhZ21lbnRTaGFkZXIpKSB8fCAhbV9jb250ZXh0LT5jaGVja1Zhcnlp
bmdzUGFja2luZyhvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdt
ZW50U2hhZGVyKSkpIHsKKyAgICAgICAgICAgIHByb2dyYW0tPnNldExpbmtTdGF0dXMoZmFsc2Up
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1fY29u
dGV4dC0+bGlua1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKKyAgICBwcm9ncmFtLT5p
bmNyZWFzZUxpbmtDb3VudCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBu
YW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoK
KyAgICAgICAgbV91bnBhY2tGbGlwWSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAg
ICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dF
QkdMOgorICAgICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVG
QVVMVF9XRUJHTCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICAgICAg
ICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4o
cGFyYW0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgZm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAy
IHx8IHBhcmFtID09IDQgfHwgcGFyYW0gPT0gOCkgeworICAgICAgICAgICAgaWYgKHBuYW1lID09
IEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKKyAgICAgICAgICAgICAgICBtX3Bh
Y2tBbGlnbm1lbnQgPSBwYXJhbTsKKyAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQ6CisgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQg
PSBwYXJhbTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFt
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgZm9yIGFsaWdubWVudCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNE
ZmxvYXQgdW5pdHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAvLyBEdWUgdG8gV2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMsIGl0
IGlzIG5vdCBwb3NzaWJsZSB0bworICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhlIFdl
YkdMIEFQSS4KKyAgICBBU1NFUlQoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOworICAgIC8vIFZh
bGlkYXRlIGlucHV0IHBhcmFtZXRlcnMuCisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFkUGl4
ZWxzIiwgIm5vIGRlc3RpbmF0aW9uIEFycmF5QnVmZmVyVmlldyIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJy
ZWFkUGl4ZWxzIiwgImludmFsaWQgZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEgfHwgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZWFkUGl4ZWxzIiwgImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJR05F
RF9CWVRFIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gVmFsaWRhdGUgYXJyYXkg
dHlwZSBhZ2FpbnN0IHBpeGVsIHR5cGUuCisgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpT
Qzo6VHlwZVVpbnQ4KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5v
dCBVaW50OEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciog
cmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4
dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
ICJyZWFkUGl4ZWxzIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBD
YWxjdWxhdGUgYXJyYXkgc2l6ZSwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FM
SUdOTUVOVC4KKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzUmVxdWlyZWQgPSAwOworICAgIHVuc2ln
bmVkIHBhZGRpbmcgPSAwOworICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsK
KyAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxC
eXRlc1JlcXVpcmVkLCAmcGFkZGluZyk7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9y
LCAicmVhZFBpeGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5
dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3
IG5vdCBsYXJnZSBlbm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIHZv
aWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CisgICAgCisgICAgeworICAgICAgICBT
Y29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhU
U3VwcG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlYWRu
UGl4ZWxzRVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5ieXRl
TGVuZ3RoKCksIGRhdGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPnJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICB9
CisgICAgCisjaWYgT1MoREFSV0lOKQorICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRl
ZCkgLy8gd2UgaGF2ZW4ndCBjb21wdXRlZCBwYWRkaW5nCisgICAgICAgIG1fY29udGV4dC0+Y29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tB
bGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICAvLyBGSVhNRTog
cmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xF
UyBkcml2ZXIgYnVnCisgICAgLy8gb24gUUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMg
b2ZmLCByZWFkUGl4ZWxzIHNob3VsZAorICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBv
ZiAwLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKTsKKyAgICAgICAgZm9yIChH
QzNEc2l6ZWkgaXkgPSAwOyBpeSA8IGhlaWdodDsgKytpeSkgeworICAgICAgICAgICAgZm9yIChH
QzNEc2l6ZWkgaXggPSAwOyBpeCA8IHdpZHRoOyArK2l4KSB7CisgICAgICAgICAgICAgICAgcGl4
ZWxzWzNdID0gMjU1OworICAgICAgICAgICAgICAgIHBpeGVscyArPSA0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcGl4ZWxzICs9IHBhZGRpbmc7CisgICAgICAgIH0KKyAgICB9CisjZW5k
aWYKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPnJlbGVhc2VTaGFkZXJDb21waWxlcigpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9y
ZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZW5kZXJidWZmZXJTdG9y
YWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghdmFsaWRhdGVTaXplKCJyZW5kZXJidWZmZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdo
dCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9B
MToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0I4
X0FMUEhBOF9FWFQ6CisgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6
OlNSR0I4X0FMUEhBOF9FWFQgJiYgIW1fZXh0c1JHQikgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0
b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgIG1fcmVu
ZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0cnVlKTsKKyAgICAgICAgbV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgICAgICBpZiAoaXNEZXB0
aFN0ZW5jaWxTdXBwb3J0ZWQoKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVy
U3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMzRDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhl
aWdodCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKGlzRGVwdGhT
dGVuY2lsU3VwcG9ydGVkKCkpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElu
dGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFs
dWUsIEdDM0Rib29sZWFuIGludmVydCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSh2YWx1
ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzY2lzc29y
KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghdmFsaWRhdGVTaXplKCJzY2lzc29yIiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2hhZGVyU291cmNlKFdlYkdMU2hh
ZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInNoYWRlclNvdXJjZSIsIHNoYWRlcikpCisgICAgICAg
IHJldHVybjsKKyAgICBTdHJpbmcgc3RyaW5nV2l0aG91dENvbW1lbnRzID0gU3RyaXBDb21tZW50
cyhzdHJpbmcpLnJlc3VsdCgpOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoInNoYWRlclNvdXJj
ZSIsIHN0cmluZ1dpdGhvdXRDb21tZW50cykpCisgICAgICAgIHJldHVybjsKKyAgICBzaGFkZXIt
PnNldFNvdXJjZShzdHJpbmcpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG9iamVjdE9y
WmVybyhzaGFkZXIpLCBzdHJpbmdXaXRob3V0Q29tbWVudHMpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVm
LCBHQzNEdWludCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5j
IiwgZnVuYykpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwor
ICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0g
bWFzazsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAgIG1fY29udGV4dC0+
c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1
bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1
bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3
aXRjaCAoZmFjZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0FORF9CQUNL
OgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOworICAgICAgICBtX3N0ZW5jaWxGdW5j
UmVmQmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOworICAgICAg
ICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJl
ZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVm
QmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCAiaW52YWxp
ZCBmYWNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zdGVuY2ls
RnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9zdGVuY2ls
TWFzayA9IG1hc2s7CisgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOworICAgIG1fY29udGV4
dC0+c3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBz
d2l0Y2ggKGZhY2UpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFD
SzoKKyAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7CisgICAgICAgIG1fc3RlbmNpbE1hc2tC
YWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJPTlQ6CisgICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAgICAgICBtX3N0ZW5jaWxNYXNrQmFj
ayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1Nl
cGFyYXRlIiwgImludmFsaWQgZmFjZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
Y29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0g
emZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWlsLCB6ZmFp
bCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxP
cFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBH
QzNEZW51bSB6cGFzcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWls
LCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUg
YW55IGVycm9ycyByZXR1cm5lZC4KKyAgICBlYyA9IDA7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAg
ICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSkpOworICAgIEFTU0VSVCh0ZXgpOworICAgIEFTU0VSVCghbGV2
ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKTsKKyAgICBpZiAoIXBp
eGVscykgeworICAgICAgICAvLyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5HTCBpbXBsZW1lbnRhdGlv
biBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMgdGhlcmVmb3JlIHRydWUu
CisgICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGlmIHRoZXkgYXJlIHVzaW5n
IEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVzCisgICAgICAgIC8vIGNh
biBub3QgYmUgY2xlYXJlZCB3aXRoIHRleEltYWdlMkQgYW5kIG11c3QgYmUgY2xlYXJlZCBieSBi
aW5kaW5nIHRvIGFuIGZibyBhbmQgY2FsbGluZworICAgICAgICAvLyBjbGVhci4KKyAgICAgICAg
aWYgKGlzUmVzb3VyY2VTYWZlKCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCBudWxscHRyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBib29sIHN1
Y2NlZWQgPSBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgICAgIGlmICghc3VjY2VlZCkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSk7
CisgICAgICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Cisg
ICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgICAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3Jz
VG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAgICAgLy8gVGhlIHRleEltYWdlMkQg
ZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQgZG9lc24ndCBoYXZlIHRo
ZSBkYXRhIGZvciB0aGlzIGxldmVsLgorICAgICAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJn
ZXQsIGxldmVsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICB0
ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgdHlwZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZ
LCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0g
MDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlB
bHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9ORSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGlt
YWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNv
bnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEo
KTsKKyAgICAKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9O
b3RoaW5nICYmICFmbGlwWSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBl
bHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdl
UGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0
LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0
KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleEltYWdlMkQiLCAicGFja0ltYWdlIGVycm9yIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50
ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBmb3Jt
YXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwg
ZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQt
PnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFj
a0FsaWdubWVudCk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5j
dGlvblR5cGUgZnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNl
VHlwZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCkKK3sKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25O
YW1lLCBmdW5jdGlvblR5cGUsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGZ1
bmN0aW9uTmFtZSwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vdFRleFN1YkltYWdl
MkQpIHsKKyAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBo
ZWlnaHQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAy
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gRm9y
IFNvdXJjZUFycmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVUZXhGdW5jRGF0YSgpIHdv
dWxkIGhhbmRsZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJsZVRleEZvcm1hdAorICAg
ICAgICAvLyBieSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3IGlzIG51bGwgb3Igbm90
LgorICAgICAgICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZpZXcpIHsKKyAg
ICAgICAgICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZv
cm1hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFt
ZSwgZm9ybWF0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCF2YWxp
ZGF0ZVNpemUoZnVuY3Rpb25OYW1lLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSBy
YW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KKyAgICAgICAgaWYgKHhvZmZz
ZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJiYWQgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0
YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRh
cmdldCwgbGV2ZWwpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2Yg
cmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8
IHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFn
ZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsQWxs
b3dlZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBwaXhlbHMtPmJhc2VBZGRyZXNz
KCkgOiAwOworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5nZVVu
cGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZIHx8
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4
dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhID0gdGVtcERh
dGEuZGF0YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0K
KyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhJ
bWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLAorICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOworICAg
IGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9y
ZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8
fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNl
SW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgp
LCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAgICByZXR1
cm47CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9
IHRydWU7CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1h
dCBSR0JBOC4KKyAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBm
b3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJl
bXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghbV91bnBhY2tGbGlwWSAm
JiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKQorICAg
ICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1f
Y29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFn
ZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwor
ICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMt
PndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsKKyAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwor
fQorCitQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1h
Z2VJbnRvQnVmZmVyKEltYWdlKiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGV2
aWNlU2NhbGVGYWN0b3IpCit7CisgICAgSW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQpOworICAg
IHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIEltYWdlQnVmZmVyKiBidWYgPSBt
X2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFidWYpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1P
UlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1h
Z2UtPnNpemUoKSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7
CisgICAgYnVmLT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJH
QiwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShJbWFnZUJ1
ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdl
MkQiLCBpbWFnZSwgZWMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPEltYWdl
PiBpbWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVy
KGltYWdlLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2Uo
KSkKKyAgICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9y
UmVuZGVyLmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKKyAgICAK
KyAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQi
LCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVy
LT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERv
bUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVIVE1MQ2FudmFzRWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFz
RWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwg
Y2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIC8vIElmIHBvc3NpYmxlLCBjb3B5
IGZyb20gdGhlIGNhbnZhcyBlbGVtZW50IGRpcmVjdGx5IHRvIHRoZSB0ZXh0dXJlCisgICAgLy8g
dmlhIHRoZSBHUFUsIHdpdGhvdXQgYSByZWFkLWJhY2sgdG8gc3lzdGVtIG1lbW9yeS4KKyAgICAv
LworICAgIC8vIEZJWE1FOiByZXN0cmljdGlvbiBvZiAoUkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZ
VEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCisgICAgLy8gSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRm
b3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZ1bGx5IGZ1bmN0aW9uYWwuCisgICAgaWYg
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEID09IHRhcmdldCAmJiB0ZXh0dXJlICYmIHR5
cGUgPT0gdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKQorICAgICAgICAmJiAoZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Cisg
ICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworICAgICAgICBp
ZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0
KCksIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJ
bmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZh
cy0+aGVpZ2h0KCksIHR5cGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1h
Z2VEYXRhKCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgdGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVj
KTsKKyAgICBlbHNlCisgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQorUGFzc1JlZlB0cjxJbWFnZT4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxl
bWVudCogdmlkZW8sIEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9u
Q29kZSYpCit7CisgICAgSW50U2l6ZSBzaXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52
aWRlb0hlaWdodCgpKTsKKyAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNh
Y2hlLmltYWdlQnVmZmVyKHNpemUpOworICAgIGlmICghYnVmKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIs
ICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBJ
bnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAg
Ly8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBv
ZiBDUFUgcmVhZGJhY2suCisgICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1
Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tp
bmdTdG9yZUNvcHkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhJbWFnZTJEIiwgdmlkZW8sIGVj
KQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1h
Z2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQs
IHR5cGUsIDAsIDApKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gR28gdGhyb3VnaCB0
aGUgZmFzdCBwYXRoIGRvaW5nIGEgR1BVLUdQVSB0ZXh0dXJlcyBjb3B5IHdpdGhvdXQgYSByZWFk
YmFjayB0byBzeXN0ZW0gbWVtb3J5IGlmIHBvc3NpYmxlLgorICAgIC8vIE90aGVyd2lzZSwgaXQg
d2lsbCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBTVyBwYXRoLgorICAgIC8vIEZJWE1FOiBUaGUg
Y3VycmVudCByZXN0cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZvcm1hdCBzaG91ZCBiZSBSR0Igb3Ig
UkdCQSwKKyAgICAvLyB0eXBlIHNob3VsZCBiZSBVTlNJR05FRF9CWVRFIGFuZCBsZXZlbCBzaG91
bGQgYmUgMC4gSXQgbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlLgorICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQs
IHRydWUpOworICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQg
JiYgdGV4dHVyZQorICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0Ig
fHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKQorICAgICAgICAmJiB0eXBlID09
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICYmICh0ZXh0dXJlLT5n
ZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
IHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKQorICAgICAgICAmJiAhbGV2ZWwp
IHsKKyAgICAgICAgaWYgKHZpZGVvLT5jb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUo
bV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwgbGV2ZWwsIHR5cGUsIGludGVybmFs
Zm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCB0eXBlKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBOb3JtYWwg
cHVyZSBTVyBwYXRoLgorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBpZiAo
IWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBw
YXJhbWYsIEdDM0RpbnQgcGFyYW1pLCBib29sIGlzRmxvYXQpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBmYWxzZSk7
CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Q6CisgICAgICAgIGlmICgoaXNGbG9hdCAmJiBw
YXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1mICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSRVBFQVQpCisgICAgICAgICAgICB8fCAoIWlzRmxvYXQgJiYgcGFyYW1pICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQ
RUFUKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmls
dGVyX2FuaXNvdHJvcGljCisgICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIsIEVYVF90ZXh0
dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChpc0Zsb2F0KSB7CisgICAgICAgIHRleC0+c2V0UGFyYW1ldGVyZihwbmFtZSwgcGFy
YW1mKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHBh
cmFtZik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJpKHBuYW1lLCBw
YXJhbWkpOworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwg
cGFyYW1pKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFy
YW0pCit7CisgICAgdGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIHBhcmFtLCAwLCB0cnVlKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXJpKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgdGV4UGFy
YW1ldGVyKHRhcmdldCwgcG5hbWUsIDAsIHBhcmFtLCBmYWxzZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6
IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKKyAgICBlYyA9IDA7CisgICAg
QVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJh
bWV0ZXJzKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodmFsaWRh
dGVTaXplKCJ0ZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkpOworICAgIEFTU0VSVCh2
YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0KSk7CisgICAg
V2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJE
IiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoKHhvZmZzZXQgKyB3
aWR0aCkgPj0gMCk7CisgICAgQVNTRVJUKCh5b2Zmc2V0ICsgaGVpZ2h0KSA+PSAwKTsKKyAgICBB
U1NFUlQodGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSA+PSAoeG9mZnNldCArIHdpZHRoKSk7
CisgICAgQVNTRVJUKHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpID49ICh5b2Zmc2V0ICsg
aGVpZ2h0KSk7CisgICAgQVNTRVJUKHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCkgPT0gZm9ybWF0KTsKKyAgICBBU1NFUlQodGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09
IHR5cGUpOworICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRy
YWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwg
bV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7
ICAKKyAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0
cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNvbnN0IHZv
aWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKKyAg
ICAKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5n
ICYmICFmbGlwWSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxE
YXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFn
ZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGlt
YWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkK
KyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgMSk7CisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgZm9ybWF0LCB0
eXBlLCAgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7
CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1
YkltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51
bGxOb3RBbGxvd2VkKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJE
IiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkp
CisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygp
OworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5nZVVucGFja0Fs
aWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RU
ZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhID0gdGVtcERhdGEuZGF0
YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKyAgICBp
ZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhTdWJJbWFn
ZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQor
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4
RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUltYWdlRGF0YSwgdGFy
Z2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAw
LCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRy
dWU7CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBS
R0JBOC4KKyAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3Jt
YXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVs
dGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSAmJiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKQorICAgICAg
ICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29u
dGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFn
ZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwor
ICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHBp
eGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVy
c2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSwgZWMpOworICAgIGlm
IChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFn
ZSwgZWMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZv
clJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5y
ZW5kZXJlcigpKTsKKyAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKKyAgICAg
ICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVyLmdl
dCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKKyAgICAKKyAgICBpZiAo
IWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhT
dWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQs
IGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZv
cm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERv
bUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZh
cywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhT
dWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0
LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9m
ZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURh
dGEpCisgICAgICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAg
IHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1h
dCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERv
bUNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9
CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhT
dWJJbWFnZTJEIiwgdmlkZW8sIGVjKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhT
dWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0
LCBsZXZlbCwgZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQo
KSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywg
SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm47CisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
LCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCAxKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
bGVuZ3RoKCksIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ1bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dy
YW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoKGxvY2F0aW9uLT50
eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUo
KSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKSAmJiB4ID49IChpbnQpbV90ZXh0
dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpIiwgImludmFsaWQgdGV4dHVyZSB1bml0
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3Jt
MWkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgMSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1Q
TEVSX0NVQkUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHYtPmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2LT5kYXRhKClbaV0gPj0gc3RhdGljX2Nhc3Q8aW50
PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7CisgICAgICAgICAgICAgICAgTE9HKFdlYkdMLCAi
VGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4gTG9jYXRpb24gdHlwZSA9ICUwNFguIiwg
bV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRhKClbaV0sIGxvY2F0aW9uLT50eXBlKCkp
OworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxl
bmd0aCgpLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50
KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U0FNUExFUl9DVUJFKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7ICsraSkgeworICAgICAgICAgICAgaWYgKCgoR0Mz
RGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7
CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSwg
dik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtMmYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB2LT5sZW5ndGgoKSAvIDIsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCBz
aXplLCAyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTJm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRp
b24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxv
Y2F0aW9uLCB2LCAyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtMml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8g
Miwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3Vy
cmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3Vy
cmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250
ZXh0LT51bmlmb3JtM2YobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2
LCAzKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0z
ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2koY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGlu
dCB6LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJ1bmlmb3JtM2kiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0z
aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdi0+bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3Jt
M2l2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZs
b2F0IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3Jh
bSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9y
bTRmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgNCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24t
PmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9j
YXRpb24sIHYsIHNpemUsIDQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0
LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0Mz
RGludCB3LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dy
YW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2LCA0KSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRp
b24sIHYsIHNpemUsIDQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51
bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwg
R0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRp
b24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB0cmFu
c3Bvc2UsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1N
YXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRp
b24sIHRyYW5zcG9zZSwgdiwgOSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gOSwgdHJh
bnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5p
Zm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gOSwgdHJhbnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5p
Zm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDE2KSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgdi0+bGVuZ3RoKCkgLyAxNiwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIHYsIHNpemUsIDE2KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIHYp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVzZVByb2dyYW0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJ1
c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
ZGVsZXRlZCkKKyAgICAgICAgcHJvZ3JhbSA9IDA7CisgICAgaWYgKHByb2dyYW0gJiYgIXByb2dy
YW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1c2VQcm9ncmFtIiwgInByb2dyYW0gbm90
IHZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fY3VycmVudFByb2dy
YW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAg
ICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Cisg
ICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOworICAgICAgICBtX2NvbnRleHQtPnVz
ZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKKyAgICAgICAgaWYgKHByb2dyYW0pCisg
ICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFjaGVkKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dy
YW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgidmFsaWRh
dGVQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnZh
bGlkYXRlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgdjApCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjFmIiwgaW5kZXgs
IDEsIHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikK
K3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCAx
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVy
dGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwgdiwgc2l6ZSwgMSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMmYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQoreworICAgIHZlcnRleEF0dHJp
YmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIsIGluZGV4LCAyLCB2MCwgdjEsIDAuMGYsIDEuMGYpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgi
dmVydGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJp
YjJmdiIsIGluZGV4LCB2LCBzaXplLCAyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNE
ZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4
QXR0cmliM2YiLCBpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHYpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYi
LCBpbmRleCwgdiwgMyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVy
dGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYs
IHNpemUsIDMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0
dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZs
b2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0
dHJpYjRmIiwgaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJB
cnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGlu
ZGV4LCB2LCA0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhB
dHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7
CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgdiwgc2l6
ZSwgNCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmli
UG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNE
Ym9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hP
UlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2
ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUgPCAwIHx8
IHN0cmlkZSA+IDI1NSB8fCBvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIs
ICJiYWQgc2l6ZSwgc3RyaWRlIG9yIG9mZnNldCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50
ZXIiLCAibm8gYm91bmQgQVJSQVlfQlVGRkVSIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBj
YW4gaG9sZCwgZ2l2ZW4gdGhlIG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCisgICAgdW5z
aWduZWQgdHlwZVNpemUgPSBzaXplSW5CeXRlcyh0eXBlKTsKKyAgICBpZiAoIXR5cGVTaXplKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmICgoc3RyaWRlICUgdHlwZVNpemUpIHx8IChzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpICUgdHlwZVNpemUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBv
aW50ZXIiLCAic3RyaWRlIG9yIG9mZnNldCBub3QgdmFsaWQgZm9yIHR5cGUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBHQzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5
cGVTaXplOworICAgIAorICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0
cmliU3RhdGUoaW5kZXgsIGJ5dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwg
c3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJyYXlCdWZm
ZXIpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlw
ZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWV3cG9ydChHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZh
bGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFk
eSBsb3N0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0R3Jv
dXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Okxvc3RD
b250ZXh0TW9kZSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICBtX2NvbnRleHRMb3N0
TW9kZSA9IG1vZGU7CisgICAgCisgICAgaWYgKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSB7Cisg
ICAgICAgIC8vIEluZm9ybSB0aGUgZW1iZWRkZXIgdGhhdCBhIGxvc3QgY29udGV4dCB3YXMgcmVj
ZWl2ZWQuIEluIHJlc3BvbnNlLCB0aGUgZW1iZWRkZXIgbWlnaHQKKyAgICAgICAgLy8gZGVjaWRl
IHRvIHRha2UgYWN0aW9uIHN1Y2ggYXMgYXNraW5nIHRoZSB1c2VyIGZvciBwZXJtaXNzaW9uIHRv
IHVzZSBXZWJHTCBhZ2Fpbi4KKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5k
b2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCku
ZGlkTG9zZVdlYkdMQ29udGV4dChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhp
Y3NSZXNldFN0YXR1c0FSQigpKTsKKyAgICB9CisgICAgCisgICAgZGV0YWNoQW5kUmVtb3ZlQWxs
T2JqZWN0cygpOworICAgIAorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8g
TWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UgZG8gbm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRl
ZCB0ZXh0dXJlIG9yIGZyYW1lYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRl
eHR1cmUyREJpbmRpbmcoMCk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZm
ZXJCaW5kaW5nKDApOworICAgIH0KKyAgICAKKyAgICAvLyBUaGVyZSBpcyBubyBkaXJlY3Qgd2F5
IHRvIGNsZWFyIGVycm9ycyBmcm9tIGEgR0wgaW1wbGVtZW50YXRpb24gYW5kCisgICAgLy8gbG9v
cGluZyB1bnRpbCBnZXRFcnJvcigpIGJlY29tZXMgTk9fRVJST1IgbWlnaHQgY2F1c2UgYW4gaW5m
aW5pdGUgbG9vcCBpZgorICAgIC8vIHRoZSBkcml2ZXIgb3IgY29udGV4dCBpbXBsZW1lbnRhdGlv
biBoYWQgYSBidWcuIFNvLCBsb29wIGEgcmVhc29uYWJseQorICAgIC8vIGxhcmdlIG51bWJlciBv
ZiB0aW1lcyB0byBjbGVhciBhbnkgZXhpc3RpbmcgZXJyb3JzLgorICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlIGRpc3BsYXkgPSAobW9kZSA9PSBSZWFsTG9zdENv
bnRleHQpID8gRGlzcGxheUluQ29uc29sZTogRG9udERpc3BsYXlJbkNvbnNvbGU7CisgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTCwgImxv
c2VDb250ZXh0IiwgImNvbnRleHQgbG9zdCIsIGRpc3BsYXkpOworICAgIAorICAgIC8vIERvbid0
IGFsbG93IHJlc3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0IGV2ZW50IGhhcyBib3Ro
IGJlZW4KKyAgICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBwcmV2ZW50
ZWQuCisgICAgbV9yZXN0b3JlQWxsb3dlZCA9IGZhbHNlOworICAgIAorICAgIC8vIEFsd2F5cyBk
ZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGNvbnRleHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50
CisgICAgLy8gdGhlIHNwZWMgYmVoYXZpb3Igb2YgcXVldWVpbmcgYSB0YXNrLgorICAgIG1fZGlz
cGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZvcmNlUmVzdG9yZUNvbnRleHQoKQoreworICAgIGlm
ICghaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0Iiwg
ImNvbnRleHQgbm90IGxvc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoIW1fcmVzdG9yZUFsbG93ZWQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09
IFN5bnRoZXRpY0xvc3RDb250ZXh0KQorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29u
dGV4dCByZXN0b3JhdGlvbiBub3QgYWxsb3dlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmICghbV9yZXN0b3JlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZXN0
b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitQbGF0Zm9ybUxheWVyKiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCFp
c0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgPyBtX2NvbnRl
eHQtPnBsYXRmb3JtTGF5ZXIoKSA6IDA7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOworICAgIG1f
Y29udGV4dEdyb3VwLT5hZGRPYmplY3Qob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBtX2NvbnRleHRPYmplY3RzLnJlbW92ZShvYmplY3QpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZENvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsK
KyAgICBtX2NvbnRleHRPYmplY3RzLmFkZChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKQoreworICAgIGlmICht
X2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB3
aGlsZSAobV9jb250ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7CisgICAgICAgIEhhc2hTZXQ8V2Vi
R0xDb250ZXh0T2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdpbigp
OworICAgICAgICAoKml0KS0+ZGV0YWNoQ29udGV4dCgpOworICAgIH0KK30KKworYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdG9w
KCkKK3sKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uKSB7CisgICAgICAgIGZvcmNlTG9zdENvbnRleHQoU3ludGhldGljTG9zdENvbnRleHQp
OworICAgICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB9Cit9CisKK1dlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb29sZWFuUGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQoreworICAgIEdDM0Rib29sZWFuIHZhbHVlID0gMDsKKyAgICBtX2NvbnRl
eHQtPmdldEJvb2xlYW52KHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8o
c3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkK
K3sKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSykg
eworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KDAsIDApOworICAgIH0KKyAgICBHQzNEYm9vbGVhbiB2YWx1ZVs0XSA9IHswfTsKKyAgICBtX2Nv
bnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CisgICAgYm9vbCBib29sVmFsdWVbNF07
CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDQ7ICsraWkpCisgICAgICAgIGJvb2xWYWx1ZVtp
aV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtpaV0pOworICAgIHJldHVybiBXZWJHTEdldElu
Zm8oYm9vbFZhbHVlLCA0KTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmdldEZsb2F0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RmbG9h
dCB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsICZ2YWx1ZSk7Cisg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwg
JnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKK30KKworV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpKTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFt
ZSkKK3sKKyAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5nZXRG
bG9hdHYocG5hbWUsIHZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJ
WkVfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRI
X1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAgICAg
ICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORF9DT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9W
QUxVRToKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cit9CisKK1dlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7
CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
SUVXUE9SVF9ESU1TOgorICAgICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpWSUVXUE9SVDoKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRvRHJhdykKK3sKKyAgICBib29s
IHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVu
c2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4
dGVuc2lvbkZsYWc+KChtX29lc1RleHR1cmVGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4
dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFyRW5hYmxlZCA6IDApIHwgKG1fb2VzVGV4dHVyZUhhbGZG
bG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkhhbGZGbG9hdExpbmVh
ckVuYWJsZWQgOiAwKSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90
ZXh0dXJlVW5pdHMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNb
aWldLnRleHR1cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRp
bmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKKyAgICAgICAgICAgIHx8ICht
X3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRz
W2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNp
b25zKSkpIHsKKyAgICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7Cisg
ICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKKyAgICAgICAgICAg
ICAgICByZXNldEFjdGl2ZVVuaXQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNl
dEFjdGl2ZVVuaXQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUo
aWkpOworICAgICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXgyRDsKKyAgICAgICAgICAgIFdlYkdM
VGV4dHVyZSogdGV4Q3ViZU1hcDsKKyAgICAgICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7Cisg
ICAgICAgICAgICAgICAgU3RyaW5nIG1zZyhTdHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVy
ZSB1bml0ICIpICsgU3RyaW5nOjpudW1iZXIoaWkpCisgICAgICAgICAgICAgICAgICAgICsgIiBp
cyBub3QgcmVuZGVyYWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21w
YXRpYmxlIHRleHR1cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgor
ICAgICAgICAgICAgICAgICAgICArICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUg
d2l0aCBsaW5lYXIgZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxm
LWZsb2F0IGxpbmVhciBleHRlbnNpb24gZW5hYmxlZC4iKTsKKyAgICAgICAgICAgICAgICBwcmlu
dEdMV2FybmluZ1RvQ29uc29sZShmdW5jdGlvbk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgICAgICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7CisgICAgICAgICAg
ICAgICAgdGV4Q3ViZU1hcCA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0u
dGV4dHVyZTJEQmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90
ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAm
JiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0
dXJlKGV4dGVuc2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOworICAg
ICAgICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYg
bV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tU
ZXh0dXJlKGV4dGVuc2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhD
dWJlTWFwKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKKyAg
ICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0
dXJlczF4MSgpCit7CisgICAgdW5zaWduZWQgY2hhciBibGFja1tdID0gezAsIDAsIDAsIDI1NX07
CisgICAgbV9ibGFja1RleHR1cmUyRCA9IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2JsYWNrVGV4dHVy
ZTJELT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisgICAgbV9ibGFja1RleHR1
cmVDdWJlTWFwID0gY3JlYXRlVGV4dHVyZSgpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG1fYmxhY2tUZXh0dXJlQ3ViZU1h
cC0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxh
Y2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50
ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1os
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVAsIDApOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4SW50ZXJu
YWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJuYWxG
b3JtYXQsIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0KQoreworICAgIHVuc2lnbmVkIG5lZWQg
PSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdCh0ZXhJbnRlcm5hbEZv
cm1hdCk7CisgICAgdW5zaWduZWQgaGF2ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVs
Qml0c0J5Rm9ybWF0KGNvbG9yQnVmZmVyRm9ybWF0KTsKKyAgICByZXR1cm4gKG5lZWQgJiBoYXZl
KSA9PSBuZWVkOworfQorCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRC
b3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKQoreworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKKyAgICBpZiAobV9h
dHRyaWJ1dGVzLmFscGhhKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7
CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Cit9CisKK2ludCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQoreworICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisg
ICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgp
OworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53
aWR0aCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7
Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVy
SGVpZ2h0KCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmct
PmdldENvbG9yQnVmZmVySGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1f
ZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOworfQorCitXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQorewor
ICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IG51bGxwdHI7CisgICAgc3dpdGNoICh0YXJnZXQp
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGlmICghdXNlU2l4RW51bXNG
b3JDdWJlTWFwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0
Iik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBC
aW5kaW5nLmdldCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQOgorICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBp
ZiAoIXRleHR1cmUpCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOworICAgIHJl
dHVybiB0ZXh0dXJlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlTG9jYXRpb25MZW5ndGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0g
MjU2OworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEaW50IHgsIEdDM0RpbnQgeSkKK3sKKyAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgInNpemUgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIGlmICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgInN0cmluZyBub3QgQVNDSUkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50
IGxldmVsKQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlm
IChtX3dlYmdsRGVwdGhUZXh0dXJlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUOgorICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoKGZvcm1h
dCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUIHx8IGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNS
R0JfQUxQSEFfRVhUKQorICAgICAgICAgICAgJiYgbV9leHRzUkdCKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGlmIChtX29lc1RleHR1cmVGbG9hdCkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9B
VF9PRVM6CisgICAgICAgIGlmIChtX29lc1RleHR1cmVIYWxmRmxvYXQpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfODoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgaWYgKG1fd2ViZ2xE
ZXB0aFRleHR1cmUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9m
IGZvcm1hdCBhbmQgdHlwZSBpcyBzdXBwb3J0ZWQuCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FM
UEhBOgorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAg
ICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgZm9ybWF0Iik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VY
VDoKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUK
KyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNl81CisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAor
ICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0IgZm9ybWF0
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6U1JHQl9BTFBIQV9FWFQ6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF80XzRfNF80CisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xCisgICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB0eXBlIGZvciBSR0JBIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBl
bmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCisgICAgICAgICAg
ICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxl
dmVsID4gMCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAgZm9y
IERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9TVEVOQ0lMOgorICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lMIG5vdCBlbmFibGVkIik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGV2ZWwgPiAw
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhf
U1RFTkNJTCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsIDwg
MCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2ZWwp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAg
ICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQgZG9u
J3QKKyAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwuCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4RnVu
Y1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSkKK3sKKyAgICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUg
dGhlIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2UyRCBl
bnRyeSBwb2ludHMgdGFraW5nIEhUTUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAvLyB0
ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxl
Z2FsLgorICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUs
IGZvcm1hdCwgdHlwZSwgbGV2ZWwpIHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5h
bWUsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYg
KHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo
ZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR0Mz
RGludCBtYXhUZXh0dXJlU2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwg
LSAxIC0gbGV2ZWwpOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVG
b3JMZXZlbCB8fCBoZWlnaHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBp
ZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIE5vIG5lZWQgdG8g
Y2hlY2sgaGVpZ2h0IGhlcmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQuCisgICAgICAg
IC8vIEZvciB0ZXhTdWJJbWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5nIHlv
ZmZzZXQgKyBoZWlnaHQgaXMgaW4gcmFuZ2UuCisgICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1
cmVTaXplRm9yTGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQg
b3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIGlmIChib3JkZXIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJvcmRlciAhPSAw
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRGF0
YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcq
IHBpeGVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOdWxsRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pCit7CisgICAgaWYgKCFwaXhlbHMpIHsK
KyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IE51bGxBbGxvd2VkKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5
cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZv
cm1hdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBpZiAo
cGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAidHlwZSBVTlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4
QXJyYXkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAg
IGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5v
dCBVaW50MTZBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNf
dGV4dHVyZV9mbG9hdAorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBl
RmxvYXQzMikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJh
eUJ1ZmZlclZpZXcgbm90IEZsb2F0MzJBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgIC8vIEFz
IHBlciB0aGUgc3BlY2lmaWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdo
ZW4KKyAgICAgICAgLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgorICAgICAg
ICBpZiAocGl4ZWxzKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9B
VF9PRVMgYnV0IEFycmF5QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCB0b3Rh
bEJ5dGVzUmVxdWlyZWQ7CisgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJ
bWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGln
bm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsIDApOworICAgIGlmIChlcnJvciAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3Is
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxC
eXRlc1JlcXVpcmVkKSB7CisgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7Cisg
ICAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9y
bWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKKyAg
ICAgICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA9PSB0b3RhbEJ5dGVzUmVxdWlyZWQp
IHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmln
IGVub3VnaCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElHTk1FTlQgPiAxIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9y
bWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICByZXR1cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZv
cm1hdHMuY29udGFpbnMoZm9ybWF0KTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKK3sKKyAgICBpZiAoIXBpeGVscykg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgYnl0ZXNSZXF1aXJlZCA9IDA7CisgICAgCisgICAgc3dpdGNo
IChmb3JtYXQpIHsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQl9BTUQ6Cisg
ICAgICAgIHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OworICAgICAgICBjb25z
dCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0g
NDsKKyAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9zcyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0g
MSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsg
a0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tIZWlnaHQ7CisgICAgICAgIGJ5dGVzUmVxdWlyZWQg
PSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDVfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JB
X0VYUExJQ0lUX0FMUEhBX0FNRDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9B
VENfUkdCQV9JTlRFUlBPTEFURURfQUxQSEFfQU1EOgorICAgICAgICB7CisgICAgICAgIGNvbnN0
IGludCBrQmxvY2tTaXplID0gMTY7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7
CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OworICAgICAgICBpbnQgbnVtQmxv
Y2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOworICAg
ICAgICBpbnQgbnVtQmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAvIGtC
bG9ja0hlaWdodDsKKyAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51
bUJsb2Nrc0Rvd24gKiBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAg
ICAgICAgeworICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CisgICAgICAgIGNvbnN0
IGludCBrQmxvY2tXaWR0aCA9IDg7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA4
OworICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRoLCBrQmxvY2tXaWR0aCkg
KiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiA0ICsgNykgLyBrQmxvY2tTaXplOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICAgICAgeworICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrU2l6ZSA9IDg7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDE2OworICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKKyAgICAgICAgYnl0ZXNSZXF1aXJlZCA9
IChzdGQ6Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tI
ZWlnaHQpICogMiArIDcpIC8ga0Jsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgo
KSAhPSBieXRlc1JlcXVpcmVkKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlC
dWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZvciBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAg
c3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0VYVDogeworICAgICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0OworICAg
ICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrSGVpZ2h0ID0gNDsKKyAgICAgICAgY29uc3QgR0Mz
RGludCBtYXhUZXh0dXJlU2l6ZSA9IHRhcmdldCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21heEN1
YmVNYXBUZXh0dXJlU2l6ZTsKKyAgICAgICAgY29uc3QgR0MzRHNpemVpIG1heENvbXByZXNzZWRE
aW1lbnNpb24gPSBtYXhUZXh0dXJlU2l6ZSA+PiBsZXZlbDsKKyAgICAgICAgYm9vbCB3aWR0aFZh
bGlkID0gKGxldmVsICYmIHdpZHRoID09IDEpIHx8IChsZXZlbCAmJiB3aWR0aCA9PSAyKSB8fCAo
ISh3aWR0aCAlIGtCbG9ja1dpZHRoKSAmJiB3aWR0aCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9u
KTsKKyAgICAgICAgYm9vbCBoZWlnaHRWYWxpZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0gMSkgfHwg
KGxldmVsICYmIGhlaWdodCA9PSAyKSB8fCAoIShoZWlnaHQgJSBrQmxvY2tIZWlnaHQpICYmIGhl
aWdodCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKKyAgICAgICAgaWYgKCF3aWR0aFZhbGlk
IHx8ICFoZWlnaHRWYWxpZCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo
ZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICAgICAgLy8gSGVpZ2h0
IGFuZCB3aWR0aCBtdXN0IGJlIHBvd2VycyBvZiAyLgorICAgICAgICBpZiAoKHdpZHRoICYgKHdp
ZHRoIC0gMSkpIHx8IChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIFdlYkdMVGV4dHVyZSogdGV4KQor
eworICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0g
NDsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgIGlmICgoeG9m
ZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdodCkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBsZSBvZiA0
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdp
ZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAgICAgICAgICAg
IHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWxpZGF0
ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0KTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzogeworICAgICAgICBpZiAoeG9mZnNldCB8fCB5
b2Zmc2V0KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlvZmZzZXQg
bXVzdCBiZSB6ZXJvIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAgICAgICAg
ICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3RpbmcgbGV2ZWwi
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVEcmF3TW9kZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1v
ZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9JTlRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfU1RSSVA6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZHJhdyBtb2RlIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIGlm
IChtX3N0ZW5jaWxNYXNrICE9IG1fc3RlbmNpbE1hc2tCYWNrIHx8IG1fc3RlbmNpbEZ1bmNSZWYg
IT0gbV9zdGVuY2lsRnVuY1JlZkJhY2sgfHwgbV9zdGVuY2lsRnVuY01hc2sgIT0gbV9zdGVuY2ls
RnVuY01hc2tCYWNrKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3Rl
bmNpbHMgc2V0dGluZ3MgZG8gbm90IG1hdGNoIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IGZ1bmMpCit7CisgICAgc3dpdGNoIChmdW5jKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TkVWRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JF
QVRFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFV
QUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cHJpbnRHTEVycm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBpZiAoIW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLS1tX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKKyAgICBwcmlu
dFdhcm5pbmdUb0NvbnNvbGUobWVzc2FnZSk7CisgICAgCisgICAgaWYgKCFtX251bUdMRXJyb3Jz
VG9Db25zb2xlQWxsb3dlZCkKKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDog
dG9vIG1hbnkgZXJyb3JzLCBubyBtb3JlIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBj
b25zb2xlIGZvciB0aGlzIGNvbnRleHQuIik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6cHJpbnRXYXJuaW5nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sK
KyAgICBpZiAoIWNhbnZhcygpKQorICAgICAgICByZXR1cm47CisgICAgY2FudmFzKCktPmRvY3Vt
ZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdl
TGV2ZWw6Oldhcm5pbmcsIG1lc3NhZ2UpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCkKK3sKKyAgICBp
ZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHN3aXRjaCAoYXR0YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0FUVEFDSE1FTlQwOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFD
SE1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVy
cworICAgICAgICAgICAgJiYgYXR0YWNobWVudCA+IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMAorICAgICAgICAgICAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0Rl
bnVtPihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0
dGFjaG1lbnRzKCkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgYXR0YWNobWVudCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQmxl
bmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCit7Cisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19TVUJUUkFDVDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6Ok1JTl9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQ6CisgICAgICAg
IGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQgfHwgbW9kZSA9PSBFeHRlbnNpb25z
M0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWluTWF4KSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCbGVuZEZ1bmNG
YWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBk
c3QpCit7CisgICAgaWYgKCgoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xP
UiB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikK
KyAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwg
ZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKQorICAg
ICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCisgICAgICAg
ICYmIChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBH
cmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSBjYXApCit7CisgICAgc3dpdGNoIChjYXApIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdP
Tl9PRkZTRVRfRklMTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQUxQSEFf
VE9fQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgY2FwYWJpbGl0eSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgR0Mz
RHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwg
ZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBp
ZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
ZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJl
cXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdD
M0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYsIHNpemUsIHJl
cXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAgaWYg
KCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1
bmN0aW9uTmFtZSwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwg
cmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIHZvaWQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQor
eworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobG9j
YXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAibG9jYXRpb24gaXMgbm90IGZyb20gY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBh
cnJheSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh0cmFuc3Bvc2Up
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRyYW5zcG9zZSBub3QgRkFMU0UiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc2l6ZSA8IHJlcXVpcmVkTWluU2l6ZSB8fCAoc2l6
ZSAlIHJlcXVpcmVkTWluU2l6ZSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitX
ZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRh
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gdXNhZ2UpCit7CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7CisgICAgc3dpdGNo
ICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUjoKKyAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKS5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlC
dWZmZXIuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICBpZiAoIWJ1ZmZlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgc3dpdGNoICh1c2FnZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNUQVRJQ19EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNf
RFJBVzoKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB1c2FnZSIpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibm8gaW1hZ2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjb25zdCBV
UkwmIHVybCA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5yZXNwb25zZSgpLnVybCgpOworICAgIGlm
ICh1cmwuaXNOdWxsKCkgfHwgdXJsLmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBpbWFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGltYWdlKSkgeworICAgICAgICBlYyA9IFNF
Q1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxDYW52
YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+
YnVmZmVyKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGNhbnZhcyIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGNhbnZhcykpIHsKKyAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9I
ZWlnaHQoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKKyAgICAg
ICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGlu
ZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwg
R0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0
dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0
cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAg
ICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIy
ZihpbmRleCwgdjAsIHYxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFs
dWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XTsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVsw
XSA9IHYwOworICAgIGF0dHJpYlZhbHVlLnZhbHVlWzFdID0gdjE7CisgICAgYXR0cmliVmFsdWUu
dmFsdWVbMl0gPSB2MjsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVszXSA9IHYzOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXpl
aSBleHBlY3RlZFNpemUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoZnVuY3Rp
b25OYW1lLCBpbmRleCwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgZXhwZWN0ZWRTaXplKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2KSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChz
aXplIDwgZXhwZWN0ZWRTaXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRy
aWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJp
YjAgdmFsdWVzLgorICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAg
ICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
bV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2
KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmRleCwgdik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRy
aWI0ZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtp
bmRleF07CisgICAgYXR0cmliVmFsdWUuaW5pdFZhbHVlKCk7CisgICAgZm9yIChpbnQgaWkgPSAw
OyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytpaSkKKyAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWld
ID0gdltpaV07Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aW5pdFZlcnRl
eEF0dHJpYjAoKQoreworICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJp
YlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmli
U3RhdGUoMCk7CisgICAgCisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gY3JlYXRlQnVmZmVy
KCk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+
YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50
ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgc3Rh
dGUuYnVmZmVyQmluZGluZyA9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsKKyAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCk7CisgICAgbV9j
b250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJTaXplID0gMDsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IDAuMGY7
CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0gPSAwLjBmOworICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVszXSA9IDEuMGY7CisgICAgbV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwgPSBmYWxzZTsK
KyAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gZmFsc2U7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1W
ZXJ0ZXgpCit7CisgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0
cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRy
aWJTdGF0ZSgwKTsKKyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBt
X3ZlcnRleEF0dHJpYlZhbHVlWzBdOworICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgdXNpbmdWZXJ0ZXhBdHRyaWIwID0gbV9jdXJyZW50
UHJvZ3JhbS0+aXNVc2luZ1ZlcnRleEF0dHJpYjAoKTsKKyAgICBpZiAodXNpbmdWZXJ0ZXhBdHRy
aWIwKQorICAgICAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKKyAgICBpZiAo
c3RhdGUuZW5hYmxlZCAmJiB1c2luZ1ZlcnRleEF0dHJpYjApCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIXVzaW5nVmVydGV4QXR0cmliMCAmJiAhbV92ZXJ0ZXhBdHRyaWIwVXNlZEJl
Zm9yZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmUgPSB0cnVlOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBHQzNE
c2l6ZWlwdHIgYnVmZmVyRGF0YVNpemUgPSAobnVtVmVydGV4ICsgMSkgKiA0ICogc2l6ZW9mKEdD
M0RmbG9hdCk7CisgICAgaWYgKGJ1ZmZlckRhdGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
U2l6ZSkgeworICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgYnVmZmVyRGF0YVNpemUsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5B
TUlDX0RSQVcpOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gYnVmZmVyRGF0
YVNpemU7CisgICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMAorICAgICAgICAmJiAobV9mb3JjZUF0dHJpYjBC
dWZmZXJSZWZpbGwKKyAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzBdICE9IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdCisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1
ZVsxXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXQorICAgICAgICAgICAgfHwgYXR0
cmliVmFsdWUudmFsdWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KKyAgICAg
ICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzNdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzNdKSkgeworICAgICAgICAgICAgYXV0byBidWZmZXJEYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7CisgICAgICAgICAgICBmb3IgKEdD
M0RzaXplaSBpaSA9IDA7IGlpIDwgbnVtVmVydGV4ICsgMTsgKytpaSkgeworICAgICAgICAgICAg
ICAgIGJ1ZmZlckRhdGFbaWkgKiA0XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAgICAg
ICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsxXTsKKyAg
ICAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNCArIDJdID0gYXR0cmliVmFsdWUudmFsdWVb
Ml07CisgICAgICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAzXSA9IGF0dHJpYlZhbHVl
LnZhbHVlWzNdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyVmFsdWVbMF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVswXTsKKyAgICAgICAgICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gYXR0cmliVmFsdWUudmFsdWVbMV07CisgICAgICAgICAg
ICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwor
ICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSBhdHRyaWJWYWx1ZS52
YWx1ZVszXTsKKyAgICAgICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7
CisgICAgICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOworICAg
ICAgICB9CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCwgMCwgMCwgMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmli
MFNpbXVsYXRpb24oKQoreworICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVy
dGV4QXR0cmliU3RhdGUoMCk7CisgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8oc3RhdGUuYnVmZmVyQmluZGlu
Zy5nZXQoKSkpOworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3Rh
dGUuc2l6ZSwgc3RhdGUudHlwZSwgc3RhdGUubm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJp
ZGUsIHN0YXRlLm9mZnNldCk7CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8obV9ib3VuZEFycmF5QnVm
ZmVyLmdldCgpKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KCkKK3sKKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2
ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0
bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOworICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50
KGV2ZW50KTsKKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKKyAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExvc3RDb250ZXh0ICYmIG1fcmVz
dG9yZUFsbG93ZWQpCisgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXliZVJlc3RvcmVDb250ZXh0KCkK
K3sKKyAgICBBU1NFUlQobV9jb250ZXh0TG9zdCk7CisgICAgaWYgKCFtX2NvbnRleHRMb3N0KQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5v
dCByZXN0b3JlZCB1bmxlc3MgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlCisgICAgLy8gd2Vi
Z2xjb250ZXh0bG9zdCBldmVudCB3YXMgcHJldmVudGVkIGVhcmxpZXIuCisgICAgLy8KKyAgICAv
LyBCZWNhdXNlIG9mIHRoZSB3YXkgbV9yZXN0b3JlVGltZXIgaXMgc2V0IHVwIGZvciByZWFsIHZz
LiBzeW50aGV0aWMgbG9zdAorICAgIC8vIGNvbnRleHQgZXZlbnRzLCB3ZSBkb24ndCBoYXZlIHRv
IHdvcnJ5IGFib3V0IHRoaXMgdGVzdCBzaG9ydC1jaXJjdWl0aW5nCisgICAgLy8gdGhlIHJldHJ5
IGxvb3AgZm9yIHJlYWwgY29udGV4dCBsb3N0IGV2ZW50cy4KKyAgICBpZiAoIW1fcmVzdG9yZUFs
bG93ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgY29udGV4dExvc3RSZWFzb24g
PSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
OworICAgIAorICAgIHN3aXRjaCAoY29udGV4dExvc3RSZWFzb24pIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUjoKKyAgICAgICAgLy8gVGhlIEdyYXBoaWNzQ29udGV4dDNE
IGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBmdWxseQorICAgICAgICAvLyBzdXBwb3J0IEdMX0FS
Ql9yb2J1c3RuZXNzIHNlbWFudGljcyB5ZXQuIEFsdGVybmF0aXZlbHksIHRoZQorICAgICAgICAv
LyBXRUJHTF9sb3NlX2NvbnRleHQgZXh0ZW5zaW9uIG1pZ2h0IGhhdmUgYmVlbiB1c2VkIHRvIGZv
cmNlCisgICAgICAgIC8vIGEgbG9zdCBjb250ZXh0LgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6R1VJTFRZX0NPTlRFWFRfUkVTRVRfQVJCOgorICAgICAgICAvLyBUaGUg
cmVuZGVyaW5nIGNvbnRleHQgaXMgbm90IHJlc3RvcmVkIGlmIHRoaXMgY29udGV4dCB3YXMKKyAg
ICAgICAgLy8gZ3VpbHR5IG9mIGNhdXNpbmcgdGhlIGdyYXBoaWNzIHJlc2V0LgorICAgICAgICBw
cmludFdhcm5pbmdUb0NvbnNvbGUoIldBUk5JTkc6IFdlYkdMIGNvbnRlbnQgb24gdGhlIHBhZ2Ug
Y2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0OyBub3QgcmVzdG9yaW5nIHRoZSBjb250
ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6SU5OT0NFTlRf
Q09OVEVYVF9SRVNFVF9BUkI6CisgICAgICAgIC8vIEFsd2F5cyBhbGxvdyB0aGUgY29udGV4dCB0
byBiZSByZXN0b3JlZC4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlVO
S05PV05fQ09OVEVYVF9SRVNFVF9BUkI6CisgICAgICAgIC8vIFdhcm4uIElkZWFsbHksIHByb21w
dCB0aGUgdXNlciB0ZWxsaW5nIHRoZW0gdGhhdCBXZWJHTAorICAgICAgICAvLyBjb250ZW50IG9u
IHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvCisgICAgICAg
IC8vIHJlc2V0IGFuZCBhc2sgdGhlbSB3aGV0aGVyIHRoZXkgd2FudCB0byBjb250aW51ZSBydW5u
aW5nCisgICAgICAgIC8vIHRoZSBjb250ZW50LiBPbmx5IGlmIHRoZXkgc2F5ICJ5ZXMiIHNob3Vs
ZCB3ZSBzdGFydAorICAgICAgICAvLyBhdHRlbXB0aW5nIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQu
CisgICAgICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBv
biB0aGUgcGFnZSBtaWdodCBoYXZlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0byByZXNldCIp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgRnJhbWUqIGZyYW1lID0gY2FudmFz
KCktPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFt
ZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAg
ICAgcmV0dXJuOworICAgIFNjcm9sbFZpZXcqIHJvb3QgPSB2aWV3LT5yb290KCk7CisgICAgaWYg
KCFyb290KQorICAgICAgICByZXR1cm47CisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IHJv
b3QtPmhvc3RXaW5kb3coKTsKKyAgICBpZiAoIWhvc3RXaW5kb3cpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZShtX2F0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKKyAgICBpZiAoIWNvbnRl
eHQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29udGV4dCkK
KyAgICAgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdChzZWNvbmRzQmV0d2VlblJl
c3RvcmVBdHRlbXB0cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIFRoaXMgbGlrZWx5
IHNob3VsZG4ndCBoYXBwZW4gYnV0IGlzIHRoZSBiZXN0IHdheSB0byByZXBvcnQgaXQgdG8gdGhl
IFdlYkdMIGFwcC4KKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgIiIsICJlcnJvciByZXN0b3JpbmcgY29udGV4dCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3
aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1fZHJh
d2luZ0J1ZmZlcikgeworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMo
KTsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZl
ID0gbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlBy
ZXNlcnZlIDogRHJhd2luZ0J1ZmZlcjo6RGlzY2FyZDsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6
QWxwaGFSZXF1aXJlbWVudCBhbHBoYSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZm
ZXI6OkFscGhhIDogRHJhd2luZ0J1ZmZlcjo6T3BhcXVlOworICAgICAgICBtX2RyYXdpbmdCdWZm
ZXIgPSBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVy
LT5zaXplKCksIHByZXNlcnZlLCBhbHBoYSk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Ymlu
ZCgpOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fY29udGV4
dExvc3QgPSBmYWxzZTsKKyAgICBzZXR1cEZsYWdzKCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRl
eHQoKTsKKyAgICBjYW52YXMoKS0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRyZXN0b3JlZEV2ZW50LCBmYWxzZSwgdHJ1ZSwg
IiIpKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuc3VyZU5vdE51
bGwoY29uc3QgU3RyaW5nJiB0ZXh0KSBjb25zdAoreworICAgIGlmICh0ZXh0LmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gV1RGOjplbXB0eVN0cmluZygpOworICAgIHJldHVybiB0ZXh0OworfQor
CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFn
ZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKKyAgICA6IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5p
cXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5bXT4oY2FwYWNpdHkpKQorICAgICwgbV9j
YXBhY2l0eShjYXBhY2l0eSkKK3sKK30KKworSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG1fY2FwYWNpdHk7ICsr
aSkgeworICAgICAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9idWZmZXJzW2ldLmdldCgpOworICAg
ICAgICBpZiAoIWJ1ZikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoYnVmLT5sb2dp
Y2FsU2l6ZSgpICE9IHNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYnViYmxl
VG9Gcm9udChpKTsKKyAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICB9CisgICAgCisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAx
KTsKKyAgICBpZiAoIXRlbXApCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGkgPSBzdGQ6
Om1pbihtX2NhcGFjaXR5IC0gMSwgaSk7CisgICAgbV9idWZmZXJzW2ldID0gV1RGOjptb3ZlKHRl
bXApOworICAgIAorICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7Cisg
ICAgYnViYmxlVG9Gcm9udChpKTsKKyAgICByZXR1cm4gYnVmOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmJ1YmJsZVRvRnJvbnQoaW50
IGlkeCkKK3sKKyAgICBmb3IgKGludCBpID0gaWR4OyBpID4gMDsgLS1pKQorICAgICAgICBtX2J1
ZmZlcnNbaV0uc3dhcChtX2J1ZmZlcnNbaS0xXSk7Cit9CisKK25hbWVzcGFjZSB7CisgICAgCisg
ICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdDM0RlbnVtIGVycm9yKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChlcnJvcikgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU06CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfRU5VTSI7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU6CisgICAgICAgICAgICByZXR1cm4gIklO
VkFMSURfVkFMVUUiOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTjoKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9PUEVSQVRJT04iOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZOgorICAgICAgICAgICAgcmV0
dXJuICJPVVRfT0ZfTUVNT1JZIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09OVEVYVF9MT1NUX1dFQkdMOgorICAgICAgICAgICAgcmV0dXJuICJDT05URVhUX0xPU1RfV0VC
R0wiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCJXZWJHTCBFUlJPUiglMDR4KSIsIGVycm9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK30g
Ly8gbmFtZXNwYWNlIGFub255bW91cworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgZGlz
cGxheSkKK3sKKyAgICBpZiAobV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSAmJiBkaXNwbGF5
ID09IERpc3BsYXlJbkNvbnNvbGUpIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2Vi
R0w6ICIpICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25O
YW1lKSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOworICAgICAgICBwcmludEdMRXJyb3JU
b0NvbnNvbGUoc3RyKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihl
cnJvcik7Cit9CisKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwcmludEdMV2Fy
bmluZ1RvQ29uc29sZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2Ny
aXB0aW9uKQoreworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7CisgICAg
ICAgIFN0cmluZyBzdHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUp
ICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICAgIHByaW50R0xFcnJvclRvQ29u
c29sZShzdHIpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
cHBseVN0ZW5jaWxUZXN0KCkKK3sKKyAgICBib29sIGhhdmVTdGVuY2lsQnVmZmVyID0gZmFsc2U7
CisgICAgCisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBoYXZlU3RlbmNp
bEJ1ZmZlciA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5oYXNTdGVuY2lsQnVmZmVyKCk7CisgICAg
ZWxzZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVz
ID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBh
dHRyaWJ1dGVzLT5zdGVuY2lsKCk7CisgICAgfQorICAgIGVuYWJsZU9yRGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9URVNULAorICAgICAgICAgICAgICAgICAgICBtX3N0ZW5jaWxF
bmFibGVkICYmIGhhdmVTdGVuY2lsQnVmZmVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjplbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFi
bGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJp
bGl0eSk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7
Cit9CisKK0ludFNpemUgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xhbXBlZENhbnZhc1Np
emUoKQoreworICAgIHJldHVybiBJbnRTaXplKGNsYW1wKGNhbnZhcygpLT53aWR0aCgpLCAxLCBt
X21heFZpZXdwb3J0RGltc1swXSksCisgICAgICAgICAgICAgICAgICAgY2xhbXAoY2FudmFzKCkt
PmhlaWdodCgpLCAxLCBtX21heFZpZXdwb3J0RGltc1sxXSkpOworfQorCitHQzNEaW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldE1heERyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIXN1
cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heERy
YXdCdWZmZXJzKQorICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6
TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICBpZiAoIW1fbWF4
Q29sb3JBdHRhY2htZW50cykKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNp
b25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMp
OworICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVO
VFMgPj0gTUFYX0RSQVdfQlVGRkVSUy4KKyAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVm
ZmVycywgbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKK3sKKyAgICBpZiAoIXN1cHBv
cnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heENvbG9y
QXR0YWNobWVudHMpCisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNE
OjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAg
ICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnNldEJhY2tEcmF3QnVmZmVyKEdDM0RlbnVtIGJ1ZikKK3sKKyAgICBtX2Jh
Y2tEcmF3QnVmZmVyID0gYnVmOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7Cisg
ICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcuZ2V0KCksIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCit7CisgICAgRXhjZXB0aW9uQ29kZSBl
YzsKKyAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSwgZWMp
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN1cHBvcnRzRHJhd0J1ZmZl
cnMoKQoreworICAgIGlmICghbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCkg
eworICAgICAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkID0gdHJ1ZTsK
KyAgICAgICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZCA9IFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZCh0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5c0luc3RhbmNlZChH
QzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBw
cmltY291bnQpCit7CisgICAgaWYgKCFwcmltY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCF2YWxpZGF0
ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHBy
aW1jb3VudCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OworICAgIAorICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0Fy
cmF5c0luc3RhbmNlZCIsIHRydWUpOworICAgIAorICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0lu
c3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisgICAgCisgICAgaWYgKCFp
c0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgcmVz
dG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0Fy
cmF5c0luc3RhbmNlZCIsIGZhbHNlKTsKKyAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zm
c2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGlmICghcHJpbWNvdW50KSB7CisgICAg
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1l
bnRzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBu
dW1FbGVtZW50cywgcHJpbWNvdW50KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNsZWFy
SWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
ZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgaWYgKCFudW1F
bGVtZW50cykKKyAgICAgICAgICAgIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5
cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51bUVsZW1lbnRzKTsKKyAgICAg
ICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVt
ZW50cyk7CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hl
Y2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCB0cnVlKTsKKyAg
ICAKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlw
ZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgcHJpbWNvdW50KTsKKyAgICAKKyAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAg
ICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2Vk
KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliRGl2
aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGluZGV4
ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlzb3IiLCAiaW5k
ZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZp
c29yKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3Ip
OworfQorCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZV9oCisjZGVmaW5lIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2VfaAorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisj
aW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZm
ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXZWJHTEdldEluZm8uaCIKKyNp
bmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXkuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBTkdMRUluc3RhbmNlZEFycmF5czsK
K2NsYXNzIEVYVEJsZW5kTWluTWF4OworY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
OworY2xhc3MgRVhUU2hhZGVyVGV4dHVyZUxPRDsKK2NsYXNzIEVYVHNSR0I7CitjbGFzcyBFWFRG
cmFnRGVwdGg7CitjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OworY2xhc3MgSFRNTFZpZGVvRWxlbWVu
dDsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRhOworY2xhc3MgSW50U2l6ZTsK
K2NsYXNzIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM7CitjbGFzcyBPRVNUZXh0dXJlRmxvYXQ7Citj
bGFzcyBPRVNUZXh0dXJlRmxvYXRMaW5lYXI7CitjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0Owor
Y2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKK2NsYXNzIE9FU1ZlcnRleEFycmF5T2Jq
ZWN0OworY2xhc3MgT0VTRWxlbWVudEluZGV4VWludDsKK2NsYXNzIFdlYkdMQWN0aXZlSW5mbzsK
K2NsYXNzIFdlYkdMQnVmZmVyOworY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7CitjbGFzcyBXZWJH
TENvbnRleHRPYmplY3Q7CitjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOworY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOworY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVMzVEM7CitjbGFzcyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOworY2xhc3MgV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mbzsKK2NsYXNzIFdlYkdMRGVidWdTaGFkZXJzOworY2xhc3MgV2ViR0xEZXB0aFRl
eHR1cmU7CitjbGFzcyBXZWJHTERyYXdCdWZmZXJzOworY2xhc3MgV2ViR0xFeHRlbnNpb247Citj
bGFzcyBXZWJHTEZyYW1lYnVmZmVyOworY2xhc3MgV2ViR0xMb3NlQ29udGV4dDsKK2NsYXNzIFdl
YkdMT2JqZWN0OworY2xhc3MgV2ViR0xQcm9ncmFtOworY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7
CitjbGFzcyBXZWJHTFNoYWRlcjsKK2NsYXNzIFdlYkdMU2hhcmVkT2JqZWN0OworY2xhc3MgV2Vi
R0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ7CitjbGFzcyBXZWJHTFRleHR1cmU7CitjbGFzcyBXZWJH
TFVuaWZvcm1Mb2NhdGlvbjsKK2NsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CisKK3R5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlPiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENvbnRleHRBdHRyaWJ1
dGVzKiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSgpOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQorI2lmIFBMQVRGT1JNKFdJTikKKy8vIEZJWE1FOiBJbXBsZW1lbnQgYWNj
ZWxlcmF0ZWQgM2QgY2FudmFzIG9uIFdpbmRvd3MuCit2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRl
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisjZWxzZQordmlydHVhbCBib29s
IGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYK
KworaW50IGRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0OworaW50IGRyYXdpbmdCdWZmZXJIZWln
aHQoKSBjb25zdDsKKwordm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2Vw
dGlvbkNvZGUmKTsKK3ZvaWQgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVy
KiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwor
dm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqLCBFeGNlcHRpb25D
b2RlJik7Cit2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVi
dWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgYmluZFRl
eHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBFeGNlcHRpb25Db2RlJik7Cit2
b2lkIGJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQg
Ymx1ZSwgR0MzRGZsb2F0IGFscGhhKTsKK3ZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2Rl
KTsKK3ZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVt
IG1vZGVBbHBoYSk7Cit2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBk
ZmFjdG9yKTsKK3ZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51
bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7CisKK3ZvaWQg
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2Fn
ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJy
YXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0RlbnVt
IHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYp
Owordm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwg
QXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CisKK0dDM0RlbnVtIGNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsKK3ZvaWQgY2xlYXIoR0MzRGJpdGZp
ZWxkIG1hc2spOwordm9pZCBjbGVhckNvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVl
biwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSk7Cit2b2lkIGNsZWFyRGVwdGgoR0Mz
RGZsb2F0KTsKK3ZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQpOwordm9pZCBjb2xvck1hc2soR0Mz
RGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJv
b2xlYW4gYWxwaGEpOwordm9pZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9u
Q29kZSYpOworCit2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
IEFycmF5QnVmZmVyVmlldyogZGF0YSk7Cit2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwor
Cit2b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKTsKK3ZvaWQgY29weVRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCk7CisKK1Bhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZUJ1ZmZlcigp
OworUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBjcmVhdGVGcmFtZWJ1ZmZlcigpOworUGFz
c1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsKK1Bhc3NSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworUGFzc1JlZlB0cjxXZWJHTFNoYWRl
cj4gY3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NSZWZQ
dHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CisKK3ZvaWQgY3VsbEZhY2UoR0MzRGVu
dW0gbW9kZSk7CisKK3ZvaWQgZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKik7Cit2b2lkIGRlbGV0
ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKK3ZvaWQgZGVsZXRlUHJvZ3JhbShXZWJH
TFByb2dyYW0qKTsKK3ZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7
Cit2b2lkIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciopOwordm9pZCBkZWxldGVUZXh0dXJlKFdl
YkdMVGV4dHVyZSopOworCit2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSk7Cit2b2lkIGRlcHRoTWFz
ayhHQzNEYm9vbGVhbik7Cit2b2lkIGRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxv
YXQgekZhcik7Cit2b2lkIGRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlcios
IEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApOwordm9pZCBkaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKK3Zv
aWQgZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291
bnQsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYpOworCit2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOwordm9pZCBlbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBmaW5pc2go
KTsKK3ZvaWQgZmx1c2goKTsKK3ZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYpOwor
dm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSk7Cit2b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0Rl
bnVtIHRhcmdldCk7CisKK1Bhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVBdHRy
aWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NS
ZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIEdD
M0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Citib29sIGdldEF0dGFjaGVkU2hhZGVycyhX
ZWJHTFByb2dyYW0qLCBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4mLCBFeGNlcHRpb25Db2Rl
Jik7CitHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CitXZWJHTEdldEluZm8gZ2V0QnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NSZWZQdHI8V2ViR0xDb250
ZXh0QXR0cmlidXRlcz4gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKK0dDM0RlbnVtIGdldEVycm9y
KCk7CitXZWJHTEV4dGVuc2lvbiogZ2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7CitX
ZWJHTEdldEluZm8gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKK1dlYkdMR2V0SW5mbyBnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKK1dlYkdMR2V0SW5mbyBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSosIEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CitTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2co
V2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworV2ViR0xHZXRJbmZvIGdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJik7CitXZWJHTEdldEluZm8gZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiwgR0Mz
RGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKK1N0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNp
c2lvbkZvcm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUs
IEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKK1N0cmluZyBnZXRTaGFk
ZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CitWZWN0b3I8U3RyaW5nPiBn
ZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CitXZWJHTEdldEluZm8gZ2V0VGV4UGFyYW1ldGVyKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKK1dlYkdMR2V0
SW5mbyBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiwgRXhjZXB0aW9uQ29kZSYpOworUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gZ2V0
VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmKTsKK1dlYkdMR2V0SW5mbyBnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0Rl
bnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Citsb25nIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSk7CisKK3ZvaWQgaGludChHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpOworR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZm
ZXIqKTsKK2Jvb2wgaXNDb250ZXh0TG9zdCgpIGNvbnN0OworR0MzRGJvb2xlYW4gaXNFbmFibGVk
KEdDM0RlbnVtIGNhcCk7CitHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZm
ZXIqKTsKK0dDM0Rib29sZWFuIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKK0dDM0Rib29sZWFu
IGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7CitHQzNEYm9vbGVhbiBpc1NoYWRl
cihXZWJHTFNoYWRlciopOworR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFdlYkdMVGV4dHVyZSopOwor
Cit2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpOwordm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dy
YW0qLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50IHBhcmFtKTsKK3ZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNE
ZmxvYXQgdW5pdHMpOwordm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgcmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCk7Cit2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KTsKK3ZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9v
bGVhbiBpbnZlcnQpOwordm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwordm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xTaGFk
ZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHN0ZW5jaWxGdW5jKEdD
M0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKK3ZvaWQgc3RlbmNpbEZ1
bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0Mz
RHVpbnQgbWFzayk7Cit2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50KTsKK3ZvaWQgc3RlbmNpbE1h
c2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKTsKK3ZvaWQgc3RlbmNpbE9w
KEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7Cit2b2lkIHN0
ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpm
YWlsLCBHQzNEZW51bSB6cGFzcyk7CisKK3ZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAg
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCisgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZp
ZXcqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSosIEV4Y2VwdGlvbkNvZGUm
KTsKK3ZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAorICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFZJREVPKQor
dm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKK3Zv
aWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxv
YXQgcGFyYW0pOwordm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQgcGFyYW0pOworCit2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZl
clZpZXcqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0
YSosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxl
bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZh
c0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFZJREVPKQordm9pZCB0ZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlm
CisKK3ZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYpOwordm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1
bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5p
Zm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0yZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwg
RXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVu
aWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0yaShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBF
eGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZv
cm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtM2YoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdD
M0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
KTsKK3ZvaWQgdW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5p
Zm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtM2l2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKK3Zv
aWQgdW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNv
ZGUmKTsKK3ZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtNGZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBH
QzNEaW50IHcsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsK
K3ZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm1N
YXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQg
dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxv
YXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3Jt
TWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lk
IHVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7CisKK3ZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRp
b25Db2RlJik7Cit2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25D
b2RlJik7CisKK3ZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4
KTsKK3ZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZh
bHVlcyk7Cit2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKK3ZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSk7Cit2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwordm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Cit2b2lk
IHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHks
IEdDM0RmbG9hdCB6KTsKK3ZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHZhbHVlcyk7Cit2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKK3ZvaWQgdmVydGV4QXR0cmliNGYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdD
M0RmbG9hdCB3KTsKK3ZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMy
QXJyYXkqIHZhbHVlcyk7Cit2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKK3ZvaWQgdmVydGV4QXR0cmliUG9pbnRl
cihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVh
biBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzdHJpZGUs
IGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKwordm9pZCB2aWV3cG9ydChHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKwor
Ly8gV0VCS0lUX2xvc2VfY29udGV4dCBzdXBwb3J0CitlbnVtIExvc3RDb250ZXh0TW9kZSB7Cisg
ICAgLy8gTG9zdCBjb250ZXh0IG9jY3VycmVkIGF0IHRoZSBncmFwaGljcyBzeXN0ZW0gbGV2ZWwu
CisgICAgUmVhbExvc3RDb250ZXh0LAorICAgIAorICAgIC8vIExvc3QgY29udGV4dCBwcm92b2tl
ZCBieSBXRUJLSVRfbG9zZV9jb250ZXh0LgorICAgIFN5bnRoZXRpY0xvc3RDb250ZXh0Cit9Owor
dm9pZCBmb3JjZUxvc3RDb250ZXh0KExvc3RDb250ZXh0TW9kZSk7Cit2b2lkIGZvcmNlUmVzdG9y
ZUNvbnRleHQoKTsKK3ZvaWQgbG9zZUNvbnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7CisKK0dy
YXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dC5nZXQoKTsgfQorV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRHcm91cCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9Cit2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKKwordm9pZCByZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCk7CisKK3ZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwordmlydHVhbCB2b2lk
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgb3ZlcnJpZGU7CitQYXNzUmVmUHRyPElt
YWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKwordm9pZCByZW1v
dmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKK3ZvaWQgcmVtb3ZlQ29udGV4dE9i
amVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKKwordW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmli
cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VmVydGV4QXR0cmliczsgfQorCisvLyBBTkdMRV9pbnN0
YW5jZWRfYXJyYXlzIGV4dGVuc2lvbiBmdW5jdGlvbnMuCit2b2lkIGRyYXdBcnJheXNJbnN0YW5j
ZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6
ZWkgcHJpbWNvdW50KTsKK3ZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUs
IEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNp
emVpIHByaW1jb3VudCk7Cit2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgs
IEdDM0R1aW50IGRpdmlzb3IpOworCitwcm90ZWN0ZWQ6CitXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKEhUTUxDYW52YXNFbGVtZW50KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOwor
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CisKK3By
aXZhdGU6CitmcmllbmQgY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsKK2ZyaWVuZCBjbGFzcyBXZWJH
TEZyYW1lYnVmZmVyOworZnJpZW5kIGNsYXNzIFdlYkdMT2JqZWN0OworZnJpZW5kIGNsYXNzIE9F
U1ZlcnRleEFycmF5T2JqZWN0OworZnJpZW5kIGNsYXNzIFdlYkdMRGVidWdTaGFkZXJzOworZnJp
ZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM7CitmcmllbmQgY2xhc3MgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDOworZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOworZnJpZW5kIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNh
bGxiYWNrOworZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CisKK3ZvaWQg
aW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKK3ZvaWQgc2V0dXBGbGFncygpOworCisvLyBBY3RpdmVE
T01PYmplY3QKK3ZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlk
ZTsKK3ZpcnR1YWwgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Cit2aXJ0dWFsIGNvbnN0IGNoYXIqIGFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0IjsgfQorCit2b2lkIGFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCop
Owordm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOwordm9pZCBkZXRh
Y2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisKK3ZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNE
KCk7Cit2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworCisvLyBRdWVyeSB3aGV0aGVyIGl0IGlz
IGJ1aWx0IG9uIHRvcCBvZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRpb24uCitib29sIGlz
R0xFUzJDb21wbGlhbnQoKSB7IHJldHVybiBtX2lzR0xFUzJDb21wbGlhbnQ7IH0KKy8vIFF1ZXJ5
IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KK2Jvb2wgaXNHTEVTMk5Q
T1RTdHJpY3QoKSB7IHJldHVybiBtX2lzR0xFUzJOUE9UU3RyaWN0OyB9CisvLyBRdWVyeSBpZiB0
aGUgR0wgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVzIGVycm9ycyBvbiBvdXQtb2YtYm91bmRzIGJ1
ZmZlciBhY2Nlc3Nlcy4KK2Jvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
cygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlczsgfQor
Ly8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGluaXRpYWxpemVzIHRleHR1cmVzL3Jl
bmRlcmJ1ZmZlcnMgdG8gMC4KK2Jvb2wgaXNSZXNvdXJjZVNhZmUoKSB7IHJldHVybiBtX2lzUmVz
b3VyY2VTYWZlOyB9CisvLyBRdWVyeSBpZiBkZXB0aF9zdGVuY2lsIGJ1ZmZlciBpcyBzdXBwb3J0
ZWQuCitib29sIGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkgeyByZXR1cm4gbV9pc0RlcHRoU3Rl
bmNpbFN1cHBvcnRlZDsgfQorCisvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVz
IG9mIE9wZW5HTCBkYXRhIHR5cGVzCisvLyBsaWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KK3Vu
c2lnbmVkIHNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpOworCisvLyBCYXNpYyB2YWxpZGF0aW9u
IG9mIGNvdW50IGFuZCBvZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVu
dCBhcnJheSBidWZmZXIKK2Jvb2wgdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpOworCisvLyBDb25zZXJ2YXRp
dmUgYnV0IHF1aWNrIGluZGV4IHZhbGlkYXRpb24KK2Jvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29u
c2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsK
KworLy8gUHJlY2lzZSBidXQgc2xvdyBpbmRleCB2YWxpZGF0aW9uIC0tIG9ubHkgZG9uZSBpZiBj
b25zZXJ2YXRpdmUgY2hlY2tzIGZhaWwKK2Jvb2wgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCB1bnNpZ25l
ZCYgbnVtRWxlbWVudHNSZXF1aXJlZCk7Citib29sIHZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1
bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50ID0gMCk7CisKK2Jv
b2wgdmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBjaGFyKiwgV2ViR0xPYmplY3QqKTsKKworYm9v
bCB2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBt
b2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQp
OworYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9m
ZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKKworLy8g
QWRkcyBhIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQuCit2b2lkIGFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEdDM0RlbnVtKTsKKworUGFzc1JlZlB0cjxJbWFnZT4gZHJhd0ltYWdlSW50b0J1
ZmZlcihJbWFnZSosIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRldmljZVNjYWxlRmFjdG9y
KTsKKworI2lmIEVOQUJMRShWSURFTykKK1Bhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0lt
YWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBCYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJik7
CisjZW5kaWYKKworUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CitSZWZQdHI8
V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4dEdyb3VwOworCisvLyBPcHRpb25hbCBzdHJ1Y3R1
cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQgb2YgZGlyZWN0bHkK
Ky8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRleHQuCitSZWZQdHI8RHJhd2luZ0J1ZmZl
cj4gbV9kcmF3aW5nQnVmZmVyOworCisvLyBEaXNwYXRjaGVzIGEgY29udGV4dCBsb3N0IGV2ZW50
IG9uY2UgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IG9uZSBpcyBuZWVkZWQuCisvLyBUaGlzIGlzIHVz
ZWQgYm90aCBmb3Igc3ludGhldGljIGFuZCByZWFsIGNvbnRleHQgbG9zc2VzLiBGb3IgcmVhbCBv
bmVzLCBpdCdzCisvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0
YWNrLCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKKy8vIG9uIGhvdyBleGFjdGx5IHRoZSBw
bGF0Zm9ybSBkaXNjb3ZlcnMgdGhhdCB0aGUgY29udGV4dCB3YXMgbG9zdC4gRm9yIGJldHRlcgor
Ly8gcG9ydGFiaWxpdHkgd2UgYWx3YXlzIGRlZmVyIHRoZSBkaXNwYXRjaCBvZiB0aGUgZXZlbnQu
CitUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOworYm9vbCBtX3Jlc3RvcmVB
bGxvd2VkOworVGltZXIgbV9yZXN0b3JlVGltZXI7CisKK2Jvb2wgbV9uZWVkc1VwZGF0ZTsKK2Jv
b2wgbV9tYXJrZWRDYW52YXNEaXJ0eTsKK0hhc2hTZXQ8V2ViR0xDb250ZXh0T2JqZWN0Kj4gbV9j
b250ZXh0T2JqZWN0czsKKworLy8gTGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFp
biBpbmZvIGFib3V0IHNpemVzIGZvciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9y
IEVMRU1FTlRfQVJSQVlfQlVGRkVSCitSZWZQdHI8V2ViR0xCdWZmZXI+IG1fYm91bmRBcnJheUJ1
ZmZlcjsKKworUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZlcnRl
eEFycmF5T2JqZWN0OworUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdDsKK3ZvaWQgc2V0Qm91bmRWZXJ0ZXhBcnJheU9iamVjdChQYXNzUmVm
UHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IGFycmF5T2JqZWN0KQoreworICAgIGlmIChh
cnJheU9iamVjdCkKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gYXJyYXlPYmpl
Y3Q7CisgICAgZWxzZQorICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1
bHRWZXJ0ZXhBcnJheU9iamVjdDsKK30KKworY2xhc3MgVmVydGV4QXR0cmliVmFsdWUgeworcHVi
bGljOgorICAgIFZlcnRleEF0dHJpYlZhbHVlKCkKKyAgICB7CisgICAgICAgIGluaXRWYWx1ZSgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRWYWx1ZSgpCisgICAgeworICAgICAgICB2YWx1
ZVswXSA9IDAuMGY7CisgICAgICAgIHZhbHVlWzFdID0gMC4wZjsKKyAgICAgICAgdmFsdWVbMl0g
PSAwLjBmOworICAgICAgICB2YWx1ZVszXSA9IDEuMGY7CisgICAgfQorICAgIAorICAgIEdDM0Rm
bG9hdCB2YWx1ZVs0XTsKK307CitWZWN0b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0
cmliVmFsdWU7Cit1bnNpZ25lZCBtX21heFZlcnRleEF0dHJpYnM7CitSZWZQdHI8V2ViR0xCdWZm
ZXI+IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsKK2xvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6
ZTsKK0dDM0RmbG9hdCBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVs0XTsKK2Jvb2wgbV9mb3Jj
ZUF0dHJpYjBCdWZmZXJSZWZpbGw7Citib29sIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmU7CisK
K1JlZlB0cjxXZWJHTFByb2dyYW0+IG1fY3VycmVudFByb2dyYW07CitSZWZQdHI8V2ViR0xGcmFt
ZWJ1ZmZlcj4gbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CitSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+
IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKK3N0cnVjdCBUZXh0dXJlVW5pdFN0YXRlIHsKKyAgICBS
ZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXh0dXJlMkRCaW5kaW5nOworICAgIFJlZlB0cjxXZWJHTFRl
eHR1cmU+IHRleHR1cmVDdWJlTWFwQmluZGluZzsKK307CitWZWN0b3I8VGV4dHVyZVVuaXRTdGF0
ZT4gbV90ZXh0dXJlVW5pdHM7Cit1bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7CisK
K1JlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxhY2tUZXh0dXJlMkQ7CitSZWZQdHI8V2ViR0xUZXh0
dXJlPiBtX2JsYWNrVGV4dHVyZUN1YmVNYXA7CisKK1ZlY3RvcjxHQzNEZW51bT4gbV9jb21wcmVz
c2VkVGV4dHVyZUZvcm1hdHM7CisKKy8vIEZpeGVkLXNpemUgY2FjaGUgb2YgcmV1c2FibGUgaW1h
Z2UgYnVmZmVycyBmb3IgdmlkZW8gdGV4SW1hZ2UyRCBjYWxscy4KK2NsYXNzIExSVUltYWdlQnVm
ZmVyQ2FjaGUgeworcHVibGljOgorICAgIExSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5
KTsKKyAgICAvLyBUaGUgcG9pbnRlciByZXR1cm5lZCBpcyBvd25lZCBieSB0aGUgaW1hZ2UgYnVm
ZmVyIG1hcC4KKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZSk7Citwcml2YXRlOgorICAgIHZvaWQgYnViYmxlVG9Gcm9udChpbnQgaWR4KTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7Cisg
ICAgaW50IG1fY2FwYWNpdHk7Cit9OworTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZElt
YWdlQ2FjaGU7CisKK0dDM0RpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKK0dDM0RpbnQgbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemU7CitHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKK0dDM0RpbnQg
bV9tYXhWaWV3cG9ydERpbXNbMl07CitHQzNEaW50IG1fbWF4VGV4dHVyZUxldmVsOworR0MzRGlu
dCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisKK0dDM0RpbnQgbV9tYXhEcmF3QnVmZmVyczsK
K0dDM0RpbnQgbV9tYXhDb2xvckF0dGFjaG1lbnRzOworR0MzRGVudW0gbV9iYWNrRHJhd0J1ZmZl
cjsKK2Jvb2wgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZDsKK2Jvb2wgbV9k
cmF3QnVmZmVyc1N1cHBvcnRlZDsKKworR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7CitHQzNEaW50
IG1fdW5wYWNrQWxpZ25tZW50OworYm9vbCBtX3VucGFja0ZsaXBZOworYm9vbCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGE7CitHQzNEZW51bSBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uOwor
Ym9vbCBtX2NvbnRleHRMb3N0OworTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RNb2RlOwor
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworCitib29sIG1fbGF5
ZXJDbGVhcmVkOworR0MzRGZsb2F0IG1fY2xlYXJDb2xvcls0XTsKK2Jvb2wgbV9zY2lzc29yRW5h
YmxlZDsKK0dDM0RmbG9hdCBtX2NsZWFyRGVwdGg7CitHQzNEaW50IG1fY2xlYXJTdGVuY2lsOwor
R0MzRGJvb2xlYW4gbV9jb2xvck1hc2tbNF07CitHQzNEYm9vbGVhbiBtX2RlcHRoTWFzazsKKwor
Ym9vbCBtX3N0ZW5jaWxFbmFibGVkOworR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywgbV9zdGVuY2ls
TWFza0JhY2s7CitHQzNEaW50IG1fc3RlbmNpbEZ1bmNSZWYsIG1fc3RlbmNpbEZ1bmNSZWZCYWNr
OyAvLyBOb3RlIHRoYXQgdGhlc2UgYXJlIHRoZSB1c2VyIHNwZWNpZmllZCB2YWx1ZXMsIG5vdCB0
aGUgaW50ZXJuYWwgY2xhbXBlZCB2YWx1ZS4KK0dDM0R1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBt
X3N0ZW5jaWxGdW5jTWFza0JhY2s7CisKK2Jvb2wgbV9pc0dMRVMyQ29tcGxpYW50OworYm9vbCBt
X2lzR0xFUzJOUE9UU3RyaWN0OworYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXM7Citib29sIG1faXNSZXNvdXJjZVNhZmU7Citib29sIG1faXNEZXB0aFN0ZW5jaWxT
dXBwb3J0ZWQ7Citib29sIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkOworCitib29sIG1fc3lu
dGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGU7CitpbnQgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93
ZWQ7CisKKy8vIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0IGNhbiBiZSBjcmVhdGVkIGluIGEgc3Rh
dGUgd2hlcmUgaXQgYXBwZWFycyBhcworLy8gYSB2YWxpZCBhbmQgYWN0aXZlIGNvbnRleHQsIGJ1
dCB3aWxsIG5vdCBleGVjdXRlIGFueSBpbXBvcnRhbnQgb3BlcmF0aW9ucworLy8gdW50aWwgaXRz
IGxvYWQgcG9saWN5IGlzIGNvbXBsZXRlbHkgcmVzb2x2ZWQuCitib29sIG1faXNQZW5kaW5nUG9s
aWN5UmVzb2x1dGlvbjsKK2Jvb2wgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uOworYm9v
bCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCk7CisKKy8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVj
dHMuCitzdGQ6OnVuaXF1ZV9wdHI8RVhURnJhZ0RlcHRoPiBtX2V4dEZyYWdEZXB0aDsKK3N0ZDo6
dW5pcXVlX3B0cjxFWFRCbGVuZE1pbk1heD4gbV9leHRCbGVuZE1pbk1heDsKK3N0ZDo6dW5pcXVl
X3B0cjxFWFRzUkdCPiBtX2V4dHNSR0I7CitzdGQ6OnVuaXF1ZV9wdHI8RVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljPiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzsKK3N0ZDo6dW5pcXVl
X3B0cjxFWFRTaGFkZXJUZXh0dXJlTE9EPiBtX2V4dFNoYWRlclRleHR1cmVMT0Q7CitzdGQ6OnVu
aXF1ZV9wdHI8T0VTVGV4dHVyZUZsb2F0PiBtX29lc1RleHR1cmVGbG9hdDsKK3N0ZDo6dW5pcXVl
X3B0cjxPRVNUZXh0dXJlRmxvYXRMaW5lYXI+IG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyOworc3Rk
Ojp1bmlxdWVfcHRyPE9FU1RleHR1cmVIYWxmRmxvYXQ+IG1fb2VzVGV4dHVyZUhhbGZGbG9hdDsK
K3N0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVI
YWxmRmxvYXRMaW5lYXI7CitzdGQ6OnVuaXF1ZV9wdHI8T0VTU3RhbmRhcmREZXJpdmF0aXZlcz4g
bV9vZXNTdGFuZGFyZERlcml2YXRpdmVzOworc3RkOjp1bmlxdWVfcHRyPE9FU1ZlcnRleEFycmF5
T2JqZWN0PiBtX29lc1ZlcnRleEFycmF5T2JqZWN0Oworc3RkOjp1bmlxdWVfcHRyPE9FU0VsZW1l
bnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKK3N0ZDo6dW5pcXVlX3B0cjxXZWJH
TExvc2VDb250ZXh0PiBtX3dlYmdsTG9zZUNvbnRleHQ7CitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mbz4gbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvOworc3RkOjp1bmlxdWVf
cHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFkZXJzOworc3RkOjp1bmlxdWVf
cHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFU
QzsKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM+IG1fd2ViZ2xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDOworc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDOworc3RkOjp1bmlxdWVfcHRy
PFdlYkdMRGVwdGhUZXh0dXJlPiBtX3dlYmdsRGVwdGhUZXh0dXJlOworc3RkOjp1bmlxdWVfcHRy
PFdlYkdMRHJhd0J1ZmZlcnM+IG1fd2ViZ2xEcmF3QnVmZmVyczsKK3N0ZDo6dW5pcXVlX3B0cjxB
TkdMRUluc3RhbmNlZEFycmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKKworLy8gSGVscGVy
cyBmb3IgZ2V0UGFyYW1ldGVyIGFuZCBvdGhlcnMKK1dlYkdMR2V0SW5mbyBnZXRCb29sZWFuUGFy
YW1ldGVyKEdDM0RlbnVtKTsKK1dlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIo
R0MzRGVudW0pOworV2ViR0xHZXRJbmZvIGdldEZsb2F0UGFyYW1ldGVyKEdDM0RlbnVtKTsKK1dl
YkdMR2V0SW5mbyBnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0pOworV2ViR0xHZXRJbmZvIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKK1dlYkdMR2V0SW5mbyBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0pOworV2ViR0xHZXRJbmZvIGdldFdlYkdMSW50QXJyYXlQ
YXJhbWV0ZXIoR0MzRGVudW0pOworCisvLyBDbGVhciB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMg
Y29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVyYXRpb24uCisvLyBjbGVhck1hc2sgaXMgc2V0
IHRvIHRoZSBiaXRmaWVsZCBvZiBhbnkgY2xlYXIgdGhhdCB3b3VsZCBoYXBwZW4gYW55d2F5IGF0
IHRoaXMgdGltZQorLy8gYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhhdCBjbGVh
ciBpcyBub3cgdW5uZWNlc3NhcnkuCitib29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVs
ZCBjbGVhck1hc2sgPSAwKTsKKworLy8gSGVscGVyIHRvIHJlc3RvcmUgc3RhdGUgdGhhdCBjbGVh
cmluZyB0aGUgZnJhbWVidWZmZXIgbWF5IGRlc3Ryb3kuCit2b2lkIHJlc3RvcmVTdGF0ZUFmdGVy
Q2xlYXIoKTsKKwordm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB0ZXhJbWFnZTJESW1w
bChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4U3ViSW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSos
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworCit2b2lkIGNoZWNrVGV4dHVyZUNv
bXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7CisKK3ZvaWQgY3JlYXRlRmFsbGJhY2tCbGFj
a1RleHR1cmVzMXgxKCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29weVRleHtTdWJ9SW1h
Z2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0CisvLyBhbmQgdGhlIGNvbG9yIGJ1
ZmZlciBmb3JtYXQgb2YgdGhlIGN1cnJlbnQgYm91bmQgZnJhbWVidWZmZXIgY29tYmluYXRpb24K
Ky8vIGlzIHZhbGlkLgorYm9vbCBpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5h
dGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LEdDM0RlbnVtIGNvbG9yQnVmZmVy
Rm9ybWF0KTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZm
ZXIncyBjb2xvciBidWZmZXIgZm9ybWF0LgorR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNv
bG9yRm9ybWF0KCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1l
YnVmZmVyJ3Mgd2lkdGguCitpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCk7CisKKy8vIEhl
bHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgoraW50
IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZl
cmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aCBvZiB1bmlmb3JtIGFuZCBhdHRyaWJ1dGUgbG9jYXRp
b25zLgorYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgU3RyaW5nJik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBzaXpl
IGlzIG5vbi1uZWdhdGl2ZS4KKy8vIEdlbmVyYXRlIEdMIGVycm9yIGFuZCByZXR1cm4gZmFsc2Ug
Zm9yIG5lZ2F0aXZlIGlucHV0czsgb3RoZXJ3aXNlLCByZXR1cm4gdHJ1ZS4KK2Jvb2wgdmFsaWRh
dGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpOwor
CisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0
cmluZyBiZWxvbmcgdG8gdGhlCisvLyBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbiBHTFNMIEVT
IDEuMCBzcGVjIHNlY3Rpb24gMy4xLgorYm9vbCB2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hl
Y2sgdGFyZ2V0IGFuZCB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQuCisvLyBHZW5lcmF0ZSBH
TCBlcnJvcnMgYW5kIHJldHVybiAwIGlmIHRhcmdldCBpcyBpbnZhbGlkIG9yIHRleHR1cmUgYm91
bmQgaXMKKy8vIG51bGwuICBPdGhlcndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0
aGUgdGFyZ2V0LgorV2ViR0xUZXh0dXJlKiB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3Vi
ZU1hcCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBmb3JtYXQvdHlwZSBm
b3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCisvLyBHZW5lcmF0ZXMgR0wgZXJyb3Ig
YW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KK2Jvb2wgdmFsaWRh
dGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZlbCk7CisKKy8vIEhlbHBlciBmdW5j
dGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1h
Z2UuCisvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwgaXMg
aW52YWxpZC4KK2Jvb2wgdmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpOworCitlbnVtIFRleEZ1bmNWYWxp
ZGF0aW9uRnVuY3Rpb25UeXBlIHsKKyAgICBOb3RUZXhTdWJJbWFnZTJELAorICAgIFRleFN1Yklt
YWdlMkQsCit9OworCitlbnVtIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSB7CisgICAgU291
cmNlQXJyYXlCdWZmZXJWaWV3LAorICAgIFNvdXJjZUltYWdlRGF0YSwKKyAgICBTb3VyY2VIVE1M
SW1hZ2VFbGVtZW50LAorICAgIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LAorICAgIFNvdXJjZUhU
TUxWaWRlb0VsZW1lbnQsCit9OworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1h
Z2UyRCB0byBjaGVjayBpZiB0aGUgaW5wdXQgZm9ybWF0L3R5cGUvbGV2ZWwvdGFyZ2V0L3dpZHRo
L2hlaWdodC9ib3JkZXIveG9mZnNldC95b2Zmc2V0IGFyZSB2YWxpZC4KKy8vIE90aGVyd2lzZSwg
aXQgd291bGQgcmV0dXJuIHF1aWNrbHkgd2l0aG91dCBkb2luZyBvdGhlciB3b3JrLgorYm9vbCB2
YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlv
bkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0
ZXJzIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKy8vIEdlbmVyYXRlcyBHTCBl
cnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorYm9vbCB2
YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpOworCitlbnVtIE51bGxEaXNw
b3NpdGlvbiB7CisgICAgTnVsbEFsbG93ZWQsCisgICAgTnVsbE5vdEFsbG93ZWQKK307CisKKy8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZp
ZXcKKy8vIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUgYW5kIGNvbnRhaW5zIGVub3VnaCBkYXRhIGZv
ciB0aGUgdGV4SW1hZ2UgY2FsbC4KKy8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBm
YWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRh
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIE51bGxEaXNwb3NpdGlvbik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxp
ZGF0ZSBhIGdpdmVuIHRleHR1cmUgZm9ybWF0IGlzIHNldHRhYmxlIGFzIGluCisvLyB5b3UgY2Fu
IHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9yIGNhbGwgdGV4SW1hZ2UyRCwgY29weVRleElt
YWdlMkQgYW5kCisvLyBjb3B5VGV4U3ViSW1hZ2UyRC4KKy8vIEdlbmVyYXRlcyBHTCBlcnJvciBh
bmQgcmV0dXJucyBmYWxzZSBpZiB0aGUgZm9ybWF0IGlzIG5vdCBzZXR0YWJsZS4KK2Jvb2wgdmFs
aWRhdGVTZXR0YWJsZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IGZvcm1hdCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRl
eHR1cmUgZGF0YSBpcyBjb3JyZWN0IHNpemUKKy8vIGZvciB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCBk
aW1lbnNpb25zLgorYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscyk7CisKKy8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0
cy4KK2Jvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCk7CisK
Ky8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1cmUgZGltZW5z
aW9ucyBhcmUgdmFsaWQgZm9yCisvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorYm9vbCB2YWxpZGF0ZUNv
bXByZXNzZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RlbnVtIGZvcm1hdCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21w
cmVzc2VkIHRleHR1cmUgZGltZW5zaW9ucyBhcmUgdmFsaWQgZm9yCisvLyB0aGUgZ2l2ZW4gZm9y
bWF0LgorYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgV2ViR0xUZXh0dXJlKik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2Rl
IGZvciBkcmF3e0FycmF5cy9FbGVtZW50c30uCitib29sIHZhbGlkYXRlRHJhd01vZGUoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2
YWxpZGF0ZSBpZiBmcm9udC9iYWNrIHN0ZW5jaWxNYXNrIGFuZCBzdGVuY2lsRnVuYyBzZXR0aW5n
cyBhcmUgdGhlIHNhbWUuCitib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBzdGVuY2ls
IGZ1bmMuCitib29sIHZhbGlkYXRlU3RlbmNpbEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBhbmQg
dGV4UGFyYW1ldGVyaS4KK3ZvaWQgdGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbWksIEdDM0RpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQp
OworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJpbnQgR0wgZXJyb3JzIHRvIGNvbnNvbGUuCit2
b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcmKTsKK3ZvaWQgcHJpbnRHTFdh
cm5pbmdUb0NvbnNvbGUoY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIHJlYXNvbik7
CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCB3YXJuaW5ncyB0byBjb25zb2xlLiBDdXJy
ZW50bHkKKy8vIHVzZWQgb25seSB0byB3YXJuIGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlv
bnMuCit2b2lkIHByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmKTsKKworLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZyYW1lYnVmZmVy
IGZ1bmN0aW9ucy4KKy8vIEdlbmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVn
YWwuCitib29sIHZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCk7CisKKy8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBlcXVhdGlvbiBtb2RlLgorYm9vbCB2
YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7
CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBmdW5jIGZhY3RvcnMuCiti
b29sIHZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlk
YXRlIGEgR0wgY2FwYWJpbGl0eS4KK2Jvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRh
dGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdW5pZm9ybSBmdW5jdGlvbnMuCitib29sIHZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOworYm9vbCB2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qLCBJbnQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Citib29sIHZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiosIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBtb2QpOwor
Ym9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOworYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0Rz
aXplaSBtb2QpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgcGFyYW1ldGVycyBm
b3IgYnVmZmVyRGF0YS4KKy8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFy
Z2V0LCBvciAwIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCitXZWJHTEJ1ZmZlciogdmFsaWRh
dGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtT
dWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkgYW5kIHdvdWxkbid0IHRhaW50
IE9yaWdpbi4KK2Jvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworLy8gSGVscGVy
IGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIGNhbnZhcyBpcyByZWFk
eSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgorYm9vbCB2YWxpZGF0ZUhUTUxDYW52YXNFbGVt
ZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRp
b25Db2RlJik7CisKKyNpZiBFTkFCTEUoVklERU8pCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRl
eHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVhZHkgd291bGRuJ3QgdGFpbnQg
T3JpZ2luLgorYm9vbCB2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKy8v
IEhlbHBlciBmdW5jdGlvbnMgZm9yIHZlcnRleEF0dHJpYk5me3Z9Lgordm9pZCB2ZXJ0ZXhBdHRy
aWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6
ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxv
YXQpOwordm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Cit2
b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwor
CisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJv
Z3JhbSwgZXRjKSBmdW5jdGlvbnMuCisvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCBy
ZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCitib29sIGRlbGV0ZU9iamVjdChXZWJH
TE9iamVjdCopOworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBi
aW5kVGV4dHVyZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KKy8vIElmIHRoZSBvYmplY3QgaGFzIGFs
cmVhZHkgYmVlbiBkZWxldGVkLCBzZXQgZGVsZXRlZCB0byB0cnVlIHVwb24gcmV0dXJuLgorLy8g
UmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVydGhlciBwcm9j
ZXNzaW5nLgorYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7CisKKy8vIEhlbHBlcnMgZm9yIHNpbXVs
YXRpbmcgdmVydGV4QXR0cmliMAordm9pZCBpbml0VmVydGV4QXR0cmliMCgpOworYm9vbCBzaW11
bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCk7Cit2b2lkIHJlc3RvcmVTdGF0
ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisKK3ZvaWQgZGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50KCk7CisvLyBIZWxwZXIgZm9yIHJlc3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9z
dC4KK3ZvaWQgbWF5YmVSZXN0b3JlQ29udGV4dCgpOworCisvLyBEZXRlcm1pbmUgaWYgd2UgYXJl
IHJ1bm5pbmcgcHJpdmlsZWdlZCBjb2RlIGluIHRoZSBicm93c2VyLCBmb3IgZXhhbXBsZSwKKy8v
IGEgU2FmYXJpIG9yIENocm9tZSBleHRlbnNpb24uCitib29sIGFsbG93UHJpdmlsZWdlZEV4dGVu
c2lvbnMoKSBjb25zdDsKKworZW51bSBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgeworICAgIERp
c3BsYXlJbkNvbnNvbGUsCisgICAgRG9udERpc3BsYXlJbkNvbnNvbGUKK307CisKKy8vIFdyYXBw
ZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0aGF0IHNlbmRzIGEg
bWVzc2FnZQorLy8gdG8gdGhlIEphdmFTY3JpcHQgY29uc29sZS4KK3ZvaWQgc3ludGhlc2l6ZUdM
RXJyb3IoR0MzRGVudW0sIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVz
Y3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSA9IERpc3BsYXlJbkNvbnNvbGUpOwor
CitTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBjb25zdDsKKworLy8gRW5hYmxl
IG9yIGRpc2FibGUgc3RlbmNpbCB0ZXN0IGJhc2VkIG9uIHVzZXIgc2V0dGluZyBhbmQKKy8vIHdo
ZXRoZXIgdGhlIGN1cnJlbnQgRkJPIGhhcyBhIHN0ZW5jaWwgYnVmZmVyLgordm9pZCBhcHBseVN0
ZW5jaWxUZXN0KCk7CisKKy8vIEhlbHBlciBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEgY2Fw
YWJpbGl0eS4KK3ZvaWQgZW5hYmxlT3JEaXNhYmxlKEdDM0RlbnVtIGNhcGFiaWxpdHksIGJvb2wg
ZW5hYmxlKTsKKworLy8gQ2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQ
T1JUX0RJTVMuCitJbnRTaXplIGNsYW1wZWRDYW52YXNTaXplKCk7CisKKy8vIEZpcnN0IHRpbWUg
Y2FsbGVkLCBpZiBFWFRfZHJhd19idWZmZXJzIGlzIHN1cHBvcnRlZCwgcXVlcnkgdGhlIHZhbHVl
OyBvdGhlcndpc2UgcmV0dXJuIDAuCisvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUu
CitHQzNEaW50IGdldE1heERyYXdCdWZmZXJzKCk7CitHQzNEaW50IGdldE1heENvbG9yQXR0YWNo
bWVudHMoKTsKKwordm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7CisKK3ZvaWQgcmVz
dG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcigpOwordm9pZCByZXN0b3JlQ3VycmVudFRleHR1cmUyRCgp
OworCisvLyBDaGVjayBpZiBFWFRfZHJhd19idWZmZXJzIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQg
YW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wgcmVxdWlyZW1lbnRzLgorYm9vbCBzdXBwb3J0
c0RyYXdCdWZmZXJzKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5pZGwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY3NyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0Ogor
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorKi8KKwordHlwZWRlZiB1bnNpZ25lZCBs
b25nICBHTGVudW07Cit0eXBlZGVmIGJvb2xlYW4gICAgICAgIEdMYm9vbGVhbjsKK3R5cGVkZWYg
dW5zaWduZWQgbG9uZyAgR0xiaXRmaWVsZDsKK3R5cGVkZWYgYnl0ZSAgICAgICAgICAgR0xieXRl
OyAgICAgICAgIC8qICdieXRlJyBzaG91bGQgYmUgYSBzaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5
cGVkZWYgc2hvcnQgICAgICAgICAgR0xzaG9ydDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgR0xp
bnQ7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgIEdMc2l6ZWk7Cit0eXBlZGVmIGxvbmcgbG9uZyAg
ICAgIEdMaW50cHRyOwordHlwZWRlZiBsb25nIGxvbmcgICAgICBHTHNpemVpcHRyOwordHlwZWRl
ZiBvY3RldCAgICAgICAgICBHTHVieXRlOyAgICAgICAgLyogJ29jdGV0JyBzaG91bGQgYmUgYW4g
dW5zaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgR0x1c2hvcnQ7
Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMdWludDsKK3R5cGVkZWYgdW5yZXN0cmljdGVkIGZs
b2F0IEdMZmxvYXQ7Cit0eXBlZGVmIHVucmVzdHJpY3RlZCBmbG9hdCBHTGNsYW1wZjsKKworWwor
Q29uZGl0aW9uYWw9V0VCR0wsCitKU0N1c3RvbU1hcmtGdW5jdGlvbiwKK0RvTm90Q2hlY2tDb25z
dGFudHMsCitdIGludGVyZmFjZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIDogQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCB7CisKKy8qIENsZWFyQnVmZmVyTWFzayAqLworY29uc3QgR0xlbnVtIERF
UFRIX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7Citjb25zdCBHTGVudW0g
U1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgID0gMHgwMDAwMDQwMDsKK2NvbnN0IEdMZW51
bSBDT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAgPSAweDAwMDA0MDAwOworCisvKiBCZWdp
bk1vZGUgKi8KK2NvbnN0IEdMZW51bSBQT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDA7Citjb25zdCBHTGVudW0gTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MDAxOworY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAw
MjsKK2NvbnN0IEdMZW51bSBMSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDM7
Citjb25zdCBHTGVudW0gVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA0Owor
Y29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICA9IDB4MDAwNTsKK2Nv
bnN0IEdMZW51bSBUUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgPSAweDAwMDY7CisKKy8q
IEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi8KKy8qICAgICAgTkVWRVIg
Ki8KKy8qICAgICAgTEVTUyAqLworLyogICAgICBFUVVBTCAqLworLyogICAgICBMRVFVQUwgKi8K
Ky8qICAgICAgR1JFQVRFUiAqLworLyogICAgICBOT1RFUVVBTCAqLworLyogICAgICBHRVFVQUwg
Ki8KKy8qICAgICAgQUxXQVlTICovCisKKy8qIEJsZW5kaW5nRmFjdG9yRGVzdCAqLworY29uc3Qg
R0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Citjb25zdCBHTGVudW0g
T05FICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTsKK2NvbnN0IEdMZW51bSBTUkNfQ09M
T1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDA7Citjb25zdCBHTGVudW0gT05FX01JTlVT
X1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOworY29uc3QgR0xlbnVtIFNSQ19BTFBIQSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMjsKK2NvbnN0IEdMZW51bSBPTkVfTUlOVVNfU1JD
X0FMUEhBICAgICAgICAgICAgPSAweDAzMDM7Citjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwMzA0OworY29uc3QgR0xlbnVtIE9ORV9NSU5VU19EU1RfQUxQ
SEEgICAgICAgICAgICA9IDB4MDMwNTsKKworLyogQmxlbmRpbmdGYWN0b3JTcmMgKi8KKy8qICAg
ICAgWkVSTyAqLworLyogICAgICBPTkUgKi8KK2NvbnN0IEdMZW51bSBEU1RfQ09MT1IgICAgICAg
ICAgICAgICAgICAgICAgPSAweDAzMDY7Citjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xP
UiAgICAgICAgICAgID0gMHgwMzA3OworY29uc3QgR0xlbnVtIFNSQ19BTFBIQV9TQVRVUkFURSAg
ICAgICAgICAgICA9IDB4MDMwODsKKy8qICAgICAgU1JDX0FMUEhBICovCisvKiAgICAgIE9ORV9N
SU5VU19TUkNfQUxQSEEgKi8KKy8qICAgICAgRFNUX0FMUEhBICovCisvKiAgICAgIE9ORV9NSU5V
U19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovCitjb25zdCBHTGVu
dW0gRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA2OworY29uc3QgR0xlbnVt
IEJMRU5EX0VRVUFUSU9OICAgICAgICAgICAgICAgICA9IDB4ODAwOTsKK2NvbnN0IEdMZW51bSBC
TEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVO
RF9FUVVBVElPTiAqLworY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAg
ICA9IDB4ODgzRDsKKworLyogQmxlbmRTdWJ0cmFjdCAqLworY29uc3QgR0xlbnVtIEZVTkNfU1VC
VFJBQ1QgICAgICAgICAgICAgICAgICA9IDB4ODAwQTsKK2NvbnN0IEdMZW51bSBGVU5DX1JFVkVS
U0VfU1VCVFJBQ1QgICAgICAgICAgPSAweDgwMEI7CisKKy8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0
aW9ucyAqLworY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9IDB4
ODBDODsKK2NvbnN0IEdMZW51bSBCTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgPSAweDgw
Qzk7Citjb25zdCBHTGVudW0gQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgID0gMHg4MENB
OworY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAgICAgICA9IDB4ODBDQjsK
K2NvbnN0IEdMZW51bSBDT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgPSAweDgwMDE7Citj
b25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgID0gMHg4MDAyOworY29u
c3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAgICAgICAgICAgICA9IDB4ODAwMzsKK2NvbnN0
IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgPSAweDgwMDQ7Citjb25zdCBH
TGVudW0gQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgID0gMHg4MDA1OworCisvKiBCdWZm
ZXIgT2JqZWN0cyAqLworY29uc3QgR0xlbnVtIEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAg
ICA9IDB4ODg5MjsKK2NvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAg
PSAweDg4OTM7Citjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0g
MHg4ODk0OworY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA9IDB4
ODg5NTsKKworY29uc3QgR0xlbnVtIFNUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAgICA9IDB4
ODhFMDsKK2NvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgPSAweDg4
RTQ7Citjb25zdCBHTGVudW0gRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgID0gMHg4OEU4
OworCitjb25zdCBHTGVudW0gQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgID0gMHg4NzY0
OworY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICA9IDB4ODc2NTsK
KworY29uc3QgR0xlbnVtIENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA9IDB4ODYyNjsK
KworLyogQ3VsbEZhY2VNb2RlICovCitjb25zdCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgwNDA0OworY29uc3QgR0xlbnVtIEJBQ0sgICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDQwNTsKK2NvbnN0IEdMZW51bSBGUk9OVF9BTkRfQkFDSyAgICAgICAgICAg
ICAgICAgPSAweDA0MDg7CisKKy8qIERlcHRoRnVuY3Rpb24gKi8KKy8qICAgICAgTkVWRVIgKi8K
Ky8qICAgICAgTEVTUyAqLworLyogICAgICBFUVVBTCAqLworLyogICAgICBMRVFVQUwgKi8KKy8q
ICAgICAgR1JFQVRFUiAqLworLyogICAgICBOT1RFUVVBTCAqLworLyogICAgICBHRVFVQUwgKi8K
Ky8qICAgICAgQUxXQVlTICovCisKKy8qIEVuYWJsZUNhcCAqLworY29uc3QgR0xlbnVtIFRFWFRV
UkVfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4MERFMTsKK2NvbnN0IEdMZW51bSBDVUxMX0ZB
Q0UgICAgICAgICAgICAgICAgICAgICAgPSAweDBCNDQ7Citjb25zdCBHTGVudW0gQkxFTkQgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkUyOworY29uc3QgR0xlbnVtIERJVEhFUiAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MEJEMDsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX1RFU1Qg
ICAgICAgICAgICAgICAgICAgPSAweDBCOTA7Citjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAg
ICAgICAgICAgICAgICAgID0gMHgwQjcxOworY29uc3QgR0xlbnVtIFNDSVNTT1JfVEVTVCAgICAg
ICAgICAgICAgICAgICA9IDB4MEMxMTsKK2NvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9GSUxM
ICAgICAgICAgICAgPSAweDgwMzc7Citjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFICAgICAgID0gMHg4MDlFOworY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRSAgICAgICAg
ICAgICAgICA9IDB4ODBBMDsKKworLyogRXJyb3JDb2RlICovCitjb25zdCBHTGVudW0gTk9fRVJS
T1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKK2NvbnN0IEdMZW51bSBJTlZBTElEX0VOVU0g
ICAgICAgICAgICAgICAgICAgPSAweDA1MDA7Citjb25zdCBHTGVudW0gSU5WQUxJRF9WQUxVRSAg
ICAgICAgICAgICAgICAgID0gMHgwNTAxOworY29uc3QgR0xlbnVtIElOVkFMSURfT1BFUkFUSU9O
ICAgICAgICAgICAgICA9IDB4MDUwMjsKK2NvbnN0IEdMZW51bSBPVVRfT0ZfTUVNT1JZICAgICAg
ICAgICAgICAgICAgPSAweDA1MDU7CisKKy8qIEZyb250RmFjZURpcmVjdGlvbiAqLworY29uc3Qg
R0xlbnVtIENXICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKK2NvbnN0IEdM
ZW51bSBDQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA5MDE7CisKKy8qIEdldFBO
YW1lICovCitjb25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgw
QjIxOworY29uc3QgR0xlbnVtIEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA9IDB4ODQ2
RDsKK2NvbnN0IEdMZW51bSBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgPSAweDg0NkU7
Citjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1Owor
Y29uc3QgR0xlbnVtIEZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICA9IDB4MEI0NjsKK2Nv
bnN0IEdMZW51bSBERVBUSF9SQU5HRSAgICAgICAgICAgICAgICAgICAgPSAweDBCNzA7Citjb25z
dCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0gMHgwQjcyOworY29uc3Qg
R0xlbnVtIERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4MEI3MzsKK2NvbnN0IEdM
ZW51bSBERVBUSF9GVU5DICAgICAgICAgICAgICAgICAgICAgPSAweDBCNzQ7Citjb25zdCBHTGVu
dW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgID0gMHgwQjkxOworY29uc3QgR0xlbnVt
IFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA9IDB4MEI5MjsKK2NvbnN0IEdMZW51bSBT
VEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgPSAweDBCOTQ7Citjb25zdCBHTGVudW0gU1RF
TkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgID0gMHgwQjk1OworY29uc3QgR0xlbnVtIFNURU5D
SUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA9IDB4MEI5NjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lM
X1JFRiAgICAgICAgICAgICAgICAgICAgPSAweDBCOTc7Citjb25zdCBHTGVudW0gU1RFTkNJTF9W
QUxVRV9NQVNLICAgICAgICAgICAgID0gMHgwQjkzOworY29uc3QgR0xlbnVtIFNURU5DSUxfV1JJ
VEVNQVNLICAgICAgICAgICAgICA9IDB4MEI5ODsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tf
RlVOQyAgICAgICAgICAgICAgPSAweDg4MDA7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZB
SUwgICAgICAgICAgICAgID0gMHg4ODAxOworY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19QQVNT
X0RFUFRIX0ZBSUwgICA9IDB4ODgwMjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19E
RVBUSF9QQVNTICAgPSAweDg4MDM7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1JFRiAgICAg
ICAgICAgICAgID0gMHg4Q0EzOworY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19WQUxVRV9NQVNL
ICAgICAgICA9IDB4OENBNDsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAg
ICAgICAgPSAweDhDQTU7Citjb25zdCBHTGVudW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwQkEyOworY29uc3QgR0xlbnVtIFNDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAg
ICA9IDB4MEMxMDsKKy8qICAgICAgU0NJU1NPUl9URVNUICovCitjb25zdCBHTGVudW0gQ09MT1Jf
Q0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQzIyOworY29uc3QgR0xlbnVtIENPTE9SX1dS
SVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEMyMzsKK2NvbnN0IEdMZW51bSBVTlBBQ0tfQUxJ
R05NRU5UICAgICAgICAgICAgICAgPSAweDBDRjU7Citjb25zdCBHTGVudW0gUEFDS19BTElHTk1F
TlQgICAgICAgICAgICAgICAgID0gMHgwRDA1OworY29uc3QgR0xlbnVtIE1BWF9URVhUVVJFX1NJ
WkUgICAgICAgICAgICAgICA9IDB4MEQzMzsKK2NvbnN0IEdMZW51bSBNQVhfVklFV1BPUlRfRElN
UyAgICAgICAgICAgICAgPSAweDBEM0E7Citjb25zdCBHTGVudW0gU1VCUElYRUxfQklUUyAgICAg
ICAgICAgICAgICAgID0gMHgwRDUwOworY29uc3QgR0xlbnVtIFJFRF9CSVRTICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEQ1MjsKK2NvbnN0IEdMZW51bSBHUkVFTl9CSVRTICAgICAgICAgICAg
ICAgICAgICAgPSAweDBENTM7Citjb25zdCBHTGVudW0gQkxVRV9CSVRTICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwRDU0OworY29uc3QgR0xlbnVtIEFMUEhBX0JJVFMgICAgICAgICAgICAgICAg
ICAgICA9IDB4MEQ1NTsKK2NvbnN0IEdMZW51bSBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAg
ICAgPSAweDBENTY7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAg
ID0gMHgwRDU3OworY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICA9
IDB4MkEwMDsKKy8qICAgICAgUE9MWUdPTl9PRkZTRVRfRklMTCAqLworY29uc3QgR0xlbnVtIFBP
TFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKK2NvbnN0IEdMZW51bSBURVhU
VVJFX0JJTkRJTkdfMkQgICAgICAgICAgICAgPSAweDgwNjk7Citjb25zdCBHTGVudW0gU0FNUExF
X0JVRkZFUlMgICAgICAgICAgICAgICAgID0gMHg4MEE4OworY29uc3QgR0xlbnVtIFNBTVBMRVMg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKK2NvbnN0IEdMZW51bSBTQU1QTEVfQ09W
RVJBR0VfVkFMVUUgICAgICAgICAgPSAweDgwQUE7Citjb25zdCBHTGVudW0gU0FNUExFX0NPVkVS
QUdFX0lOVkVSVCAgICAgICAgID0gMHg4MEFCOworCisvKiBHZXRUZXh0dXJlUGFyYW1ldGVyICov
CisvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqLworLyogICAgICBURVhUVVJFX01JTl9GSUxU
RVIgKi8KKy8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8KKy8qICAgICAgVEVYVFVSRV9XUkFQX1Qg
Ki8KKworY29uc3QgR0xlbnVtIENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA9IDB4ODZB
MzsKKworLyogSGludE1vZGUgKi8KK2NvbnN0IEdMZW51bSBET05UX0NBUkUgICAgICAgICAgICAg
ICAgICAgICAgPSAweDExMDA7Citjb25zdCBHTGVudW0gRkFTVEVTVCAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxMTAxOworY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTEwMjsKKworLyogSGludFRhcmdldCAqLworY29uc3QgR0xlbnVtIEdFTkVSQVRF
X01JUE1BUF9ISU5UICAgICAgICAgICAgPSAweDgxOTI7CisKKy8qIERhdGFUeXBlICovCitjb25z
dCBHTGVudW0gQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAwOworY29uc3Qg
R0xlbnVtIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA9IDB4MTQwMTsKK2NvbnN0IEdM
ZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDI7Citjb25zdCBHTGVu
dW0gVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgID0gMHgxNDAzOworY29uc3QgR0xlbnVt
IElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwNDsKK2NvbnN0IEdMZW51bSBV
TlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgPSAweDE0MDU7Citjb25zdCBHTGVudW0gRkxP
QVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA2OworCisvKiBQaXhlbEZvcm1hdCAq
LworY29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsK
K2NvbnN0IEdMZW51bSBBTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDY7Citj
b25zdCBHTGVudW0gUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA3OworY29u
c3QgR0xlbnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKK2NvbnN0
IEdMZW51bSBMVU1JTkFOQ0UgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDk7Citjb25zdCBH
TGVudW0gTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAgICAgID0gMHgxOTBBOworCisvKiBQaXhl
bFR5cGUgKi8KKy8qICAgICAgVU5TSUdORURfQllURSAqLworY29uc3QgR0xlbnVtIFVOU0lHTkVE
X1NIT1JUXzRfNF80XzQgICAgICAgICA9IDB4ODAzMzsKK2NvbnN0IEdMZW51bSBVTlNJR05FRF9T
SE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7Citjb25zdCBHTGVudW0gVU5TSUdORURfU0hP
UlRfNV82XzUgICAgICAgICAgID0gMHg4MzYzOworCisvKiBTaGFkZXJzICovCitjb25zdCBHTGVu
dW0gRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAgICAgPSAweDhCMzA7Citjb25zdCBHTGVu
dW0gVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAgICAgPSAweDhCMzE7Citjb25zdCBHTGVu
dW0gTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAgICAgPSAweDg4Njk7Citjb25zdCBHTGVu
dW0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7Citjb25zdCBHTGVu
dW0gTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAgICAgPSAweDhERkM7Citjb25zdCBHTGVu
dW0gTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDhCNEQ7Citjb25zdCBHTGVu
dW0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7Citjb25zdCBHTGVu
dW0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgPSAweDg4NzI7Citjb25zdCBHTGVu
dW0gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgPSAweDhERkQ7Citjb25zdCBHTGVu
dW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7Citjb25zdCBHTGVu
dW0gREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgPSAweDhCODA7Citjb25zdCBHTGVu
dW0gTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCODI7Citjb25zdCBHTGVu
dW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgPSAweDhCODM7Citjb25zdCBHTGVu
dW0gQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgPSAweDhCODU7Citjb25zdCBHTGVu
dW0gQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgICAgPSAweDhCODY7Citjb25zdCBHTGVu
dW0gQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgICAgPSAweDhCODk7Citjb25zdCBHTGVu
dW0gU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgPSAweDhCOEM7Citjb25zdCBHTGVu
dW0gQ1VSUkVOVF9QUk9HUkFNICAgICAgICAgICAgICAgICAgPSAweDhCOEQ7CisKKy8qIFN0ZW5j
aWxGdW5jdGlvbiAqLworY29uc3QgR0xlbnVtIE5FVkVSICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwMDsKK2NvbnN0IEdMZW51bSBMRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDAyMDE7Citjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMjAyOworY29uc3QgR0xlbnVtIExFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDIwMzsKK2NvbnN0IEdMZW51bSBHUkVBVEVSICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAy
MDQ7Citjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjA1
OworY29uc3QgR0xlbnVtIEdFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNjsK
K2NvbnN0IEdMZW51bSBBTFdBWVMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDc7CisK
Ky8qIFN0ZW5jaWxPcCAqLworLyogICAgICBaRVJPICovCitjb25zdCBHTGVudW0gS0VFUCAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAwOworY29uc3QgR0xlbnVtIFJFUExBQ0UgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMTsKK2NvbnN0IEdMZW51bSBJTkNSICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDFFMDI7Citjb25zdCBHTGVudW0gREVDUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgxRTAzOworY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MTUwQTsKK2NvbnN0IEdMZW51bSBJTkNSX1dSQVAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg1MDc7Citjb25zdCBHTGVudW0gREVDUl9XUkFQICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NTA4OworCisvKiBTdHJpbmdOYW1lICovCitjb25zdCBHTGVudW0gVkVO
RE9SICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAwOworY29uc3QgR0xlbnVtIFJFTkRF
UkVSICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMTsKK2NvbnN0IEdMZW51bSBWRVJTSU9O
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7CisKKy8qIFRleHR1cmVNYWdGaWx0ZXIg
Ki8KK2NvbnN0IEdMZW51bSBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI2MDA7
Citjb25zdCBHTGVudW0gTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNjAxOwor
CisvKiBUZXh0dXJlTWluRmlsdGVyICovCisvKiAgICAgIE5FQVJFU1QgKi8KKy8qICAgICAgTElO
RUFSICovCitjb25zdCBHTGVudW0gTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgID0gMHgy
NzAwOworY29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICA9IDB4Mjcw
MTsKK2NvbnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7
Citjb25zdCBHTGVudW0gTElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgID0gMHgyNzAzOwor
CisvKiBUZXh0dXJlUGFyYW1ldGVyTmFtZSAqLworY29uc3QgR0xlbnVtIFRFWFRVUkVfTUFHX0ZJ
TFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKK2NvbnN0IEdMZW51bSBURVhUVVJFX01JTl9GSUxU
RVIgICAgICAgICAgICAgPSAweDI4MDE7Citjb25zdCBHTGVudW0gVEVYVFVSRV9XUkFQX1MgICAg
ICAgICAgICAgICAgID0gMHgyODAyOworY29uc3QgR0xlbnVtIFRFWFRVUkVfV1JBUF9UICAgICAg
ICAgICAgICAgICA9IDB4MjgwMzsKKworLyogVGV4dHVyZVRhcmdldCAqLworLyogICAgICBURVhU
VVJFXzJEICovCitjb25zdCBHTGVudW0gVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxNzAyOworCitjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUCAgICAgICAgICAgICAgID0g
MHg4NTEzOworY29uc3QgR0xlbnVtIFRFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICA9IDB4
ODUxNDsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1
MTU7Citjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YICAgID0gMHg4NTE2
OworY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICA9IDB4ODUxNzsK
K2NvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7Citj
b25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgID0gMHg4NTE5OworY29u
c3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA9IDB4ODUxQTsKK2NvbnN0
IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7CisKKy8qIFRl
eHR1cmVVbml0ICovCitjb25zdCBHTGVudW0gVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEMwOworY29uc3QgR0xlbnVtIFRFWFRVUkUxICAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODRDMTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0QzI7Citjb25zdCBHTGVudW0gVEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEMzOworY29uc3QgR0xlbnVtIFRFWFRVUkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRD
NDsKK2NvbnN0IEdMZW51bSBURVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzU7
Citjb25zdCBHTGVudW0gVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM2Owor
Y29uc3QgR0xlbnVtIFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKK2Nv
bnN0IEdMZW51bSBURVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzg7Citjb25z
dCBHTGVudW0gVEVYVFVSRTkgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM5OworY29uc3Qg
R0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKK2NvbnN0IEdM
ZW51bSBURVhUVVJFMTEgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0I7Citjb25zdCBHTGVu
dW0gVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENDOworY29uc3QgR0xlbnVt
IFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRDsKK2NvbnN0IEdMZW51bSBU
RVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0U7Citjb25zdCBHTGVudW0gVEVY
VFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENGOworY29uc3QgR0xlbnVtIFRFWFRV
UkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMDsKK2NvbnN0IEdMZW51bSBURVhUVVJF
MTcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDE7Citjb25zdCBHTGVudW0gVEVYVFVSRTE4
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQyOworY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODREMzsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0RDQ7Citjb25zdCBHTGVudW0gVEVYVFVSRTIxICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NEQ1OworY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODRENjsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjMgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0RDc7Citjb25zdCBHTGVudW0gVEVYVFVSRTI0ICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NEQ4OworY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAgICAg
ICAgICAgICA9IDB4ODREOTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjYgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0REE7Citjb25zdCBHTGVudW0gVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NERCOworY29uc3QgR0xlbnVtIFRFWFRVUkUyOCAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODREQzsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0REQ7Citjb25zdCBHTGVudW0gVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NERFOworY29uc3QgR0xlbnVtIFRFWFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODRERjsKK2NvbnN0IEdMZW51bSBBQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAgPSAweDg0
RTA7CisKKy8qIFRleHR1cmVXcmFwTW9kZSAqLworY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MjkwMTsKK2NvbnN0IEdMZW51bSBDTEFNUF9UT19FREdFICAg
ICAgICAgICAgICAgICAgPSAweDgxMkY7Citjb25zdCBHTGVudW0gTUlSUk9SRURfUkVQRUFUICAg
ICAgICAgICAgICAgID0gMHg4MzcwOworCisvKiBVbmlmb3JtIFR5cGVzICovCitjb25zdCBHTGVu
dW0gRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUwOworY29uc3QgR0xlbnVt
IEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MTsKK2NvbnN0IEdMZW51bSBG
TE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7Citjb25zdCBHTGVudW0gSU5U
X1ZFQzIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUzOworY29uc3QgR0xlbnVtIElOVF9W
RUMzICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NDsKK2NvbnN0IEdMZW51bSBJTlRfVkVD
NCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7Citjb25zdCBHTGVudW0gQk9PTCAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU2OworY29uc3QgR0xlbnVtIEJPT0xfVkVDMiAg
ICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NzsKK2NvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhCNTg7Citjb25zdCBHTGVudW0gQk9PTF9WRUM0ICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4QjU5OworY29uc3QgR0xlbnVtIEZMT0FUX01BVDIgICAgICAg
ICAgICAgICAgICAgICA9IDB4OEI1QTsKK2NvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAg
ICAgICAgICAgICAgPSAweDhCNUI7Citjb25zdCBHTGVudW0gRkxPQVRfTUFUNCAgICAgICAgICAg
ICAgICAgICAgID0gMHg4QjVDOworY29uc3QgR0xlbnVtIFNBTVBMRVJfMkQgICAgICAgICAgICAg
ICAgICAgICA9IDB4OEI1RTsKK2NvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAg
ICAgICAgPSAweDhCNjA7CisKKy8qIFZlcnRleCBBcnJheXMgKi8KK2NvbnN0IEdMZW51bSBWRVJU
RVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgID0gMHg4NjIyOworY29uc3QgR0xlbnVtIFZF
UlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2MjM7Citjb25zdCBHTGVudW0g
VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICA9IDB4ODYyNDsKK2NvbnN0IEdMZW51
bSBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgID0gMHg4NjI1OworY29uc3QgR0xl
bnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCAgICAgPSAweDg4NkE7Citjb25zdCBH
TGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICA9IDB4ODY0NTsKK2NvbnN0
IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HID0gMHg4ODlGOworCisv
KiBTaGFkZXIgU291cmNlICovCitjb25zdCBHTGVudW0gQ09NUElMRV9TVEFUVVMgICAgICAgICAg
ICAgICAgID0gMHg4QjgxOworCisvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAq
LworY29uc3QgR0xlbnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsK
K2NvbnN0IEdMZW51bSBNRURJVU1fRkxPQVQgICAgICAgICAgICAgICAgICAgPSAweDhERjE7Citj
b25zdCBHTGVudW0gSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REYyOworY29u
c3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKK2NvbnN0
IEdMZW51bSBNRURJVU1fSU5UICAgICAgICAgICAgICAgICAgICAgPSAweDhERjQ7Citjb25zdCBH
TGVudW0gSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REY1OworCisvKiBGcmFt
ZWJ1ZmZlciBPYmplY3QuICovCitjb25zdCBHTGVudW0gRlJBTUVCVUZGRVIgICAgICAgICAgICAg
ICAgICAgID0gMHg4RDQwOworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAg
ICAgICA9IDB4OEQ0MTsKKworY29uc3QgR0xlbnVtIFJHQkE0ICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODA1NjsKK2NvbnN0IEdMZW51bSBSR0I1X0ExICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDgwNTc7Citjb25zdCBHTGVudW0gUkdCNTY1ICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4RDYyOworY29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9
IDB4ODFBNTsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0lOREVYICAgICAgICAgICAgICAgICAgPSAw
eDE5MDE7Citjb25zdCBHTGVudW0gU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAgICAgID0gMHg4
RDQ4OworY29uc3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRG
OTsKKworY29uc3QgR0xlbnVtIFNSR0JfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4QzQwOworY29uc3QgR0xlbnVtIFNSR0JfQUxQSEFfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4QzQyOworY29uc3QgR0xlbnVtIFNSR0I4X0FMUEhBOF9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQzOworY29uc3QgR0xlbnVtIEZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUICAgID0gMHg4MjEwOworCitj
b25zdCBHTGVudW0gTUlOX0VYVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA3OworY29u
c3QgR0xlbnVtIE1BWF9FWFQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODAwODsKKworY29u
c3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICA9IDB4OEQ0MjsKK2NvbnN0
IEdMZW51bSBSRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgPSAweDhENDM7Citjb25zdCBH
TGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgID0gMHg4RDQ0OworY29uc3QgR0xl
bnVtIFJFTkRFUkJVRkZFUl9SRURfU0laRSAgICAgICAgICA9IDB4OEQ1MDsKK2NvbnN0IEdMZW51
bSBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgPSAweDhENTE7Citjb25zdCBHTGVudW0g
UkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgID0gMHg4RDUyOworY29uc3QgR0xlbnVtIFJF
TkRFUkJVRkZFUl9BTFBIQV9TSVpFICAgICAgICA9IDB4OEQ1MzsKK2NvbnN0IEdMZW51bSBSRU5E
RVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgPSAweDhENTQ7Citjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSX1NURU5DSUxfU0laRSAgICAgID0gMHg4RDU1OworCitjb25zdCBHTGVudW0gRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgPSAweDhDRDA7Citjb25zdCBH
TGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgPSAweDhD
RDE7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAg
ICAgICAgPSAweDhDRDI7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhU
VVJFX0NVQkVfTUFQX0ZBQ0UgPSAweDhDRDM7CisKK2NvbnN0IEdMZW51bSBDT0xPUl9BVFRBQ0hN
RU5UMCAgICAgICAgICAgICAgPSAweDhDRTA7Citjb25zdCBHTGVudW0gREVQVEhfQVRUQUNITUVO
VCAgICAgICAgICAgICAgID0gMHg4RDAwOworY29uc3QgR0xlbnVtIFNURU5DSUxfQVRUQUNITUVO
VCAgICAgICAgICAgICA9IDB4OEQyMDsKK2NvbnN0IEdMZW51bSBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQgICAgICAgPSAweDgyMUE7CisKK2NvbnN0IEdMZW51bSBOT05FICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAwOworCitjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQ09NUExFVEUgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhDRDU7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgPSAweDhDRDY7Citjb25zdCBHTGVudW0gRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7Citjb25zdCBHTGVu
dW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TICAgICAgICAgPSAweDhDRDk7Citj
b25zdCBHTGVudW0gRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAw
eDhDREQ7CisKK2NvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAw
eDhDQTY7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4
Q0E3OworY29uc3QgR0xlbnVtIE1BWF9SRU5ERVJCVUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRF
ODsKKworY29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUw
NjsKKworLyogV2ViR0wtc3BlY2lmaWMgZW51bXMgKi8KK2NvbnN0IEdMZW51bSBVTlBBQ0tfRkxJ
UF9ZX1dFQkdMICAgICAgICAgICAgICAgID0gMHg5MjQwOworY29uc3QgR0xlbnVtIFVOUEFDS19Q
UkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7Citjb25zdCBHTGVudW0gQ09OVEVY
VF9MT1NUX1dFQkdMICAgICAgICAgICAgICAgICA9IDB4OTI0MjsKK2NvbnN0IEdMZW51bSBVTlBB
Q0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzOworY29uc3QgR0xlbnVtIEJS
T1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICAgICAgPSAweDkyNDQ7CisKK3JlYWRvbmx5IGF0
dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJXaWR0aDsKK3JlYWRvbmx5IGF0dHJpYnV0ZSBH
THNpemVpIGRyYXdpbmdCdWZmZXJIZWlnaHQ7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYXR0YWNo
U2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOworW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEF0dHJpYkxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIERPTVN0cmluZyBuYW1l
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJp
bmRCdWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihH
TGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdM
ZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBibGVuZENvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdM
Y2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICBibGVuZEVxdWF0aW9uKEdMZW51bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51
bSBtb2RlQWxwaGEpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVu
YyhHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpOworW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGJsZW5kRnVuY1NlcGFyYXRlKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RS
R0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdl
dCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdMZW51bSB1c2FnZSk7CitbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJEYXRhKEdMZW51bSB0YXJnZXQs
IEFycmF5QnVmZmVyVmlldz8gZGF0YSwgR0xlbnVtIHVzYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNhZ2UpOworW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0
LCBHTGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVyPyBkYXRhKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRh
cmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEpOworCitbU3RyaWN0
VHlwZUNoZWNraW5nXSBHTGVudW0gICAgICAgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0g
dGFyZ2V0KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZp
ZWxkIG1hc2spOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyQ29sb3Io
R0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxw
aGEpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoR0xjbGFt
cGYgZGVwdGgpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNp
bChHTGludCBzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb2xvck1hc2so
R0xib29sZWFuIHJlZCwgR0xib29sZWFuIGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFu
IGFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKKworW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCitHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7CitbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCitHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3IGRh
dGEpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29weVRleEltYWdlMkQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7
CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29weVRleFN1YkltYWdlMkQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworW1N0cmlj
dFR5cGVDaGVja2luZ10gV2ViR0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSBXZWJHTEZyYW1lYnVmZmVyIGNyZWF0ZUZyYW1lYnVmZmVyKCk7CitbU3RyaWN0VHlw
ZUNoZWNraW5nXSBXZWJHTFByb2dyYW0gY3JlYXRlUHJvZ3JhbSgpOworW1N0cmljdFR5cGVDaGVj
a2luZ10gV2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CitbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyIGNyZWF0ZVNoYWRlcihHTGVu
dW0gdHlwZSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVy
ZSgpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2UoR0xlbnVt
IG1vZGUpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVy
KFdlYkdMQnVmZmVyIGJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CitbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJv
Z3JhbSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUmVuZGVyYnVm
ZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7CitbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4
dHVyZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZXB0aEZ1bmMoR0xl
bnVtIGZ1bmMpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoTWFzayhH
TGJvb2xlYW4gZmxhZyk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhS
YW5nZShHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcik7CitbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFt
IHByb2dyYW0sIFdlYkdMU2hhZGVyIHNoYWRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgZGlzYWJsZShHTGVudW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQg
aW5kZXgpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0Vs
ZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgR0xpbnRwdHIg
b2Zmc2V0KTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGVuYWJsZShHTGVu
dW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZmluaXNoKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgZmx1c2goKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMZW51
bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZl
ciByZW5kZXJidWZmZXIpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0
dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlLCBHTGludCBs
ZXZlbCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51
bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBnZW5lcmF0ZU1pcG1h
cChHTGVudW0gdGFyZ2V0KTsKKworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBH
THVpbnQgaW5kZXgpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJH
TEFjdGl2ZUluZm8gZ2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50
IGluZGV4KTsKKworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKworW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bV0gYW55IGdldEJ1ZmZlclBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOwor
CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGdldENvbnRleHRB
dHRyaWJ1dGVzKCk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSBnZXRFcnJvcigpOwor
CisvLyBvYmplY3QgZ2V0RXh0ZW5zaW9uKERPTVN0cmluZyBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbV0gYW55IGdldEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7CisKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBH
TGVudW0gcG5hbWUpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIGFueSBnZXRQYXJhbWV0ZXIoR0xlbnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFBy
b2dyYW0gcHJvZ3JhbSwgR0xlbnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0
UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtIHByb2dyYW0pOworW1N0cmljdFR5cGVDaGVja2lu
ZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyIHNo
YWRlciwgR0xlbnVtIHBuYW1lKTsKKworW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5l
ZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFk
ZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQgZ2V0U2hhZGVyUHJlY2lz
aW9uRm9ybWF0KEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSk7CisKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2Vz
RXhjZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRl
cik7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5nPiBn
ZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwg
UmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VGV4UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51
bSBwbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSBhbnkgZ2V0VW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24pOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3Jh
bSwgRE9NU3RyaW5nIG5hbWUpOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gYW55IGdldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFt
ZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGhpbnQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworW1N0cmljdFR5
cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzQnVmZmVyKFdlYkdMQnVmZmVyIGJ1ZmZlcik7Citb
U3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNDb250ZXh0TG9zdCgpOworW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZm
ZXIgZnJhbWVidWZmZXIpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzUHJv
Z3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xl
YW4gICAgaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc1NoYWRlcihXZWJHTFNoYWRlciBzaGFk
ZXIpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzVGV4dHVyZShXZWJHTFRl
eHR1cmUgdGV4dHVyZSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgbGluZVdp
ZHRoKEdMZmxvYXQgd2lkdGgpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBpeGVsU3RvcmVpKEdMZW51bSBwbmFtZSwgR0xp
bnQgcGFyYW0pOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZz
ZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOworCitbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgQXJyYXlCdWZmZXJWaWV3IHBpeGVscyk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBH
TGJvb2xlYW4gaW52ZXJ0KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lz
c29yKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHNoYWRlclNv
dXJjZShXZWJHTFNoYWRlciBzaGFkZXIsIERPTVN0cmluZyBzdHJpbmcpOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYs
IEdMdWludCBtYXNrKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2ls
RnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQg
bWFzayk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE1hc2soR0x1
aW50IG1hc2spOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNr
U2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVt
IHpwYXNzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3BTZXBh
cmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNz
KTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmYoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSwgR0xpbnQgcGFyYW0pOworCisvLyBTdXBwb3J0ZWQgZm9ybXM6CitbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCAKK0dMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBJbWFnZURhdGE/IHBpeGVscyk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsCitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTElt
YWdlRWxlbWVudD8gaW1hZ2UpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsZm9ybWF0LAorR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52
YXNFbGVtZW50PyBjYW52YXMpOworI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVf
VklERU8KK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRl
byk7CisjZW5kaWYKKworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
CitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7
CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhT
dWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LAorR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/
IGltYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsCitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZh
c0VsZW1lbnQ/IGNhbnZhcyk7CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9W
SURFTworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
dGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVt
ZW50PyB2aWRlbyk7CisjZW5kaWYKKworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkIHVuaWZvcm0xZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9h
dCB4KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWko
V2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgpOworW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFpdihXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9j
YXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24g
bG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdM
aW50IHgsIEdMaW50IHkpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50
MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1
bmlmb3JtM2YoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9h
dCB5LCBHTGZsb2F0IHopOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5IHYpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IHVuaWZvcm0zaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xpbnQgeik7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCB1bmlmb3JtM2l2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFy
cmF5IHYpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm00ZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHks
IEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCB1bmlmb3JtNGkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgs
IEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1N
YXRyaXgzZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIEZsb2F0MzJBcnJheSBhcnJheSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4NGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworCitb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9n
cmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3Jh
bSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihH
THVpbnQgaW5keCwgR0xmbG9hdCB4KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9p
ZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjJmKEdMdWludCBpbmR4
LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZv
aWQgdmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CitbU3RyaWN0VHlwZUNoZWNraW5n
LCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkg
dmFsdWVzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0
ZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1
aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5k
eCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCAKK0dMc2l6
ZWkgc3RyaWRlLCBHTGludHB0ciBvZmZzZXQpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5jcHAJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE2IEBACiAjaW5j
bHVkZSAiV2ViR0xTaGFkZXIuaCIKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0j
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2Vi
R0xTaGFkZXI+IFdlYkdMU2hhZGVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgs
IEdDM0RlbnVtIHR5cGUpCitQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFNoYWRlcjo6Y3Jl
YXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCwgR0MzRGVudW0gdHlwZSkKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMU2hhZGVyKGN0eCwgdHlwZSkpOwogfQogCi1XZWJH
TFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIEdDM0RlbnVt
IHR5cGUpCitXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY3R4LCBHQzNEZW51bSB0eXBlKQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAg
ICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3NvdXJjZSgiIikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNyBAQCBjbGFzcyBXZWJHTFNoYWRlciBmaW5hbCA6IHB1YmxpYyBXZWJHTFNoCiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+V2ViR0xTaGFkZXIoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgR0MzRGVudW0pOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSosIEdDM0RlbnVtKTsKIAogICAgIEdDM0RlbnVtIGdldFR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBTdHJpbmcmIGdldFNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlOyB9CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZh
bGlkKGJvb2wgdmFsaWQpIHsgbV9pc1ZhbGlkID0gdmFsaWQ7IH0KIAogcHJpdmF0ZToKLSAgICBX
ZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBHQzNEZW51bSk7CisgICAgV2ViR0xT
aGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSosIEdDM0RlbnVtKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2hhcmVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFNoYXJlZE9iamVjdC5jcHAJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTEgKzMwLDExIEBACiAjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogI2luY2x1
ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVdlYkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTFNoYXJlZE9iamVjdDo6V2ViR0xTaGFyZWRP
YmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMT2Jq
ZWN0KGNvbnRleHQpLAogICAgICAgbV9jb250ZXh0R3JvdXAoY29udGV4dC0+Y29udGV4dEdyb3Vw
KCkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVk
T2JqZWN0LmgJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhcmVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkdM
Q29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTsKIAogLy8gV2ViR0xTaGFyZWRPYmplY3QgdGhlIGJhc2UgY2xh
c3MgZm9yIG9iamVjdHMgdGhhdCBjYW4gYmUgc2hhcmVkIGJ5IG11bHRpcGxlCiAvLyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRzLgpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzU2hhZGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB2
YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwLCBjb25zdCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKSBjb25zdCBvdmVycmlkZQorICAgIHZpcnR1YWwgYm9vbCB2YWxp
ZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwLCBjb25zdCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKikgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVy
biBjb250ZXh0R3JvdXAgPT0gbV9jb250ZXh0R3JvdXA7CiAgICAgfQpAQCAtNTYsNyArNTYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2hDb250ZXh0R3JvdXAoKTsKIAogcHJvdGVjdGVkOgot
ICAgIFdlYkdMU2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdM
U2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBoYXNHcm91cE9yQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiAxNzgz
NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwxNiArMzEsMTYgQEAKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdy
b3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xU
ZXh0dXJlOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdl
YkdMVGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY3R4KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xUZXh0dXJlKGN0eCkpOwog
fQogCi1XZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKK1dlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
IGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1fdGFyZ2V0KDApCiAg
ICAgLCBtX21pbkZpbHRlcihHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFS
KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHJldmlz
aW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
fldlYkdMVGV4dHVyZSgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBj
cmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
R0xUZXh0dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdm9p
ZCBzZXRUYXJnZXQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IG1heExldmVsKTsKICAgICB2b2lk
IHNldFBhcmFtZXRlcmkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwpAQCAtODIsNyAr
ODIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEdDM0RpbnQgY29tcHV0ZUxldmVsQ291bnQoR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKIAogcHJpdmF0ZToKLSAgICBXZWJHTFRl
eHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgV2ViR0xUZXh0dXJlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBs
KEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMuY3BwCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgog
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4
LCBWYW9UeXBlIHR5cGUpCitQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KiBjdHgsIFZhb1R5cGUgdHlwZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMoY3R4LCB0eXBlKSk7CiB9CiAKLVdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
dHgsIFZhb1R5cGUgdHlwZSkKK1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4LCBWYW9UeXBlIHR5
cGUpCiAgICAgOiBXZWJHTENvbnRleHRPYmplY3QoY3R4KQogICAgICwgbV90eXBlKHR5cGUpCiAg
ICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCShyZXZpc2lv
biAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgfldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKTsKIAotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHQqLCBWYW9UeXBlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSosIFZhb1R5
cGUpOwogICAgIAogICAgIC8vIENhY2hlZCB2YWx1ZXMgZm9yIHZlcnRleCBhdHRyaWIgcmFuZ2Ug
Y2hlY2tzCiAgICAgc3RydWN0IFZlcnRleEF0dHJpYlN0YXRlIHsKQEAgLTg5LDcgKzg5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwg
R0MzRHVpbnQgZGl2aXNvcik7CiAKIHByaXZhdGU6Ci0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBWYW9UeXBlKTsKKyAgICBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqLCBWYW9UeXBlKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZv
cm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAgICAgCg==
</data>
<flag name="review"
          id="269477"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244806</attachid>
            <date>2015-01-16 15:06:27 -0800</date>
            <delta_ts>2015-09-14 10:51:39 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>896872</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1NiBAQAorMjAxNS0wMS0xNiAgUm9nZXIg
Rm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkdMMjogU3VwcG9ydCB3
ZWJnbDIgY29udGV4dCBjcmVhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjQwOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUwMDIxNzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMg
Y292ZXJlZCBieSBleGlzdGluZyBLaHJvbm9zIHRlc3RzIGZvciBXZWJHTCAxLjAgY29uZm9ybWFu
Y2UuCisKKyAgICAgICAgQ3JlYXRlIGEgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSBjbGFzcyB0
aGF0IGV4dGVuZHMgdG8gYSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgYW5kIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuCisgICAgICAgIFJlcGxhY2UgYWxsIHByZXZpb3VzIGluc3RhbmNlcyBvZiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQgdXNhZ2VzIHdpdGggV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSB1
c2FnZXMgZm9yIG5vdy4KKyAgICAgICAgQXMgdGhlIGZpcnN0IHN0ZXAsIHRoZSBXZWJHTDEgYW5k
IFdlYkdMMiBjb250ZXh0cyB3aWxsIGhhdmUgdGhlIGV4YWN0IHNhbWUgZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1h
a2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRPYmplY3RQYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldEV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQYXJhbWV0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTdXBw
b3J0ZWRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0VGV4UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFZlcnRleEF0dHJpYik6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1ZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpmdW5jdGlvbkZvclVuaWZvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uZik6CisgICAgICAgIChXZWJDb3JlOjpkYXRhRnVu
Y3Rpb25pKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbk1hdHJpeCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJm
dik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZv
cm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3JlOjpKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmli
MWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVy
dGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmVydGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmdldE9iamVjdFBhcmFtZXRlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRFeHRlbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFVuaWZvcm0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0
b1ZlY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmdW5jdGlvbkZvclVuaWZvcm0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uZik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpkYXRhRnVuY3Rpb25pKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmRhdGFGdW5jdGlvbk1hdHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJp
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTNmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bU1hdHJpeDNmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjNmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliNGZ2KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRp
b24pOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRUluc3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5j
ZWRBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6QU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBv
cnRlZCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuaDoKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojppc1dlYkdMMSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojppc1dlYkdMMik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0OjppczNkKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9F
WFRCbGVuZE1pbk1heC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFWFRCbGVuZE1pbk1heDo6RVhU
QmxlbmRNaW5NYXgpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4Lmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvRVhURnJhZ0RlcHRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVYVEZyYWdEZXB0aDo6RVhURnJhZ0RlcHRoKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFRG
cmFnRGVwdGguaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVYVFNoYWRlclRleHR1cmVMT0Q6OkVYVFNoYWRlclRleHR1
cmVMT0QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaDoKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOjpFWFRUZXh0dXJlRmls
dGVyQW5pc290cm9waWMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVHNSR0IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RVhUc1JHQjo6RVhUc1JHQik6CisgICAgICAgICogaHRtbC9jYW52YXMvRVhU
c1JHQi5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU0VsZW1lbnRJbmRleFVpbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6T0VTRWxlbWVudEluZGV4VWludDo6T0VTRWxlbWVudEluZGV4VWlu
dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6T0VTU3RhbmRhcmREZXJpdmF0aXZlczo6T0VTU3RhbmRhcmREZXJpdmF0aXZlcyk6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPRVNU
ZXh0dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUZsb2F0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGlu
ZWFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1RleHR1cmVGbG9hdExpbmVhcjo6T0VTVGV4
dHVyZUZsb2F0TGluZWFyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRM
aW5lYXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok9FU1RleHR1cmVIYWxmRmxvYXQ6Ok9FU1RleHR1cmVIYWxmRmxv
YXQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI6Ok9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIu
aDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpPRVNWZXJ0ZXhBcnJheU9iamVjdDo6T0VTVmVydGV4QXJyYXlPYmplY3Qp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0Lmg6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29udGV4
dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDogQWRk
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZl
cjo6V2ViR0xCdWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6
OnN1cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZUFUQy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJU
Qy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6Oldl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVz
c2VkVGV4dHVyZVMzVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xD
b250ZXh0R3JvdXA6OmdldEFHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTENvbnRleHRHcm91cDo6YWRkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENv
bnRleHRHcm91cDo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRl
eHRHcm91cDo6bG9zZUNvbnRleHRHcm91cCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xD
b250ZXh0R3JvdXAuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRP
YmplY3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0Ojpjb250ZXh0KToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMRGVidWdSZW5kZXJlckluZm86OldlYkdMRGVidWdSZW5kZXJlckluZm8pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTERl
YnVnU2hhZGVyczo6V2ViR0xEZWJ1Z1NoYWRlcnMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMRGVidWdTaGFkZXJzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEZXB0aFRleHR1cmU6OldlYkdMRGVwdGhU
ZXh0dXJlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xEcmF3QnVmZmVyczo6V2ViR0xEcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xE
cmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEV4
dGVuc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEV4dGVuc2lvbjo6V2ViR0xFeHRl
bnNpb24pOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmg6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTEV4dGVuc2lvbjo6Y29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xG
cmFtZWJ1ZmZlcik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xMb3NlQ29udGV4dDo6V2ViR0xMb3NlQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTExvc2VDb250ZXh0Ojpsb3NlQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xMb3NlQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpXZWJHTE9iamVjdCk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVmZmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJidWZmZXI6OldlYkdMUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2s6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2s6On5XZWJHTFJlbmRlcmluZ0Nv
bnRleHRMb3N0Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s6OldlYkdMUmVuZGVyaW5nQ29udGV4dEVy
cm9yTWVzc2FnZUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0
RXJyb3JNZXNzYWdlQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3MpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphbGxvd1ByaXZpbGVn
ZWRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+V2ViR0xSZW5kZXJpbmdDb250ZXh0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVzdHJv
eUdyYXBoaWNzQ29udGV4dDNEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJJZkNvbXBvc2l0ZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVB
ZnRlckNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWFya0xheWVyQ29tcG9zaXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdo
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNp
emVJbkJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YWN0aXZlVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRyaWJMb2NhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJv
dW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmluZEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kQ29sb3IpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmxlbmRFcXVhdGlvblNlcGFyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0
YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckRlcHRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNo
YWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNvbXByZXNzZWRUZXhJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVNldHRhYmxlVGV4
Rm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleEltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
VGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjdWxsRmFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZU9iamVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVNoYWRlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZXB0aEZ1bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkZXB0aE1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
SW5kZXhBcnJheVByZWNpc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVEcmF3QXJyYXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZHJhd0FycmF5cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpmbHVzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmcm9udEZh
Y2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZW5lcmF0ZU1pcG1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVuaWZvcm0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRy
aWJMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldENvbnRleHRBdHRyaWJ1dGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXJyb3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJv
Z3JhbUluZm9Mb2cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZv
TG9nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRl
eFBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFVuaWZvcm0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpoaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aXNCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppc0NvbnRleHRMb3N0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdE9yUGVuZGluZyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1By
b2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppc1JlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmlzU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBvbHlnb25PZmZz
ZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZWFkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3Nv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNo
YWRlclNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnN0ZW5jaWxGdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0
ZW5jaWxPcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnN0ZW5jaWxPcFNlcGFyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuYyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkcmF3SW1hZ2VJbnRvQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJmKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFy
YW1ldGVyaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleFN1YkltYWdlMkRCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFm
dik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0xaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0xaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMmYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
M2kpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtM2l2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTRmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTRmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJp
eDNmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm1NYXRyaXg0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFtKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWYpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIx
ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWIyZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
NGYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWI0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250ZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHRJ
bXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Zm9yY2VSZXN0b3JlQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVTaGFyZWRPYmplY3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRTaGFyZWRPYmplY3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1v
dmVDb250ZXh0T2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6YWRkQ29udGV4dE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYXNQZW5kaW5n
QWN0aXZpdHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzdG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0Qm9vbGVhblBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5BcnJheVBhcmFtZXRlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZsb2F0UGFyYW1l
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0SW50UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRmFsbGJhY2tC
bGFja1RleHR1cmVzMXgxKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxp
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJh
bWVidWZmZXJIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVMb2NhdGlvbkxlbmd0aCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
U2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVs
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVUZXhGdW5jUGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0RhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhG
b3JtYXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lv
bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVEcmF3TW9kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RlbmNp
bFNldHRpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVTdGVuY2lsRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50R0xFcnJvclRvQ29uc29sZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50V2FybmluZ1RvQ29u
c29sZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
QmxlbmRGdW5jRmFjdG9ycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSFRN
TEltYWdlRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWJmSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIwKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRy
aWIwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRleHRMb3N0
RXZlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjptYXliZVJlc3RvcmVDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZW5zdXJlTm90TnVsbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdl
QnVmZmVyQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6
OmJ1YmJsZVRvRnJvbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpzeW50aGVzaXplR0xFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50R0xXYXJuaW5nVG9Db25zb2xlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXBwbHlTdGVuY2ls
VGVzdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmVuYWJsZU9yRGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNsYW1wZWRDYW52YXNTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0TWF4RHJhd0J1ZmZlcnMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFj
aG1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6c2V0QmFja0RyYXdCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZUN1cnJlbnRUZXh0
dXJlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpzdXBwb3J0c0RyYXdCdWZmZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5c0luc3RhbmNlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYkRpdmlzb3IpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5pZGw6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9z
dENhbGxiYWNrOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrOjp+V2ViR0xSZW5kZXJp
bmdDb250ZXh0TG9zdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRF
cnJvck1lc3NhZ2VDYWxsYmFjazo6fldlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmluaXRpYWxpemVOZXdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNldHVwRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFya0NvbnRleHRDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFySWZD
b21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmRyYXdpbmdCdWZmZXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVySGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNpemVJbkJ5dGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFjdGl2ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YXR0YWNoU2hhZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRBdHRyaWJM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpj
aGVja09iamVjdFRvQmVCb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmxlbmRFcXVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEVxdWF0aW9uU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmxlbmRG
dW5jKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5k
RnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29sb3JNYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3NlZFRleEltYWdlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRl
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpj
cmVhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZVJlbmRlcmJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVT
aGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVs
ZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUluZGV4QXJy
YXlDb25zZXJ2YXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVXZWJHTE9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZURyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZpbmlzaCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmbHVzaCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclRl
eHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpm
cm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1ZmZlclBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRDb250
ZXh0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhcmFtZXRlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQcm9ncmFtUGFyYW1ldGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFByb2dy
YW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hh
ZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0VGV4UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFZlcnRleEF0dHJpYik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhBdHRyaWJP
ZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aGlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0J1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0NvbnRl
eHRMb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omlz
Q29udGV4dExvc3RPclBlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6aXNQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlbGVhc2VTaGFkZXJDb21w
aWxlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZW5k
ZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnNjaXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2spOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsT3ApOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE9wU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
SW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4SW1hZ2UyREltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWRlb0ZyYW1lVG9JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4UGFyYW1ldGVyZik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0
ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1
YkltYWdlMkRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnRleFN1YkltYWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00ZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aXYpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJm
dik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
TWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dXNlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIz
Zik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhB
dHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VMb3N0Q29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsb3NlQ29udGV4dEltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VSZXN0b3JlQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwbGF0Zm9y
bUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJl
bW92ZVNoYXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjphZGRTaGFyZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6cmVtb3ZlQ29udGV4dE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRDb250ZXh0T2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aGFzUGVu
ZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0Qm9vbGVhblBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RmxvYXRQYXJhbWV0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0SW50UGFyYW1ldGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4dHVyZUNvbXBsZXRl
bmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVh
dGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRp
b25WYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpn
ZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJvdW5kRnJhbWVidWZmZXJI
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVUZXh0dXJlQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRB
bmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlVGV4RnVuY0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRU
ZXhGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhTdWJEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdGVuY2lsRnVuYyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwcmludEdMRXJy
b3JUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6cHJpbnRXYXJuaW5nVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUJsZW5kRXF1
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVCbGVuZEZ1bmNGYWN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlQ2FwYWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MQ2Fu
dmFzRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZnZJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmluaXRWZXJ0ZXhBdHRyaWIwKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNpbXVsYXRlVmVy
dGV4QXR0cmliMCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaENvbnRleHRMb3N0RXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVS
ZXN0b3JlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjplbnN1cmVOb3ROdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJD
YWNoZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxlVG9Gcm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzeW50aGVzaXplR0xFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwcmludEdMV2Fybmlu
Z1RvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjphcHBseVN0ZW5jaWxUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmVuYWJsZU9yRGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpjbGFtcGVkQ2FudmFzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRNYXhEcmF3QnVmZmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRNYXhDb2xvckF0dGFjaG1lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNldEJhY2tE
cmF3QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3VwcG9ydHNEcmF3QnVmZmVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzSW5z
dGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRy
YXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29udGV4dEdyb3VwKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldE1heFZlcnRleEF0dHJpYnMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNHTEVTMkNv
bXBsaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpp
c0dMRVMyTlBPVFN0cmljdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjppc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzUmVzb3VyY2VTYWZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnNldEJvdW5kVmVydGV4QXJyYXlPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6VmVydGV4QXR0cmliVmFsdWU6OlZlcnRleEF0dHJpYlZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlZlcnRleEF0dHJp
YlZhbHVlOjppbml0VmFsdWUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYWRlcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMU2hhZGVyOjpXZWJHTFNoYWRlcik6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xTaGFkZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6V2ViR0xTaGFyZWRP
YmplY3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0Lmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMVGV4dHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6V2Vi
R0xUZXh0dXJlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg6
CisKIDIwMTUtMDEtMTYgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1Pgog
CiAgICAgICAgIFdlYiBSZXBsYXk6IHB1cmdlIHJlbWFpbmluZyBQYXNzUmVmUHRyIHVzZXMgYW5k
IG1pbm9yIGNsZWFudXAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzg2MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTU1
LDcgKzU1NSw5IEBAIHNldChXZWJDb3JlX05PTl9TVkdfSURMX0ZJTEVTCiAgICAgaHRtbC9jYW52
YXMvV2ViR0xMb3NlQ29udGV4dC5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaWRs
CiAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaWRsCisgICAgaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaWRsCisgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5p
ZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJH
TFNoYWRlclByZWNpc2lvbkZvcm1hdC5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUu
aWRsCkBAIC0xMTQ1LDcgKzExNDcsOSBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGlu
Z3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTVmlkZW9UcmFj
a0N1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAor
ICAgIGJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAKICAg
ICBiaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKKyAgICBiaW5k
aW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCiAgICAgYmluZGluZ3Mv
anMvSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU1dvcmtlckN1c3Rv
bS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKQEAgLTE2
ODgsNyArMTY5Miw5IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL2NhbnZhcy9XZWJH
TE9iamVjdC5jcHAKICAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCiAgICAgaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCisgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHAKICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCisgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICBodG1s
L2NhbnZhcy9XZWJHTFNoYWRlci5jcHAKICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRlclByZWNp
c2lvbkZvcm1hdC5jcHAKICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAKQEAg
LTI3ODUsNyArMjc5MSw5IEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgICAgIGh0bWwvY2FudmFz
L1dlYkdMT2JqZWN0LmNwcAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCiAg
ICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAorICAgICAgICBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAogICAg
ICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5jcHAKICAgICAgICAg
aHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCkBAIC0yODIyLDcgKzI4MzAsOSBAQCBp
ZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0Lmlk
bAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaWRsCiAgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlkbAorICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmlkbAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaWRsCisgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRs
CiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbAogICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2Vi
R0xUZXh0dXJlLmlkbApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLmNwcAkocmV2aXNpb24g
MTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw3ICs2OSw5IEBACiAjaW5jbHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmNwcCIK
ICNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5jcHAiCiAjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmJ1
ZmZlci5jcHAiCisjaW5jbHVkZSAiSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCIKICNpbmNs
dWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcCIKICNpbmNsdWRlICJKU1dlYkdMU2hhZGVyLmNwcCIKICNpbmNs
dWRlICJKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCIKICNpbmNsdWRlICJKU1dlYkdM
VGV4dHVyZS5jcHAiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9u
IDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0NCw3ICs0NDQsOSBAQCBOT05fU1ZHX0JJTkRJTkdfSURMUyA9IFwKICAgICAk
KFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuaWRsIFwKICAgICAkKFdlYkNv
cmUpL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaWRsIFwKKyAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgXAorICAgICQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvV2ViR0xTaGFkZXIuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyUHJlY2lzaW9uRm9ybWF0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJH
TFRleHR1cmUuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzYzLDYgKzc2
MywyMiBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVxXZWJDb3JlXERlcml2
ZWRTb3VyY2VzXEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAiPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZV9XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4
fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1B
cmNoaXRlY3R1cmUpXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxhY2Nlc3Np
YmlsaXR5XEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1
ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdT
dWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC03NzcsNyArNzkzLDMwIEBA
CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAg
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYmluZGluZ3NcanNcSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCI+CisgICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgor
ICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgor
ICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbENvbXBp
bGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2VDdXN0b20uY3BwIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98
eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWly
b3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258
eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJpbmRpbmdzXGpzXEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCI+Cisg
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbENv
bXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjc3NcQ1NTSW1hZ2VTZXRWYWx1ZS5j
cHAiPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgpAQCAtNjYzOSw2ICs2Njc4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0
bWxcY2FudmFzXE9FU1RleHR1cmVIYWxmRmxvYXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caHRtbFxjYW52YXNcT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xPRVNWZXJ0ZXhBcnJheU9iamVj
dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxc
Y2FudmFzXFdlYkdMQnVmZmVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0
bWxcY2FudmFzXFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmNw
cCIgLz4KQEAgLTY2NTksNiArNjY5OSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxo
dG1sXGNhbnZhc1xXZWJHTFByb2dyYW0uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caHRtbFxjYW52YXNcV2ViR0xSZW5kZXJidWZmZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2Vi
R0xTaGFkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNc
V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caHRtbFxjYW52YXNcV2ViR0xTaGFyZWRPYmplY3QuY3BwIiAvPgpAQCAtMTg3NjIsNiAr
MTg4MDMsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGRE
aXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXEpTRVhUc1JHQi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0
aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERl
cml2ZWRTb3VyY2VzXEpTRVhURnJhZ0RlcHRoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQ
cm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNFWFRCbGVuZE1pbk1heC5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1B
cmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYWNjZXNzaWJpbGl0eVxBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY3NzXENTU0ltYWdlU2V0VmFsdWUuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xXZWJLaXRDU1NSZXNvdXJjZVZhbHVlLmgi
IC8+CkBAIC0xODg2MSw2ICsxODkwNCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
dG1sXGNhbnZhc1xPRVNUZXh0dXJlSGFsZkZsb2F0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxodG1sXGNhbnZhc1xPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xPRVNWZXJ0ZXhBcnJheU9iamVjdC5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNc
V2ViR0xBY3RpdmVJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXGNh
bnZhc1xXZWJHTEJ1ZmZlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxj
YW52YXNcV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIiAvPgpAQCAtMTg4ODIsNiArMTg5MjYs
NyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0xQcm9ncmFt
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTFJlbmRl
cmJ1ZmZlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1s
XGNhbnZhc1xXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTFNoYWRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMU2hhcmVkT2JqZWN0
LmgiIC8+CkBAIC0yMTI3Niw0ICsyMTMyMSw0IEBACiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0
ZW5zaW9uVGFyZ2V0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXEJ1
aWxkQ3VzdG9taXphdGlvbnNcbWFzbS50YXJnZXRzIiAvPgogICA8L0ltcG9ydEdyb3VwPgotPC9Q
cm9qZWN0PgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
LmZpbHRlcnMJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTM4Myw5ICsx
MzgzLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFJv
dW5kZWRSZWN0LmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xTZWdtZW50ZWRGb250RGF0YS5jcHAiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxn
cmFwaGljczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcU2hhZG93Qmx1ci5jcHAiPgogICAgICAgPEZpbHRlcj5w
bGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNDg0NSwxNSAr
NDg0Miw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
bG9hdFNpemUuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEZvbnQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3M8L0ZpbHRl
cj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXEZvbnRDYWNoZS5jcHAiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGlj
czwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRm9udERhdGEuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1c
Z3JhcGhpY3M8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREZXNjcmlwdGlvbi5jcHAiPgogICAgICAgPEZp
bHRlcj5wbGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNDg2
Myw5ICs0ODU0LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXEZvbnRHbHlwaHMuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3M8L0Zp
bHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZvbnRGYXN0UGF0aC5jcHAiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxn
cmFwaGljczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEZlYXR1cmVTZXR0aW5ncy5jcHAiPgogICAgICAg
PEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAt
NzE1Niw2ICs3MTQ0LDI2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZh
c1xFWFRCbGVuZE1pbk1heC5jcHAiPgogICAgICAgPEZpbHRlcj5odG1sXGNhbnZhczwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcRm9udENhc2NhZGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRm9udFJhbmdlcy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxiaW5kaW5nc1xqc1xKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIj4K
KyAgICAgIDxGaWx0ZXI+YmluZGluZ3NcanM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZUN1c3RvbS5jcHAiPgorICAgICAgPEZpbHRlcj5iaW5kaW5nc1xqczwvRmlsdGVyPgor
ICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNc
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAiPgorICAgICAgPEZpbHRlcj5odG1sXGNhbnZhczwv
RmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRt
bFxjYW52YXNcV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAiPgorICAgICAgPEZpbHRlcj5o
dG1sXGNhbnZhczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUp
XFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCI+Cisg
ICAgICA8RmlsdGVyPkRlcml2ZWRTb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0
Zm9ybUFyY2hpdGVjdHVyZSlcV2ViQ29yZVxEZXJpdmVkU291cmNlc1xKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwIj4KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZFNvdXJjZXM8L0ZpbHRlcj4K
KyAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGdlb2xvY2F0aW9uXENvb3JkaW5hdGVzLmgiPgpA
QCAtODQyNCw5ICs4NDMyLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXFJvdW5kZWRSZWN0LmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGlj
czwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcU2VnbWVudGVkRm9udERhdGEuaCI+Ci0gICAgICA8RmlsdGVyPnBs
YXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaGFkb3dCbHVyLmgiPgogICAgICAgPEZp
bHRlcj5wbGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMTI3
MTIsMTUgKzEyNzE3LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEZsb2F0U2l6ZUhhc2guaCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNz
PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGb250LmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGlj
czwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxn
cmFwaGljczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERhdGEuaCI+Ci0gICAgICA8RmlsdGVyPnBsYXRm
b3JtXGdyYXBoaWNzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250RGVzY3JpcHRpb24uaCI+CiAgICAgICA8
RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0x
NTA2Miw2ICsxNTA2MSwyMCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3
ZWJkYXRhYmFzZVxEYXRhYmFzZUJhY2tlbmRTeW5jLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFN0YXRlbWVudFN5bmMuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25C
YWNrZW5kU3luYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcRm9udENhc2NhZGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZvbnRSYW5nZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGh0bWxcY2FudmFzXFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCI+CisgICAgICA8RmlsdGVyPmh0
bWxcY2FudmFzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiPgorICAgICAg
PEZpbHRlcj5odG1sXGNhbnZhczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNo
aXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5oIj4KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZFNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8
L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxk
RGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291
cmNlc1xKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCI+CisgICAgICA8RmlsdGVyPkRlcml2
ZWRTb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgIDwvSXRlbUdyb3VwPgogICA8
SXRlbUdyb3VwPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXGNzc1xDU1NHcmFtbWFyLnkuaW4iPgpA
QCAtMTUyNzIsNCArMTUyODUsNCBAQAogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVx3aW48L0ZpbHRl
cj4KICAgICA8L01BU00+CiAgIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgorPC9Qcm9qZWN0Pgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNTg1MSw2ICs1ODUxLDE2IEBACiAJCUQzQUExMEY0MTIzQTk4QUEwMDkyMTUyQiAv
KiBNZWRpYVF1ZXJ5TWF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDNBQTEwRjIxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVy
LmggKi87IH07CiAJCUQzRDRFOTcyMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNE
NEU5NzAxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgKi87IH07CiAJ
CUQzRDRFOTczMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRDRFOTcxMTMwQzdDRkUw
MDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuaCAqLzsgfTsKKwkJRDNGM0QzNjMxQTY5QjE5
MDAwNTlGQzJCIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0YzRDM2MTFBNjlCMTkwMDA1OUZDMkIg
LyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsgfTsKKwkJRDNGM0QzNjQxQTY5QjE5
MDAwNTlGQzJCIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNGM0QzNjIxQTY5QjE5MDAwNTlGQzJCIC8q
IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OworCQlEM0YzRDM2NzFBNjlCMUE1MDA1
OUZDMkIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRjNEMzY1MUE2OUIxQTUwMDU5RkMyQiAv
KiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwICovOyB9OworCQlEM0YzRDM2ODFBNjlC
MUE1MDA1OUZDMkIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0YzRDM2NjFBNjlCMUE1MDA1OUZD
MkIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggKi87IH07CisJCUQzRjNEMzY5MUE2
OUI3QjAwMDU5RkMyQiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRjNEMzVFMUE2OUE1MDYwMDU5
RkMyQiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLzsgfTsKKwkJRDNGM0QzNkEx
QTY5QjdCOTAwNTlGQzJCIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRjNEMzVGMUE2OUE1MDYwMDU5
RkMyQiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggKi87IH07CisJCUQzRjNEMzZCMUE2
OUI3QzUwMDU5RkMyQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNGM0QzNUExQTY5
QTNCMDAwNTlGQzJCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAgKi87
IH07CisJCUQzRjNEMzZDMUE2OUI3RDUwMDU5RkMyQiAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRDNGM0QzNTkxQTY5QTNCMDAwNTlGQzJCIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAgKi87IH07CisJCUQzRjNEMzZEMUE2OUI3REMwMDU5RkMyQiAvKiBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQzRjNEMzVCMUE2OUE1MDYwMDU5RkMyQiAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
LmNwcCAqLzsgfTsKKwkJRDNGM0QzNkUxQTY5QjdFMDAwNTlGQzJCIC8qIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQzRjNEMzVDMUE2OUE1MDYwMDU5RkMyQiAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi87
IH07CiAJCUQ2MTlBMzA3MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3Bl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2MTlB
MzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCAqLzsgfTsK
IAkJRDYxOUEzMDgxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA2MTQ0
RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmggKi87IH07CiAJCUQ2NDg5
RDI1MTY2RkZDRjEwMDdDMDMxQiAvKiBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDY0ODlEMjMxNjZGRkNGMTAw
N0MwMzFCIC8qIEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAgKi87IH07CkBAIC0xMzMzNSw2ICsx
MzM0NSwxOCBAQAogCQlEM0FBMTBGMjEyM0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNo
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeU1hdGNoZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNENEU5NzAxMzBDN0NGRTAwN0JBNTQw
IC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlEM0Q0RTk3MTEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxTdW1tYXJ5RWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0YzRDM1OTFBNjlBM0IwMDA1OUZDMkIgLyogSlNX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzRjNEMzVBMUE2OUEzQjAwMDU5RkMyQiAvKiBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDNGM0QzNUIxQTY5QTUwNjAwNTlGQzJCIC8qIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzRjNEMzVDMUE2
OUE1MDYwMDU5RkMyQiAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuaDsgcGF0aCA9IGNhbnZh
cy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUQzRjNEMzVEMUE2OUE1MDYwMDU5RkMyQiAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDsgcGF0aCA9
IGNhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRDNGM0QzNUUxQTY5QTUwNjAwNTlGQzJCIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzRjNEMzVGMUE2OUE1MDYw
MDU5RkMyQiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDsgcGF0aCA9IGNhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUQzRjNEMzYwMUE2OUE1MDYwMDU5RkMyQiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlk
bDsgcGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDNGM0QzNjExQTY5QjE5MDAwNTlGQzJCIC8qIEpTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlEM0YzRDM2MjFBNjlCMTkwMDA1OUZDMkIgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0YzRDM2NTFBNjlCMUE1MDA1
OUZDMkIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzRjNEMzY2MUE2OUIxQTUwMDU5RkMyQiAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoaWxkTGlzdE11
dGF0aW9uU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjE5QTMwNjE0
NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQ2NDg5RDIzMTY2RkZDRjEwMDdDMDMxQiAvKiBKU0hUTUxUZW1w
bGF0ZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNI
VE1MVGVtcGxhdGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1
ODQwLDYgKzE1ODYyLDEyIEBACiAJCQkJNDlDN0I5QjkxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdM
UmVuZGVyYnVmZmVyLmNwcCAqLywKIAkJCQk0OUM3QjlCQTEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xSZW5kZXJidWZmZXIuaCAqLywKIAkJCQk0OUM3QjlCQjEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xSZW5kZXJidWZmZXIuaWRsICovLAorCQkJCUQzRjNEMzVFMUE2OUE1MDYwMDU5RkMyQiAvKiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLywKKwkJCQlEM0YzRDM1RjFBNjlBNTA2MDA1
OUZDMkIgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovLAorCQkJCUQzRjNEMzYwMUE2
OUE1MDYwMDU5RkMyQiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbCAqLywKKwkJCQlE
M0YzRDM1QjFBNjlBNTA2MDA1OUZDMkIgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8s
CisJCQkJRDNGM0QzNUMxQTY5QTUwNjAwNTlGQzJCIC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aCAqLywKKwkJCQlEM0YzRDM1RDFBNjlBNTA2MDA1OUZDMkIgLyogV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5pZGwgKi8sCiAJCQkJNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdM
UmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCTQ5QzdCOUMxMTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsICovLApAQCAtMTg5MTQsNiArMTg5NDIsMTAgQEAKIAkJ
CQk0OUM3Qjk4OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uaCAqLywKIAkJCQk0
OUM3Qjk4QTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJlbmRlcmJ1ZmZlci5jcHAgKi8sCiAJ
CQkJNDlDN0I5OEIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xSZW5kZXJidWZmZXIuaCAqLywK
KwkJCQlEM0YzRDM2NTFBNjlCMUE1MDA1OUZDMkIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmNwcCAqLywKKwkJCQlEM0YzRDM2NjFBNjlCMUE1MDA1OUZDMkIgLyogSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmggKi8sCisJCQkJRDNGM0QzNjExQTY5QjE5MDAwNTlGQzJCIC8qIEpT
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCisJCQkJRDNGM0QzNjIxQTY5QjE5MDAwNTlG
QzJCIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCTQ5RUVEMTQwMTA1MTk2
OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJNDlFRUQx
NDExMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggKi8sCiAJCQkJ
NDlDN0I5OEYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xTaGFkZXIuY3BwICovLApAQCAtMjEw
MDgsNyArMjEwNDAsOSBAQAogCQkJCTdDNzNGQjE3MTkxRUY4MDgwMDdERTA2MSAvKiBKU1VzZXJN
ZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDdXN0b20uY3BwICovLAogCQkJCUJFNkRGNzA4MTcxQ0Ey
QzUwMERENTJCOCAvKiBKU1ZpZGVvVHJhY2tDdXN0b20uY3BwICovLAogCQkJCUJFNkRGNzBBMTcx
Q0EyQzUwMERENTJCOCAvKiBKU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcCAqLywKKwkJCQlEM0Yz
RDM1QTFBNjlBM0IwMDA1OUZDMkIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9t
LmNwcCAqLywKIAkJCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRDdXN0b20uY3BwICovLAorCQkJCUQzRjNEMzU5MUE2OUEzQjAwMDU5RkMyQiAvKiBK
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovLAogCQkJCUJDMjc1Qjc4MTFDNUQx
QzMwMEM5MjA2QyAvKiBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcCAqLywKIAkJCQlFMUNBNUNCQjBF
OENEQ0FGMDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3BwICovLAogCQkJCUUxODI1OEFCMEVG
M0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCAqLywKQEAgLTI1
MDkyLDkgKzI1MTI2LDExIEBACiAJCQkJQjJGQTNEODkwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
RkVNZXJnZU5vZGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDIyNDE4NDEwN0U3N0Y0
MDA3NjZBODcgLyogSlNTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkZBM0Q4QjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRU9mZnNldEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUQzRjNEMzZFMUE2OUI3RTAwMDU5RkMyQiAvKiBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q4RDBBQjc1QTZGMDAwRTVBQzQg
LyogSlNTVkdGRVBvaW50TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q4
RjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMkZBM0Q5MTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRVNwb3RM
aWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUQzRjNEMzZBMUE2OUI3QjkwMDU5RkMy
QiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZB
M0Q5MzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMkZBM0Q5NTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q5NzBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdGaWx0ZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NDk0LDYgKzI1NTMwLDcgQEAK
IAkJCQk5MzUwMEYzMjEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxlckltcERldGFpbHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTJEQ0I4Mzc5MTlGOTlCQkEwMEE3RkJFNCAvKiBOU1NoYXJpbmdT
ZXJ2aWNlUGlja2VyU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRENCODM3QTE5Rjk5QkJBMDBB
N0ZCRTQgLyogTlNTaGFyaW5nU2VydmljZVNQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDNGM0Qz
NjQxQTY5QjE5MDAwNTlGQzJCIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0UxMjUyNTMxQTFCRUMwNjAwODY0NDgwIC8qIE5TU3RyaW5nU1BJLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRTEyNTI1NTFBMUJFQzBFMDA4NjQ0ODAgLyogTlNVUkxEb3dubG9h
ZFNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RjU0MDMxOUExQzkyNDAwODhGQzkyIC8qIE5T
VVJMRmlsZVR5cGVNYXBwaW5nc1NQSS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjM1Nyw2ICsyNjM5
NCw3IEBACiAJCQkJQjIyMjdBQUMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1N0cmluZ0xpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyMjI3QUI4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTdHlsZUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QUJCMEQwMEJGMjIwMDcxQjc4MiAvKiBT
VkdTVkdFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlEM0YzRDM2ODFBNjlCMUE1MDA1OUZD
MkIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MjIyN0FCRTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU3dpdGNoRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjIyMjdBQzEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1N5bWJvbEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyMjI3QUM1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUZXN0cy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yODc0MCw2ICsyODc3OCw3IEBACiAJCQkJNjVERjMyMDMwOUQx
Q0M2MDAwMEJFMzI1IC8qIEpTVGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTJDNDBBQjBE
RUI1NUFBMDA1QUYxOUUgLyogSlNUZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
M0ExNEI4MEI3RDFENTIwMEE1M0ZGRCAvKiBKU1RleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlEM0YzRDM2QjFBNjlCN0M1MDA1OUZDMkIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUY0NUY1MEU2ODdCNUMwMDFDMTI4
NyAvKiBKU1RleHRNZXRyaWNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MDc1Njk0MTQyMjY2
OEQwMDQxNDE2MSAvKiBKU1RleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzA3NTZE
RDE0MjM5QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yODc2NSw2ICsyODgwNCw3IEBACiAJCQkJN0M3M0ZCMEMxOTFFRjVBODAwN0RFMDYxIC8qIEpT
VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Qzcz
RkIxOTE5MUVGODA4MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1Qzc3MDk0MTAwRDNDQTgwMDVCQTI2NyAvKiBK
U1ZhbGlkaXR5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDNGM0QzNjcxQTY5QjFBNTAw
NTlGQzJCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDREU4M0RCNjE4M0QzNTJBMDAzMUVBQTMgLyogSlNWaWRlb1BsYXliYWNrUXVhbGl0eS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwN0M1OUI1RjE3RjRCMjA4MDAwRkJDQkIgLyogSlNWaWRl
b1N0cmVhbVRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFOEVGMDRBMTcxQzkwMTQwMDlC
NDhDMyAvKiBKU1ZpZGVvVHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTA0OCw2ICsyOTA4
OCw3IEBACiAJCQkJQ0RFN0ZDNDQxODE5MDRCMTAwMkJCQjc3IC8qIE9yZGVySXRlcmF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMDAxNDYyOEExMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFj
Y2Vzc0VudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFOUU4OUZCMTZFMkRDMDUwMEE5MDhG
OCAvKiBPcmlnaW5Mb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQzRjNEMzZEMUE2OUI3REMw
MDU5RkMyQiAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZENTgxRkFFMTUyMEY5MUYwMDNBN0E3NSAvKiBPc2NpbGxhdG9yTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTBENTczNjBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI5MTI0LDYgKzI5MTY1LDcgQEAKIAkJCQlGRDQ1QTk1OTE3NUQ0
MTcxMDBDMjFFQzggLyogUG9seWdvblNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODlG
MERFMTBCNDZCMEUwMEYzQzczOSAvKiBQb3BTdGF0ZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzRjE5QUY4MDgyNDVFNTkwMDFFOUFCQyAvKiBQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlEM0YzRDM2OTFBNjlCN0IwMDA1OUZDMkIgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzkxOUMyMzBCN0QxODg2MDBBNTY5OTggLyog
UG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNzc2RDQzRDExMDQ1Mjc1
MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RUE3RUJE
MEExOTQ1RDAwMEE4RUY1RiAvKiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0yOTQ4Niw2ICsyOTUyOCw3IEBACiAJCQkJOTdCQzZBNDQxNTA1RjA4MTAwMUI3NEFD
IC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBNDcx
NTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
RThBNjc0NzE2Q0REMTlFMDA5MzBCRjggLyogU1FMU3RhdGVtZW50QmFja2VuZC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlEM0YzRDM2MzFBNjlCMTkwMDA1OUZDMkIgLyogSlNXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTRGMTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDRGOTZGNTFBMUVD
QzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUUx
ODExMzE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjk5NjgsNiArMzAwMTEsNyBAQAogCQkJCTNGNDJCMzFFMTg4MTE5MUIwMDI3
OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gaW4gU291cmNlcyAq
LywKIAkJCQlDRDgyMDMwRDEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTNGQkM0QUYzMTg5ODgxNTYw
MDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCUQzRjNEMzZDMUE2OUI3RDUwMDU5RkMyQiAvKiBKU1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVGRDQ2NjYxOUI1OTZGNjAwMUUy
QjREIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRjEyMTcxRjUxNkE4Q0VEMjAwMDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUQyMUE4MDIxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QmluZGluZ3NBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMxLDYgKzEzMSw5IEBACiAjaW5jbHVkZSAiSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCIK
ICNpbmNsdWRlICJKU1ZpZGVvVHJhY2tDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTVmlkZW9UcmFj
a0xpc3RDdXN0b20uY3BwIgorI2luY2x1ZGUgIkpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3Rv
bS5jcHAiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcCIK
KyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAiCiAjaW5jbHVkZSAi
SlNXZWJLaXRQb2ludEN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNXb3JrZXJDdXN0b20uY3BwIgog
I2luY2x1ZGUgIkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyAr
MzIsOSBAQAogI2luY2x1ZGUgIkpTTm9kZS5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1
ZGUgIkpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCiAKQEAgLTUxLDggKzUzLDEwIEBA
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET00KICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGlmIChvYmplY3QtPmlzM2QoKSkK
KyAgICBpZiAob2JqZWN0LT5pc1dlYkdMMSgpKQogICAgICAgICByZXR1cm4gd3JhcDxKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dD4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqPihvYmplY3QpKTsKKyAgICBpZiAob2JqZWN0LT5pc1dlYkdMMigpKQorICAgICAg
ICByZXR1cm4gd3JhcDxKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dCo+KG9iamVjdCkpOwogI2VuZGlmCiAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ob2JqZWN0LT5pczJkKCkpOwogICAgIHJl
dHVybiB3cmFwPEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KG9iamVjdCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgogCiAjaWYgRU5BQkxFKFdFQkdMKQotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxl
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2lmIEVO
QUJMRShXRUJHTCkKICNpbmNsdWRlICJKU0RpY3Rpb25hcnkuaCIKLSNpbmNsdWRlICJKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisj
aW5jbHVkZSAiSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgSlNXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJmltcGwoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1
ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorCisjaW5jbHVkZSAiQU5HTEVJbnN0
YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJFWFRCbGVuZE1pbk1heC5oIgorI2luY2x1ZGUgIkVY
VEZyYWdEZXB0aC5oIgorI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKKyNpbmNsdWRl
ICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKKyNpbmNsdWRlICJFWFRzUkdCLmgiCisj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTQU5HTEVJbnN0YW5j
ZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU0VYVEJsZW5kTWluTWF4LmgiCisjaW5jbHVkZSAiSlNF
WFRGcmFnRGVwdGguaCIKKyNpbmNsdWRlICJKU0VYVFNoYWRlclRleHR1cmVMT0QuaCIKKyNpbmNs
dWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2luY2x1ZGUgIkpTRVhUc1JH
Qi5oIgorI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0hUTUxJ
bWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkpTT0VT
RWxlbWVudEluZGV4VWludC5oIgorI2luY2x1ZGUgIkpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5o
IgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVkZSAiSlNPRVNUZXh0dXJl
RmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXQuaCIKKyNpbmNs
dWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJKU09FU1ZlcnRl
eEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIkpT
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgorI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDLmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5o
IgorI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgorI2luY2x1ZGUgIkpTV2Vi
R0xEZWJ1Z1NoYWRlcnMuaCIKKyNpbmNsdWRlICJKU1dlYkdMRGVwdGhUZXh0dXJlLmgiCisjaW5j
bHVkZSAiSlNXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJHTEZyYW1lYnVmZmVy
LmgiCisjaW5jbHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNXZWJHTFBy
b2dyYW0uaCIKKyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAiSlNX
ZWJHTFNoYWRlci5oIgorI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgorI2luY2x1ZGUgIkpTV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUy5oIgorI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5jbHVkZSAi
T0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgor
I2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVI
YWxmRmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCisjaW5j
bHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJXZWJHTENv
bXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQy5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKKyNpbmNsdWRlICJX
ZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0dXJlLmgiCisjaW5j
bHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgorI2luY2x1ZGUgIldlYkdMRXh0ZW5zaW9uLmgiCisj
aW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMR2V0SW5mby5oIgor
I2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCisjaW5jbHVkZSAiV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJy
YXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisKKyNpZiBFTkFCTEUoVklERU8pCisjaW5jbHVkZSAiSFRNTFZp
ZGVvRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSFRNTFZpZGVvRWxlbWVudC5oIgorI2VuZGlmCisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3N0YXRp
YyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCit7CisgICAgc3dpdGNoIChpbmZvLmdl
dFR5cGUoKSkgeworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2w6CisgICAgICAgIHJl
dHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjpr
VHlwZUJvb2xBcnJheTogeworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAg
ICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5mby5nZXRCb29sQXJyYXkoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKKyAgICAg
ICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtpaV0pKTsKKyAgICAgICAgcmV0dXJu
IGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQorICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgorICAgICAgICByZXR1cm4ganNOdW1iZXIo
aW5mby5nZXRGbG9hdCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVJbnQ6CisgICAg
ICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVOdWxsOgorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgY2FzZSBXZWJHTEdl
dEluZm86OmtUeXBlU3RyaW5nOgorICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhl
YywgaW5mby5nZXRTdHJpbmcoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlVW5zaWdu
ZWRJbnQ6CisgICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldFVuc2lnbmVkSW50KCkpOwor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVmZmVyOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xCdWZmZXIoKSk7CisgICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5OgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGbG9hdEFycmF5KCkpOworICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZmZXI6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEZyYW1lYnVmZmVyKCkpOworICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEludEFycmF5KCkpOworICAgICAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkKKyAgICAgICAgLy8gY2FzZSBX
ZWJHTEdldEluZm86OmtUeXBlV2ViR0xPYmplY3RBcnJheToKKyAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVXZWJHTFByb2dyYW06CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgaW5mby5nZXRXZWJHTFByb2dyYW0oKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xSZW5kZXJidWZmZXI6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgaW5mby5nZXRXZWJHTFJlbmRlcmJ1ZmZlcigpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVXZWJHTFRleHR1cmU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgaW5mby5nZXRXZWJHTFRleHR1cmUoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xVbnNpZ25lZEJ5dGVBcnJheToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWduZWRCeXRlQXJyYXkoKSk7CisgICAgY2FzZSBX
ZWJHTEdldEluZm86OmtUeXBlV2ViR0xVbnNpZ25lZEludEFycmF5OgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEludEFycmF5KCkp
OworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6
CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KK30KKworZW51bSBP
YmplY3RUeXBlIHsKKyAgICBrQnVmZmVyLCBrUmVuZGVyYnVmZmVyLCBrVGV4dHVyZSwga1ZlcnRl
eEF0dHJpYgorfTsKKworc3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVyKEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFR5cGUgb2Jq
ZWN0VHlwZSkKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gb2JqLT5pbXBsKCk7CisgICAg
dW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSku
dG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0SW5mbyBpbmZvOworICAgIHN3aXRjaCAo
b2JqZWN0VHlwZSkgeworICAgIGNhc2Uga0J1ZmZlcjoKKyAgICAgICAgaW5mbyA9IGNvbnRleHQu
Z2V0QnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBrUmVuZGVyYnVmZmVyOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIGtUZXh0dXJlOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRUZXhQYXJhbWV0ZXIodGFy
Z2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI6
CisgICAgICAgIC8vIHRhcmdldCA9PiBpbmRleAorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRW
ZXJ0ZXhBdHRyaWIodGFyZ2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBvYmot
Pmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworZW51bSBXaGljaFByb2dyYW1DYWxsIHsKKyAg
ICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0KK307CisKK3N0YXRpYyBKU1ZhbHVlIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJHTEV4
dGVuc2lvbiogZXh0ZW5zaW9uKQoreworICAgIGlmICghZXh0ZW5zaW9uKQorICAgICAgICByZXR1
cm4ganNOdWxsKCk7CisgICAgc3dpdGNoIChleHRlbnNpb24tPmdldE5hbWUoKSkgeworICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OldlYkdMTG9zZUNvbnRleHROYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMTG9zZUNvbnRleHQqPihl
eHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRTaGFkZXJUZXh0dXJlTE9E
TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxFWFRTaGFkZXJUZXh0dXJlTE9EKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTmFtZToKKyAgICAgICAgcmV0dXJuIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRzUkdCTmFt
ZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxF
WFRzUkdCKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhURnJhZ0Rl
cHRoTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxFWFRGcmFnRGVwdGgqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9u
OjpFWFRCbGVuZE1pbk1heE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8RVhUQmxlbmRNaW5NYXgqPihleHRlbnNpb24pKTsKKyAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpPRVNTdGFuZGFyZERlcml2YXRpdmVzTmFtZToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNTdGFuZGFyZERlcml2
YXRpdmVzKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVy
ZUZsb2F0TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXQqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXRMaW5lYXJOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVGbG9hdExpbmVhcio+KGV4
dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXRO
YW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PE9FU1RleHR1cmVIYWxmRmxvYXQqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFy
Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVmVydGV4QXJyYXlP
YmplY3ROYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PE9FU1ZlcnRleEFycmF5T2JqZWN0Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6T0VTRWxlbWVudEluZGV4VWludE5hbWU6CisgICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTRWxlbWVudEluZGV4VWludCo+KGV4
dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVidWdSZW5kZXJlcklu
Zm9OYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PFdlYkdMRGVidWdSZW5kZXJlckluZm8qPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdM
RXh0ZW5zaW9uOjpXZWJHTERlYnVnU2hhZGVyc05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1NoYWRlcnMqPihleHRlbnNp
b24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDTmFtZToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQ05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMqPihleHRl
bnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlcHRoVGV4dHVyZU5hbWU6
CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2Vi
R0xEZXB0aFRleHR1cmUqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpX
ZWJHTERyYXdCdWZmZXJzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERyYXdCdWZmZXJzKj4oZXh0ZW5zaW9uKSk7CisgICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6QU5HTEVJbnN0YW5jZWRBcnJheXNOYW1lOgorICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEFOR0xFSW5zdGFuY2VkQXJy
YXlzKj4oZXh0ZW5zaW9uKSk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBqc051bGwoKTsKK30KKwordm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hhZGVycyhFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpT
V2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAg
IGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIFZlY3Rv
cjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJzOworICAgIGJvb2wgc3VjY2VlZCA9IGNvbnRl
eHQuZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIHNoYWRlcnMsIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOworICAgIH0KKyAgICBpZiAoIXN1Y2NlZWQpCisgICAgICAgIHJldHVybiBqc051bGwo
KTsKKyAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgZm9yIChzaXplX3Qg
aWkgPSAwOyBpaSA8IHNoYWRlcnMuc2l6ZSgpOyArK2lpKQorICAgICAgICBsaXN0LmFwcGVuZCh0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBzaGFkZXJzW2lpXS5nZXQoKSkpOworICAgIHJldHVy
biBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Cit9CisKK0pT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRFeHRlbnNpb24oRXhlY1N0YXRl
KiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7CisgICAgCisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYg
Y29udGV4dCA9IGltcGwoKTsKKyAgICBjb25zdCBTdHJpbmcgbmFtZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdM
RXh0ZW5zaW9uKiBleHRlbnNpb24gPSBjb250ZXh0LmdldEV4dGVuc2lvbihuYW1lKTsKKyAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgZXh0ZW5zaW9uKTsKK30KKworSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1ZmZlclBhcmFtZXRlcihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBr
QnVmZmVyKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgYXR0
YWNobWVudCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvSW50MzIo
ZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgCisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29u
dGV4dCA9IGltcGwoKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRl
eHQuZ2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQcm9ncmFtUGFyYW1ldGVyKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisg
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAg
IFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29u
dGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qo
KSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRP
YmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1JlbmRlcmJ1ZmZlcik7Cit9CisKK0pTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQYXJhbWV0ZXIoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAg
cmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgaWYgKCFl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pbmhlcml0cyhKU1dlYkdMU2hhZGVyOjppbmZvKCkpKQorICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xTaGFkZXIqIHNoYWRl
ciA9IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFNoYWRlclBh
cmFtZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25z
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250
ZXh0ID0gaW1wbCgpOworICAgIGlmIChjb250ZXh0LmlzQ29udGV4dExvc3QoKSkKKyAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOworICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlID0gY29udGV4dC5nZXRT
dXBwb3J0ZWRFeHRlbnNpb25zKCk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAg
ICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgdmFsdWUuc2l6ZSgpOyArK2lpKQorICAgICAgICBs
aXN0LmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB2YWx1ZVtpaV0pKTsKKyAgICByZXR1
cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOworfQorCitK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VGV4UGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMs
IGtUZXh0dXJlKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dFVuaWZvcm0oRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBp
bXBsKCk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3Jh
cHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZXhlYyk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFVuaWZvcm0ocHJv
Z3JhbSwgbG9jYXRpb24sIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFZlcnRleEF0dHJpYihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVmVydGV4
QXR0cmliKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PgorYm9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCit7CisgICAgaWYgKCF2YWx1ZS5p
c09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgSlNDOjpKU09iamVj
dCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOworICAgIGludDMyX3QgbGVuZ3RoID0gb2JqZWN0
LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIoZXhl
Yyk7CisgICAgCisgICAgaWYgKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2ZWN0b3IucmVzaXplKGxlbmd0aCk7CisgICAgCisg
ICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNDOjpK
U1ZhbHVlIHYgPSBvYmplY3QtPmdldChleGVjLCBpKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2ZWN0b3JbaV0g
PSBzdGF0aWNfY2FzdDxUPih2LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2VudW0gRGF0YUZ1bmN0aW9uVG9DYWxsIHsKKyAgICBmX3VuaWZvcm0x
diwgZl91bmlmb3JtMnYsIGZfdW5pZm9ybTN2LCBmX3VuaWZvcm00diwKKyAgICBmX3ZlcnRleEF0
dHJpYjF2LCBmX3ZlcnRleEF0dHJpYjJ2LCBmX3ZlcnRleEF0dHJpYjN2LCBmX3ZlcnRleEF0dHJp
YjR2Cit9OworCitlbnVtIERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCB7CisgICAgZl91bmlmb3Jt
TWF0cml4MmZ2LCBmX3VuaWZvcm1NYXRyaXgzZnYsIGZfdW5pZm9ybU1hdHJpeDRmdgorfTsKKwor
c3RhdGljIGJvb2wgZnVuY3Rpb25Gb3JVbmlmb3JtKERhdGFGdW5jdGlvblRvQ2FsbCBmKQorewor
ICAgIHN3aXRjaCAoZikgeworICAgIGNhc2UgZl91bmlmb3JtMXY6CisgICAgY2FzZSBmX3VuaWZv
cm0ydjoKKyAgICBjYXNlIGZfdW5pZm9ybTN2OgorICAgIGNhc2UgZl91bmlmb3JtNHY6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rp
b25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAg
ICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uID0gMDsKKyAgICBsb25nIGluZGV4ID0gLTE7CisgICAgCisgICAgaWYgKGZ1bmN0
aW9uRm9yVW5pZm9ybShmKSkgeworICAgICAgICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9j
YXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgICAgIGlm
ICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgfSBl
bHNlCisgICAgICAgIGluZGV4ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihl
eGVjKTsKKyAgICAKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIAorICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJy
YXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKHdlYkdMQXJyYXkpIHsK
KyAgICAgICAgc3dpdGNoIChmKSB7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMXY6CisgICAgICAg
ICAgICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICAg
ICAgY29udGV4dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgICAg
IGNvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6CisgICAgICAgICAgICBj
b250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6CisgICAgICAgICAg
ICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2OgorICAgICAgICAg
ICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKKyAgICAgICAg
ICAgIGNvbnRleHQudmVydGV4QXR0cmliM2Z2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6CisgICAgICAg
ICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
ICAgIAorICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhl
YywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIHN3aXRjaCAoZikgeworICAgIGNhc2UgZl91
bmlmb3JtMXY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuZGF0
YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZv
cm0ydjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTN2
OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtNHY6Cisg
ICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2Ogor
ICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJh
eS5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Cisg
ICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5
LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKKyAg
ICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXku
c2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgorICAg
ICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworc3RhdGljIEpTQzo6
SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3sKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
KyAgICAKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9y
bUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlm
ICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAKKyAgICBS
ZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvSW50MzJBcnJheShleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYg
KHdlYkdMQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoIChmKSB7CisgICAgICAgIGNhc2UgZl91bmlm
b3JtMXY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24sIHdlYkdMQXJy
YXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9y
bTJ2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9uLCB3ZWJHTEFycmF5
LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0z
djoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5n
ZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6
CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0
KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICAKKyAg
ICAKKyAgICBWZWN0b3I8aW50LCA2ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZXhlYyk7CisgICAgCisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZv
cm0xdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2
OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6Cisg
ICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAg
ICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUo
KSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgo
RGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgIT0gMykKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3Jh
cHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFsb2NhdGlvbiAmJiAh
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIGJvb2wgdHJhbnNwb3NlID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgICAgCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IAorICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgaWYgKHdlYkdMQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoIChmKSB7CisgICAgICAg
IGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDNmdjoKKyAgICAgICAg
ICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFy
cmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZv
cm1NYXRyaXg0ZnY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8
ZmxvYXQsIDY0PiBhcnJheTsKKyAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDIpLCBhcnJheSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
KTsKKyAgICAKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoK
KyAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFy
cmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Zl91bmlmb3JtTWF0cml4M2Z2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9j
YXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6CisgICAgICAgIGNvbnRleHQu
dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5
LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNDOjpK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFmdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0xdiwgZXhl
YywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dW5pZm9ybTFpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uaShmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0ydiwgZXhlYywgaW1wbCgp
KTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9y
bTJpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShm
X3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKK30KKwor
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0z
diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybTRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
ZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm00diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpdihKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00diwgZXhlYywg
aW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dW5pZm9ybU1hdHJpeDJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDJmdiwgZXhlYywgaW1wbCgpKTsKK30KKwor
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDNm
dihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4
KGZfdW5pZm9ybU1hdHJpeDNmdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJp
eDRmdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYsIGV4ZWMsIGltcGwoKSk7Cit9
CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJp
YjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihm
X3ZlcnRleEF0dHJpYjJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIzdiwgZXhlYywg
aW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmVydGV4QXR0cmliNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRh
RnVuY3Rpb25mKGZfdmVydGV4QXR0cmliNHYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNzM5
ICsyNiwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKQotCiAj
aW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAotI2luY2x1ZGUgIkFOR0xFSW5z
dGFuY2VkQXJyYXlzLmgiCi0jaW5jbHVkZSAiRVhUQmxlbmRNaW5NYXguaCIKLSNpbmNsdWRlICJF
WFRGcmFnRGVwdGguaCIKLSNpbmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5jbHVk
ZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCi0jaW5jbHVkZSAiRVhUc1JHQi5oIgot
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0FOR0xFSW5zdGFu
Y2VkQXJyYXlzLmgiCi0jaW5jbHVkZSAiSlNFWFRCbGVuZE1pbk1heC5oIgotI2luY2x1ZGUgIkpT
RVhURnJhZ0RlcHRoLmgiCi0jaW5jbHVkZSAiSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5j
bHVkZSAiSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKLSNpbmNsdWRlICJKU0VYVHNS
R0IuaCIKLSNpbmNsdWRlICJKU0hUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNIVE1M
SW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJKU09F
U0VsZW1lbnRJbmRleFVpbnQuaCIKLSNpbmNsdWRlICJKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMu
aCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1ZGUgIkpTT0VTVGV4dHVy
ZUZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCi0jaW5j
bHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiSlNPRVNWZXJ0
ZXhBcnJheU9iamVjdC5oIgotI2luY2x1ZGUgIkpTV2ViR0xCdWZmZXIuaCIKLSNpbmNsdWRlICJK
U1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJKU1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQy5oIgotI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMu
aCIKLSNpbmNsdWRlICJKU1dlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKLSNpbmNsdWRlICJKU1dl
YkdMRGVidWdTaGFkZXJzLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlcHRoVGV4dHVyZS5oIgotI2lu
Y2x1ZGUgIkpTV2ViR0xEcmF3QnVmZmVycy5oIgotI2luY2x1ZGUgIkpTV2ViR0xGcmFtZWJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkpTV2ViR0xMb3NlQ29udGV4dC5oIgotI2luY2x1ZGUgIkpTV2ViR0xQ
cm9ncmFtLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgIkpT
V2ViR0xTaGFkZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMVGV4dHVyZS5oIgotI2luY2x1ZGUgIkpT
V2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKLSNpbmNsdWRlICJKU1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVMuaCIKLSNpbmNsdWRlICJKU1dlYktpdENTU01hdHJpeC5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgotI2luY2x1ZGUg
Ik9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIK
LSNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJl
SGFsZkZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgotI2lu
Y2x1ZGUgIk9FU1ZlcnRleEFycmF5T2JqZWN0LmgiCi0jaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIK
LSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCi0jaW5jbHVkZSAiV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVMzVEMuaCIKLSNpbmNsdWRlICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCi0jaW5jbHVkZSAi
V2ViR0xEZWJ1Z1NoYWRlcnMuaCIKLSNpbmNsdWRlICJXZWJHTERlcHRoVGV4dHVyZS5oIgotI2lu
Y2x1ZGUgIldlYkdMRHJhd0J1ZmZlcnMuaCIKLSNpbmNsdWRlICJXZWJHTEV4dGVuc2lvbi5oIgot
I2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJXZWJHTEdldEluZm8uaCIK
LSNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgi
Ci0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRl
IDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVkZSAiSFRNTFZpZGVv
RWxlbWVudC5oIgotI2luY2x1ZGUgIkpTSFRNTFZpZGVvRWxlbWVudC5oIgotI2VuZGlmCi0KIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEpTVmFs
dWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFdlYkdMR2V0SW5mbyYgaW5mbykKLXsKLSAgICBzd2l0Y2ggKGluZm8uZ2V0VHlwZSgp
KSB7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlQm9vbDoKLSAgICAgICAgcmV0dXJuIGpz
Qm9vbGVhbihpbmZvLmdldEJvb2woKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlQm9v
bEFycmF5OiB7Ci0gICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGNv
bnN0IFZlY3Rvcjxib29sPiYgdmFsdWUgPSBpbmZvLmdldEJvb2xBcnJheSgpOwotICAgICAgICBm
b3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgdmFsdWUuc2l6ZSgpOyArK2lpKQotICAgICAgICAgICAg
bGlzdC5hcHBlbmQoanNCb29sZWFuKHZhbHVlW2lpXSkpOwotICAgICAgICByZXR1cm4gY29uc3Ry
dWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9Ci0gICAgY2FzZSBX
ZWJHTEdldEluZm86OmtUeXBlRmxvYXQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdl
dEZsb2F0KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUludDoKLSAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKGluZm8uZ2V0SW50KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlw
ZU51bGw6Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6
a1R5cGVTdHJpbmc6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbmZv
LmdldFN0cmluZygpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVVbnNpZ25lZEludDoK
LSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZm8uZ2V0VW5zaWduZWRJbnQoKSk7Ci0gICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xCdWZmZXI6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEJ1ZmZlcigpKTsKLSAgICBjYXNlIFdlYkdM
R2V0SW5mbzo6a1R5cGVXZWJHTEZsb2F0QXJyYXk6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEZsb2F0QXJyYXkoKSk7Ci0gICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlV2ViR0xGcmFtZWJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMRnJhbWVidWZmZXIoKSk7Ci0gICAgY2FzZSBX
ZWJHTEdldEluZm86OmtUeXBlV2ViR0xJbnRBcnJheToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMSW50QXJyYXkoKSk7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudCBXZWJHTE9iamVjdEFycmF5Ci0gICAgLy8gY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xPYmplY3RBcnJheToKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFBy
b2dyYW06Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRX
ZWJHTFByb2dyYW0oKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xSZW5kZXJi
dWZmZXI6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRX
ZWJHTFJlbmRlcmJ1ZmZlcigpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFRl
eHR1cmU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRX
ZWJHTFRleHR1cmUoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZv
LmdldFdlYkdMVW5zaWduZWRCeXRlQXJyYXkoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xVbnNpZ25lZEludEFycmF5OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEludEFycmF5KCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6Ci0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTKCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLX0KLQotZW51bSBPYmplY3RUeXBlIHsKLSAg
ICBrQnVmZmVyLCBrUmVuZGVyYnVmZmVyLCBrVGV4dHVyZSwga1ZlcnRleEF0dHJpYgotfTsKLQot
c3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVyKEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBvYmosIEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0VHlwZSBvYmplY3RUeXBlKQotewotICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
JiBjb250ZXh0ID0gb2JqLT5pbXBsKCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVuc2lnbmVkIHBuYW1l
ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdl
YkdMR2V0SW5mbyBpbmZvOwotICAgIHN3aXRjaCAob2JqZWN0VHlwZSkgewotICAgIGNhc2Uga0J1
ZmZlcjoKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0QnVmZmVyUGFyYW1ldGVyKHRhcmdldCwg
cG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrUmVuZGVyYnVmZmVyOgotICAg
ICAgICBpbmZvID0gY29udGV4dC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFt
ZSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtUZXh0dXJlOgotICAgICAgICBpbmZv
ID0gY29udGV4dC5nZXRUZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI6Ci0gICAgICAgIC8vIHRhcmdldCA9PiBpbmRl
eAotICAgICAgICBpbmZvID0gY29udGV4dC5nZXRWZXJ0ZXhBdHRyaWIodGFyZ2V0LCBwbmFtZSwg
ZWMpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBvYmotPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0K
LQotZW51bSBXaGljaFByb2dyYW1DYWxsIHsKLSAgICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZv
cm0KLX07Ci0KLXN0YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uKQotewotICAg
IGlmICghZXh0ZW5zaW9uKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgc3dpdGNoIChl
eHRlbnNpb24tPmdldE5hbWUoKSkgewotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMTG9z
ZUNvbnRleHROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PFdlYkdMTG9zZUNvbnRleHQqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdM
RXh0ZW5zaW9uOjpFWFRTaGFkZXJUZXh0dXJlTE9ETmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRTaGFkZXJUZXh0dXJlTE9EKj4oZXh0
ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMqPihleHRlbnNpb24pKTsKLSAgICBj
YXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRzUkdCTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRzUkdCKj4oZXh0ZW5zaW9uKSk7Ci0gICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhURnJhZ0RlcHRoTmFtZToKLSAgICAgICAgcmV0dXJuIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRGcmFnRGVwdGgqPihleHRlbnNp
b24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRCbGVuZE1pbk1heE5hbWU6Ci0gICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUQmxlbmRN
aW5NYXgqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNTdGFuZGFy
ZERlcml2YXRpdmVzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxPRVNTdGFuZGFyZERlcml2YXRpdmVzKj4oZXh0ZW5zaW9uKSk7Ci0gICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TmFtZToKLSAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXQqPihl
eHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXRMaW5l
YXJOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PE9FU1RleHR1cmVGbG9hdExpbmVhcio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXQqPihleHRl
bnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0TGlu
ZWFyTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBX
ZWJHTEV4dGVuc2lvbjo6T0VTVmVydGV4QXJyYXlPYmplY3ROYW1lOgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1ZlcnRleEFycmF5T2JqZWN0
Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTRWxlbWVudEluZGV4
VWludE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTRWxlbWVudEluZGV4VWludCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRGVidWdSZW5kZXJlckluZm9OYW1lOgotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVidWdSZW5kZXJlckluZm8q
PihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlYnVnU2hhZGVy
c05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8V2ViR0xEZWJ1Z1NoYWRlcnMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMqPihleHRlbnNpb24pKTsK
LSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQ05hbWU6
Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVEMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpXZWJHTERlcHRoVGV4dHVyZU5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZXB0aFRleHR1cmUqPihleHRlbnNpb24p
KTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERyYXdCdWZmZXJzTmFtZToKLSAgICAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERyYXdC
dWZmZXJzKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6QU5HTEVJbnN0
YW5jZWRBcnJheXNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PEFOR0xFSW5zdGFuY2VkQXJyYXlzKj4oZXh0ZW5zaW9uKSk7Ci0gICAgfQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBqc051bGwoKTsKLX0KLQogdm9p
ZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZpbXBsKCkpOwog
fQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMo
RXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQot
ICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KGV4ZWMpOwotICAgIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJzOwotICAgIGJv
b2wgc3VjY2VlZCA9IGNvbnRleHQuZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIHNoYWRlcnMs
IGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
LSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIH0KLSAgICBpZiAoIXN1Y2NlZWQpCi0gICAg
ICAgIHJldHVybiBqc051bGwoKTsKLSAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7
Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHNoYWRlcnMuc2l6ZSgpOyArK2lpKQotICAg
ICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBzaGFkZXJzW2lpXS5n
ZXQoKSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3Qo
KSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVu
c2lvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBjb25zdCBTdHJpbmcgbmFtZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24gPSBjb250ZXh0LmdldEV4dGVuc2lvbihuYW1lKTsK
LSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgZXh0ZW5zaW9uKTsKLX0KLQot
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMs
IGtCdWZmZXIpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhy
b3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBj
b250ZXh0ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVuc2ln
bmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXIodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgZWMpOwotICAgIGlmIChlYykg
ewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0
ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0g
MSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIHVu
c2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUs
IGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQm
IGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFBy
b2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFw
cm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgdW5zaWduZWQgcG5h
bWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
V2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwg
cG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtSZW5kZXJidWZm
ZXIpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJh
bWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
IT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAg
IGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAh
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaW5oZXJpdHMoSlNXZWJHTFNoYWRlcjo6aW5mbygp
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMU2hhZGVy
KiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSku
dG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRT
aGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwot
fQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTdXBwb3J0ZWRFeHRlbnNp
b25zKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRl
eHQgPSBpbXBsKCk7Ci0gICAgaWYgKGNvbnRleHQuaXNDb250ZXh0TG9zdCgpKQotICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFsdWUgPSBjb250ZXh0LmdldFN1
cHBvcnRlZEV4dGVuc2lvbnMoKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAg
IGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsraWkpCi0gICAgICAgIGxp
c3QuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHZhbHVlW2lpXSkpOwotICAgIHJldHVy
biBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KLUpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcihFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVGV4
dHVyZSk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0o
RXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikK
LSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMpOwotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xV
bmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0g
ICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdl
YkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRVbmlmb3JtKHByb2dyYW0sIGxvY2F0aW9uLCBl
Yyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFZlcnRleEF0dHJpYihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdl
dE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVmVydGV4QXR0cmliKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotYm9vbCB0b1ZlY3RvcihKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHk+JiB2ZWN0b3IpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1
ZSk7Ci0gICAgaW50MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkudG9JbnQzMihleGVjKTsKLQotICAgIGlmICghdmVjdG9yLnRy
eVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmVj
dG9yLnJlc2l6ZShsZW5ndGgpOwotCi0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBvYmplY3QtPmdldChleGVjLCBpKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB2ZWN0b3JbaV0gPSBzdGF0aWNfY2FzdDxUPih2LnRvTnVtYmVyKGV4ZWMp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZW51bSBEYXRhRnVuY3Rpb25Ub0Nh
bGwgewotICAgIGZfdW5pZm9ybTF2LCBmX3VuaWZvcm0ydiwgZl91bmlmb3JtM3YsIGZfdW5pZm9y
bTR2LAotICAgIGZfdmVydGV4QXR0cmliMXYsIGZfdmVydGV4QXR0cmliMnYsIGZfdmVydGV4QXR0
cmliM3YsIGZfdmVydGV4QXR0cmliNHYKLX07Ci0KLWVudW0gRGF0YUZ1bmN0aW9uTWF0cml4VG9D
YWxsIHsKLSAgICBmX3VuaWZvcm1NYXRyaXgyZnYsIGZfdW5pZm9ybU1hdHJpeDNmdiwgZl91bmlm
b3JtTWF0cml4NGZ2Ci19OwotCi1zdGF0aWMgYm9vbCBmdW5jdGlvbkZvclVuaWZvcm0oRGF0YUZ1
bmN0aW9uVG9DYWxsIGYpCi17Ci0gICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBmX3VuaWZvcm0x
djoKLSAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgIGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgY2Fz
ZSBmX3VuaWZvcm00djoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDogYnJlYWs7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRh
RnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIAotICAgIFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IDA7Ci0gICAgbG9uZyBpbmRleCA9IC0xOwotICAg
IAotICAgIGlmIChmdW5jdGlvbkZvclVuaWZvcm0oZikpIHsKLSAgICAgICAgbG9jYXRpb24gPSBK
U1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOwotICAgICAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KGV4ZWMpOwotICAgIH0gZWxzZQotICAgICAgICBpbmRleCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLnRvSW50MzIoZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAKLSAgICBSZWZQdHI8RmxvYXQz
MkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgICAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBpZiAod2ViR0xBcnJheSkgewotICAgICAgICBzd2l0Y2ggKGYpIHsKLSAgICAgICAgY2FzZSBm
X3VuaWZvcm0xdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTFmdihsb2NhdGlvbiwgd2Vi
R0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91
bmlmb3JtMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0yZnYobG9jYXRpb24sIHdlYkdM
QXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5p
Zm9ybTN2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB3ZWJHTEFy
cmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZv
cm00djoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlvbiwgd2ViR0xBcnJh
eS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhB
dHRyaWIxdjoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2KGluZGV4LCB3ZWJH
TEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4
QXR0cmliMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjJmdihpbmRleCwgd2Vi
R0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRl
eEF0dHJpYjN2OgotICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHdl
YkdMQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0
ZXhBdHRyaWI0djoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliNGZ2KGluZGV4LCB3
ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBp
ZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQotICAgIHN3aXRjaCAoZikgewot
ICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTFmdihsb2NhdGlv
biwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCBh
cnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IGZfdW5pZm9ybTN2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5
LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91
bmlmb3JtNHY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkuZGF0
YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRl
eEF0dHJpYjF2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXku
ZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdmVydGV4
QXR0cmliMnY6Ci0gICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5k
YXRhKCksIGFycmF5LnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhB
dHRyaWIzdjoKLSAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5LmRh
dGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRleEF0
dHJpYjR2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkuZGF0
YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQot
c3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewot
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOwotCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVu
aWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAg
ICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gIAotICAg
IFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9JbnQzMkFycmF5KGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmICh3
ZWJHTEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikgewotICAgICAgICBjYXNlIGZfdW5pZm9y
bTF2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxvY2F0aW9uLCB3ZWJHTEFycmF5
LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0y
djoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5n
ZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtM3Y6
Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0
KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTR2Ogot
ICAgICAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgp
LCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLQotICAgIFZl
Y3RvcjxpbnQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjKTsKLQotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAg
IGNvbnRleHQudW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgY29u
dGV4dC51bmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICBjb250ZXh0
LnVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIGNvbnRleHQudW5p
Zm9ybTRpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19
Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5jdGlvbk1h
dHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0
JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKLSAgICAg
ICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7Ci0KLSAgICBib29sIHRyYW5zcG9zZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0gICAgUmVmUHRyPEZsb2F0MzJB
cnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDIpKTsKLSAgICAgICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHdlYkdM
QXJyYXkpIHsKLSAgICAgICAgc3dpdGNoIChmKSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtTWF0
cml4MmZ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDNmdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9y
bU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6Ci0gICAg
ICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2Vi
R0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OwotICAg
IGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkK
LSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotCi0gICAgc3dpdGNoIChmKSB7
Ci0gICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybU1h
dHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwg
ZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDNmdjoKLSAgICAg
ICAgY29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRh
dGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlm
b3JtTWF0cml4NGZ2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24s
IHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25mKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7Ci19
Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0y
diwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRh
RnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7
Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZv
cm0zdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBk
YXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwo
KSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1h
dHJpeDJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
TWF0cml4KGZfdW5pZm9ybU1hdHJpeDJmdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0
cml4M2Z2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXg0ZnYsIGV4ZWMsIGltcGwo
KSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25m
KGZfdmVydGV4QXR0cmliMXYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMnYsIGV4ZWMsIGlt
cGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rp
b25mKGZfdmVydGV4QXR0cmliM3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KEpTQzo6RXhlY1N0YXRlKiBl
eGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliNHYsIGV4ZWMs
IGltcGwoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjk4
Myw3ICsyOTgzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIGlm
IChHZXRHZW5lcmF0ZUlzUmVhY2hhYmxlKCRpbnRlcmZhY2UpIGVxICJJbXBsIikgewogICAgICAg
ICAgICAgICAgICRyb290U3RyaW5nICA9ICIgICAgJHtpbXBsVHlwZX0qIHJvb3QgPSAmanMke2lu
dGVyZmFjZU5hbWV9LT5pbXBsKCk7XG4iOwogICAgICAgICAgICAgfSBlbHNpZiAoR2V0R2VuZXJh
dGVJc1JlYWNoYWJsZSgkaW50ZXJmYWNlKSBlcSAiSW1wbFdlYkdMUmVuZGVyaW5nQ29udGV4dCIp
IHsKLSAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCogcm9vdCA9IFdURjo6Z2V0UHRyKGpzJHtpbnRlcmZhY2VOYW1lfS0+aW1wbCgpLmNvbnRl
eHQoKSk7XG4iOworICAgICAgICAgICAgICAgICRyb290U3RyaW5nICA9ICIgICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogcm9vdCA9IFdURjo6Z2V0UHRyKGpzJHtpbnRlcmZhY2VOYW1lfS0+
aW1wbCgpLmNvbnRleHQoKSk7XG4iOwogICAgICAgICAgICAgfSBlbHNpZiAoR2V0R2VuZXJhdGVJ
c1JlYWNoYWJsZSgkaW50ZXJmYWNlKSBlcSAiSW1wbEZyYW1lIikgewogICAgICAgICAgICAgICAg
ICRyb290U3RyaW5nICA9ICIgICAgRnJhbWUqIHJvb3QgPSBXVEY6OmdldFB0cihqcyR7aW50ZXJm
YWNlTmFtZX0tPmltcGwoKS5mcmFtZSgpKTtcbiI7CiAgICAgICAgICAgICAgICAgJHJvb3RTdHJp
bmcgLj0gIiAgICBpZiAoIXJvb3QpXG4iOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBA
CiAKICNpZiBFTkFCTEUoV0VCR0wpICAgIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMjEyLDcgKzIxMiw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVt
ZW4KICAgICAgICAgICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+aXMzZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZSh0aGlzLCBzdGF0aWNfY2FzdDxXZWJHTENvbnRleHRBdHRyaWJ1dGVzKj4oYXR0cnMpKTsK
KyAgICAgICAgICAgICAgICBtX2NvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpj
cmVhdGUodGhpcywgc3RhdGljX2Nhc3Q8V2ViR0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSwg
dHlwZSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBs
YXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcwogICAgICAgICAgICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKQEAgLTMyNyw3ICszMjcsNyBA
QCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiAKICNpZiBFTkFCTEUoV0VCR0wpCiAg
ICAgaWYgKGlzM0QoKSAmJiBvbGRTaXplICE9IHNpemUoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKS0+cmVzaGFwZSh3aWR0aCgp
LCBoZWlnaHQoKSk7CisgICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UqPihtX2NvbnRleHQuZ2V0KCkpLT5yZXNoYXBlKHdpZHRoKCksIGhlaWdodCgpKTsKICNlbmRp
ZgogCiAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKSB7CkBAIC0zOTQs
NyArMzk0LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDbwogCiAj
aWYgRU5BQkxFKFdFQkdMKSAgICAKICAgICBpZiAoaXMzRCgpKQotICAgICAgICBzdGF0aWNfY2Fz
dDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpLT5tYXJrTGF5ZXJDb21w
b3NpdGVkKCk7CisgICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
PihtX2NvbnRleHQuZ2V0KCkpLT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAjZW5kaWYKIH0KIApA
QCAtNDc1LDcgKzQ3NSw3IEBAIFJlZlB0cjxJbWFnZURhdGE+IEhUTUxDYW52YXNFbGVtZW50Ojpn
ZXQKICAgICBpZiAoIWlzM0QoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4
ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSo+KG1fY29udGV4dC5nZXQo
KSk7CiAKICAgICByZXR1cm4gY3R4LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
OwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2Vk
QXJyYXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdM
RUluc3RhbmNlZEFycmF5cy5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUFOR0xFSW5zdGFuY2VkQXJy
YXlzOjpBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
CitBTkdMRUluc3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRBcnJheXMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7
CiB9CkBAIC00OCw3ICs0OCw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIEFOR0xF
SW5zdGEKICAgICByZXR1cm4gQU5HTEVJbnN0YW5jZWRBcnJheXNOYW1lOwogfQogCi1ib29sIEFO
R0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQorYm9vbCBBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAjaWYgUExBVEZPUk0oSU9TKSB8fCBQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgIFVOVVNF
RF9QQVJBTShjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xF
SW5zdGFuY2VkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMTYgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKIAogY2xh
c3MgQU5HTEVJbnN0YW5jZWRBcnJheXMgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewog
cHVibGljOgotICAgIGV4cGxpY2l0IEFOR0xFSW5zdGFuY2VkQXJyYXlzKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOworICAgIGV4cGxpY2l0IEFOR0xFSW5zdGFuY2VkQXJyYXlzKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5BTkdMRUluc3RhbmNlZEFycmF5cygpOwog
CiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdDsKIAotICAgIHN0YXRp
YyBib29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBzdGF0aWMgYm9v
bCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdm9pZCBkcmF3
QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
emVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKICAgICB2b2lkIGRyYXdFbGVtZW50c0lu
c3RhbmNlZEFOR0xFKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlw
ZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCShy
ZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDkgQEAgcHVibGljOgog
ICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhczsg
fQogCiAgICAgdmlydHVhbCBib29sIGlzMmQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNXZWJHTDEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1dlYkdMMigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpczNkKCkgY29u
c3QgeyByZXR1cm4gaXNXZWJHTDEoKSB8fCBpc1dlYkdMMSgpOyB9CiAgICAgdmlydHVhbCBib29s
IGlzQWNjZWxlcmF0ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCB2
b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkge30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5jcHAJKHJldmlzaW9uIDE3ODYwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVEJs
ZW5kTWluTWF4OjpFWFRCbGVuZE1pbk1heChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
CitFWFRCbGVuZE1pbk1heDo6RVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmgJKHJldmlzaW9uIDE3
ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBFWFRCbGVuZE1pbk1heCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgRVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7Cisg
ICAgZXhwbGljaXQgRVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwog
ICAgIHZpcnR1YWwgfkVYVEJsZW5kTWluTWF4KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5h
bWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvRVhURnJhZ0RlcHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9FWFRGcmFnRGVwdGguY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRVhURnJhZ0RlcHRoOjpFWFRGcmFn
RGVwdGgoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorRVhURnJhZ0RlcHRoOjpFWFRG
cmFnRGVwdGgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdM
RXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9FWFRGcmFnRGVwdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9FWFRGcmFnRGVwdGguaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRVhURnJhZ0RlcHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFWFRGcmFnRGVwdGggZmluYWwgOiBwdWJsaWMg
V2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0IEVYVEZyYWdEZXB0aChXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBsaWNpdCBFWFRGcmFnRGVwdGgoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVYVEZyYWdEZXB0aCgpOwogCiAgICAg
dmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3Bw
CShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFk
ZXJUZXh0dXJlTE9ELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUVYVFNoYWRlclRleHR1cmVMT0Q6OkVYVFNoYWRlclRleHR1cmVM
T0QoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorRVhUU2hhZGVyVGV4dHVyZUxPRDo6
RVhUU2hhZGVyVGV4dHVyZUxPRChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQog
ICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmgJKHJldmlzaW9uIDE3ODYw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEVYVFNoYWRlclRleHR1cmVMT0QgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewog
cHVibGljOgotICAgIGV4cGxpY2l0IEVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgZXhwbGljaXQgRVhUU2hhZGVyVGV4dHVyZUxPRChXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+RVhUU2hhZGVyVGV4dHVyZUxPRCgpOwogCiAg
ICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljLmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpYzo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzo6RVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQp
CiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
LmgJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
IGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBF
WFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAg
ZXhwbGljaXQgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMoKTsKIAog
ICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmNwcAkocmV2aXNpb24gMTc4NjA0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUc1JHQi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FWFRzUkdCOjpFWFRz
UkdCKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK0VYVHNSR0I6OkVYVHNSR0IoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNv
bnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUc1JHQi5oCShyZXZp
c2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBFWFRzUkdCIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBFWFRzUkdCKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0IEVY
VHNSR0IoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVYVHNSR0Io
KTsKIAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5k
ZXhVaW50LmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvT0VTRWxlbWVudEluZGV4VWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNFbGVtZW50SW5kZXhVaW50OjpPRVNFbGVt
ZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU0VsZW1lbnRJ
bmRleFVpbnQ6Ok9FU0VsZW1lbnRJbmRleFVpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSog
Y29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oCShyZXZp
c2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5k
ZXhVaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBPRVNFbGVtZW50SW5kZXhVaW50IGZpbmFsIDogcHVibGljIFdlYkdMRXh0
ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBPRVNFbGVtZW50SW5kZXhVaW50KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0IE9FU0VsZW1lbnRJbmRleFVpbnQoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU0VsZW1lbnRJbmRleFVp
bnQoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRp
dmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFu
ZGFyZERlcml2YXRpdmVzLmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNTdGFuZGFyZERlcml2
YXRpdmVzOjpPRVNTdGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK09FU1N0YW5kYXJkRGVyaXZhdGl2ZXM6Ok9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNv
bnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFy
ZERlcml2YXRpdmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
T0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNTdGFuZGFy
ZERlcml2YXRpdmVzIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBPRVNTdGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OworICAgIGV4cGxpY2l0IE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoKTsKIAogICAg
IHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHAJKHJldmlz
aW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9h
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1PRVNUZXh0dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCitPRVNUZXh0dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdChXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4
dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9h
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVG
bG9hdC5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNUZXh0dXJlRmxvYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIE9FU1RleHR1cmVGbG9hdCBmaW5hbCA6IHB1YmxpYyBXZWJH
TEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgT0VTVGV4dHVyZUZsb2F0KFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOworICAgIE9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Kik7CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUZsb2F0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVu
c2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwCShyZXZpc2lv
biAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRM
aW5lYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotT0VTVGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRMaW5lYXIo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VTVGV4dHVyZUZsb2F0TGluZWFyOjpP
RVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkK
ICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuaAkocmV2aXNpb24g
MTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGlu
ZWFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBPRVNUZXh0dXJlRmxvYXRMaW5lYXIgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRl
bnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0IE9FU1RleHR1cmVGbG9hdExpbmVhcihXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBsaWNpdCBPRVNUZXh0dXJlRmxvYXRMaW5lYXIo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVGbG9h
dExpbmVhcigpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBv
dmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxm
RmxvYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1Rl
eHR1cmVIYWxmRmxvYXQuY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxvYXQ6
Ok9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VT
VGV4dHVyZUhhbGZGbG9hdDo6T0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0
LmgJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1Rl
eHR1cmVIYWxmRmxvYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXQgZmluYWwgOiBwdWJsaWMg
V2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIE9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUhhbGZGbG9hdCgpOwogCiAg
ICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxm
RmxvYXRMaW5lYXIuY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxv
YXRMaW5lYXI6Ok9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0KQorT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUhhbGZGbG9h
dExpbmVhcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xF
eHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgJKHJldmlzaW9uIDE3ODYw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgZmluYWwgOiBwdWJsaWMgV2ViR0xF
eHRlbnNpb24gewogcHVibGljOgotICAgIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUhhbGZGbG9hdExp
bmVhcigpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVy
cmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0
ZXhBcnJheU9iamVjdC5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1ZlcnRleEFycmF5T2JqZWN0
OjpPRVNWZXJ0ZXhBcnJheU9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitP
RVNWZXJ0ZXhBcnJheU9iamVjdDo6T0VTVmVydGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5
T2JqZWN0LmgJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L09FU1ZlcnRleEFycmF5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwxNCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsK
K2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiBjbGFzcyBXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBPRVNWZXJ0
ZXhBcnJheU9iamVjdCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0g
ICAgT0VTVmVydGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgT0VT
VmVydGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1
YWwgfk9FU1ZlcnRleEFycmF5T2JqZWN0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUg
Z2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdF
QkdMKQorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDJSZW5kZXJpbmdDb250ZXh0
KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKHBhc3Nl
ZENhbnZhcywgYXR0cmlidXRlcykKK3sKK30KKworV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2Vi
R0wyUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LAorICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShwYXNz
ZWRDYW52YXMsIGNvbnRleHQsIGF0dHJpYnV0ZXMpCit7Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkdMMlJlbmRlcmluZ0NvbnRleHRfaAorI2Rl
ZmluZSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0X2gKKworI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Ugewor
cHVibGljOgorICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CisgICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dChIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CisgICAgdmlydHVhbCBib29sIGlzV2ViR0wyKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K1sKKyAgICBDb25kaXRpb25hbD1XRUJHTCwKKyAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKKyAg
ICBEb05vdENoZWNrQ29uc3RhbnRzLAorXSBpbnRlcmZhY2UgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dCA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgeworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKIAogI2luY2x1ZGUgIldl
YkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMQnVmZmVyOjpjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTEJ1ZmZl
cjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYkdMQnVmZmVyKGN0eCkpOwogfQogCi1XZWJHTEJ1ZmZlcjo6V2ViR0xC
dWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTEJ1ZmZlcjo6V2ViR0xCdWZm
ZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmpl
Y3QoY3R4KQogICAgICwgbV90YXJnZXQoMCkKICAgICAsIG1fYnl0ZUxlbmd0aCgwKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCShyZXZpc2lvbiAxNzg2MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFdlYkdMQnVmZmVyIGZpbmFsIDogcHVibGljIFdl
YkdMU2gKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTEJ1ZmZlcigpOwogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqKTsKIAogICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyRGF0YShHQzNEc2l6ZWlw
dHIgc2l6ZSk7CiAgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhKEpTQzo6QXJyYXlCdWZmZXIq
KTsKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXZlckJlZW5Cb3VuZCgp
IGNvbnN0IHsgcmV0dXJuIG9iamVjdCgpICYmIG1fdGFyZ2V0OyB9CiAKIHByb3RlY3RlZDoKLSAg
ICBXZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBXZWJHTEJ1ZmZlcihX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDLmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OldlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiAgICAgY29udGV4dC0+YWRkQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EKTsKQEAgLTUw
LDcgKzUwLDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xDb21wcgogICAg
IHJldHVybiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDTmFtZTsKIH0KIAotYm9vbCBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQorYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lv
bnMgPSBjb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CiAgICAg
cmV0dXJuIGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVy
ZSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVBVEMuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMCArMzQsMTAgQEAgY2xhc3MgV2ViR0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOworICAgIGV4cGxpY2l0IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1
cmVBVEMoKTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlk
ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6V2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBX
ZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogICAgIGNvbnRleHQtPmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyk7
CkBAIC01Miw3ICs1Miw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMQ29t
cHIKICAgICByZXR1cm4gV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDTmFtZTsKIH0KIAotYm9v
bCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCitib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9y
dGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9u
czNEKiBleHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5z
aW9ucygpOwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfSU1HX3RleHR1cmVf
Y29tcHJlc3Npb25fcHZydGMiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oCShyZXZpc2lvbiAxNzg2
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDIGZpbmFsIDogcHVibGlj
IFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2
aXJ0dWFsIH5XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMoKTsKIAotICAgIHN0YXRpYyBib29s
IHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBw
b3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgRXh0ZW5zaW9u
TmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMu
Y3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwx
MSBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCiAKICNpbmNsdWRl
ICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKICAgICBjb250
ZXh0LT5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQpOwpAQCAtNTIsNyArNTIsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0
ZW5zaW9uTmFtZSBXZWJHTENvbXByCiAgICAgcmV0dXJuIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDTmFtZTsKIH0KIAotYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVk
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQog
ewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4
dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKICAgICByZXR1cm4gZXh0ZW5zaW9ucy0+c3VwcG9ydHMo
IkdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGMiKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oCShy
ZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgY2xh
c3MgV2ViR0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGlj
aXQgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSop
OwogICAgIHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKCk7CiAKLSAgICBzdGF0
aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJv
b2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwg
RXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAkocmV2aXNp
b24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3Jv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViR0xD
b250ZXh0R3JvdXAuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTUzLDE2ICs1MywxNiBAQCBXZWJHTENvbnRleHRHcm91cDo6fldlYkdMQ29u
dGV4dEdyb3VwKCkKIEdyYXBoaWNzQ29udGV4dDNEKiBXZWJHTENvbnRleHRHcm91cDo6Z2V0QUdy
YXBoaWNzQ29udGV4dDNEKCkKIHsKICAgICBBU1NFUlQoIW1fY29udGV4dHMuaXNFbXB0eSgpKTsK
LSAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+OjppdGVyYXRvciBpdCA9IG1fY29u
dGV4dHMuYmVnaW4oKTsKKyAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqPjo6
aXRlcmF0b3IgaXQgPSBtX2NvbnRleHRzLmJlZ2luKCk7CiAgICAgcmV0dXJuICgqaXQpLT5ncmFw
aGljc0NvbnRleHQzRCgpOwogfQogCi12b2lkIFdlYkdMQ29udGV4dEdyb3VwOjphZGRDb250ZXh0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6
OmFkZENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBt
X2NvbnRleHRzLmFkZChjb250ZXh0KTsKIH0KIAotdm9pZCBXZWJHTENvbnRleHRHcm91cDo6cmVt
b3ZlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIFdlYkdMQ29u
dGV4dEdyb3VwOjpyZW1vdmVDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRl
eHQpCiB7CiAgICAgLy8gV2UgbXVzdCBjYWxsIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMgYmVm
b3JlIHJlbW92aW5nIHRoZSBsYXN0IGNvbnRleHQuCiAgICAgaWYgKG1fY29udGV4dHMuc2l6ZSgp
ID09IDEgJiYgbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKQEAgLTg5LDkgKzg5LDkgQEAg
dm9pZCBXZWJHTENvbnRleHRHcm91cDo6ZGV0YWNoQW5kUmVtb3ZlQQogICAgIH0KIH0KIAotdm9p
ZCBXZWJHTENvbnRleHRHcm91cDo6bG9zZUNvbnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQordm9pZCBXZWJHTENvbnRleHRHcm91cDo6bG9zZUNv
bnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9k
ZSkKIHsKLSAgICBmb3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9y
IGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQor
ICAgIGZvciAoSGFzaFNldDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj46Oml0ZXJhdG9yIGl0
ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQogICAg
ICAgICAoKml0KS0+bG9zZUNvbnRleHRJbXBsKG1vZGUpOwogCiAgICAgZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250
ZXh0R3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbnRleHRHcm91cC5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaWZuZGVmIFdlYkdMQ29udGV4dEdyb3VwX2gKICNkZWZpbmUgV2ViR0xDb250ZXh0R3Jv
dXBfaAogCi0jaW5jbHVkZSA8V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg+CisjaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAt
MzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKIGNsYXNzIFdlYkdMRXh0ZW5zaW9uOwogY2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7Ci1jbGFz
cyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC00NSwxNSArNDUsMTUgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjcmVhdGUoKTsK
ICAgICB+V2ViR0xDb250ZXh0R3JvdXAoKTsKIAotICAgIHZvaWQgYWRkQ29udGV4dChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgdm9pZCBhZGRDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwog
CiAgICAgdm9pZCBhZGRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKICAgICB2b2lkIHJlbW92
ZU9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdl
dEFHcmFwaGljc0NvbnRleHQzRCgpOwogCi0gICAgdm9pZCBsb3NlQ29udGV4dEdyb3VwKFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlKTsKKyAgICB2b2lkIGxvc2VDb250ZXh0
R3JvdXAoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlKTsKIAogICBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKQEAgLTYyLDcgKzYyLDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CiAKLSAgICBI
YXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+IG1fY29udGV4dHM7CisgICAgSGFzaFNldDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4gbV9jb250ZXh0czsKICAgICBIYXNoU2V0PFdlYkdM
U2hhcmVkT2JqZWN0Kj4gbV9ncm91cE9iamVjdHM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAJKHJldmlzaW9uIDE3
ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiV2ViR0xD
b250ZXh0T2JqZWN0LmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQorV2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmpl
Y3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMT2JqZWN0
KGNvbnRleHQpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCShyZXZpc2lvbiAxNzg2
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIC8vIFdlYkdMQ29udGV4dE9iamVjdCB0
aGUgYmFzZSBjbGFzcyBmb3Igb2JqZWN0cyB0aGF0IGFyZSBvd25lZCBieSBhIHNwZWNpZmljCiAv
LyBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCkBAIC0zOSw5ICszOSw5IEBAIGNsYXNzIFdlYkdMQ29u
dGV4dE9iamVjdCA6IHB1YmxpYyBXZWJHTE8KIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTENv
bnRleHRPYmplY3QoKTsKIAotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAotICAgIHZpcnR1YWwgYm9v
bCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRh
dGUoY29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbnRl
eHQgPT0gbV9jb250ZXh0OwogICAgIH0KQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZGV0YWNoQ29udGV4dCgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xDb250ZXh0T2JqZWN0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdMQ29udGV4dE9iamVjdChXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzR3JvdXBPckNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZQogICAgIHsKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9j
b250ZXh0OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwCShyZXZpc2lvbiAxNzg2MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAKICNpbmNsdWRlICJXZWJHTERl
YnVnUmVuZGVyZXJJbmZvLmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQp
CiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaAkocmV2aXNp
b24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgVU5NQVNLRURfUkVOREVSRVJfV0VCR0wgPSAweDkyNDYKICAgICB9OwogCi0gICAgZXhwbGlj
aXQgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBl
eHBsaWNpdCBXZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKICAgICB2aXJ0dWFsIH5XZWJHTERlYnVnUmVuZGVyZXJJbmZvKCk7CiAKICAgICB2aXJ0dWFs
IEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcAkocmV2aXNpb24g
MTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlICJXZWJHTERl
YnVnU2hhZGVycy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V2ViR0xEZWJ1Z1NoYWRlcnM6OldlYkdMRGVidWdTaGFkZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK1dlYkdMRGVidWdTaGFkZXJzOjpXZWJHTERlYnVnU2hhZGVycyhXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4
dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFk
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1
Z1NoYWRlcnMuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBXZWJHTERlYnVnU2hhZGVycyBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xE
ZWJ1Z1NoYWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xE
ZWJ1Z1NoYWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldl
YkdMRGVidWdTaGFkZXJzKCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgp
IGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xE
ZXB0aFRleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRGVwdGhUZXh0dXJlLmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xEZXB0aFRleHR1cmU6
OldlYkdMRGVwdGhUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdM
RGVwdGhUZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaAkocmV2aXNp
b24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9u
IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xEZXB0aFRleHR1cmUoKTsKIAogICAg
IHN0YXRpYyBib29sIHN1cHBvcnRlZChHcmFwaGljc0NvbnRleHQzRCopOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAJKHJldmlzaW9u
IDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xEcmF3QnVmZmVyczo6V2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCitXZWJHTERyYXdCdWZmZXJzOjpXZWJHTERyYXdCdWZmZXJzKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250
ZXh0KQogewogfQpAQCAtNDgsMTQgKzQ4LDE0IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25O
YW1lIFdlYkdMRHJhd0IKIAogI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPCAxMDEwMDApCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9y
dGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopCitib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKICNlbHNlCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBl
eHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygp
OwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX2RyYXdfYnVmZmVycyIp
CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgV2ViR0xEcmF3QnVmZmVyczo6ZHJhd0J1ZmZlcnNXRUJH
TCgKIH0KIAogLy8gc3RhdGljCi1ib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnNhdGlzZmllc1dlYkdM
UmVxdWlyZW1lbnRzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogd2ViZ2xDb250ZXh0KQorYm9vbCBX
ZWJHTERyYXdCdWZmZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiB3ZWJnbENvbnRleHQpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSB3ZWJnbENvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmgJKHJldmlzaW9uIDE3
ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgV2ViR0xEcmF3QnVmZmVycyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTERyYXdCdWZmZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5XZWJHTERyYXdCdWZmZXJzKCk7CiAKLSAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wg
c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgRXh0
ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdCdWZm
ZXJzV0VCR0woY29uc3QgVmVjdG9yPEdDM0RlbnVtPiYgYnVmZmVycyk7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIGJvb2wgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmNwcAko
cmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRl
bnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotV2ViR0xFeHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK1dlYkdMRXh0ZW5zaW9uOjpXZWJHTEV4dGVuc2lvbihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmgJ
KHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0
ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViR0xF
eHRlbnNpb25faAogI2RlZmluZSBXZWJHTEV4dGVuc2lvbl9oCiAKLSNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsMTQgKzYwLDE0IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgcmVmKCkgeyBtX2NvbnRleHQtPnJlZigpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsg
bV9jb250ZXh0LT5kZXJlZigpOyB9Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSog
Y29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogCiAgICAgdmlydHVhbCB+V2ViR0xFeHRl
bnNpb24oKTsKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0ID0gMDsK
IAogcHJvdGVjdGVkOgotICAgIFdlYkdMRXh0ZW5zaW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OworICAgIFdlYkdMRXh0ZW5z
aW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2
aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldl
YkdMRHJhd0J1ZmZlcnMuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMjY5LDEyICsyNjksMTIgQEAgV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xBdHRhY2ht
ZW50Ojp+V2ViRwogewogfQogCi1QYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMRnJh
bWVidWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKK1Bhc3NSZWZQdHI8
V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMRnJhbWVi
dWZmZXIoY3R4KSk7CiB9CiAKLVdlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVm
ZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKICAgICA6IFdlYkdMQ29udGV4dE9i
amVjdChjdHgpCiAgICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAx
Nzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+
V2ViR0xGcmFtZWJ1ZmZlcigpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAKICAgICB2b2lkIHNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0
dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZl
bCk7CiAgICAgdm9pZCBzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBh
dHRhY2htZW50LCBXZWJHTFJlbmRlcmJ1ZmZlciopOwpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1Ymxp
YzoKICAgICBHQzNEZW51bSBnZXREcmF3QnVmZmVyKEdDM0RlbnVtKTsKIAogcHJvdGVjdGVkOgot
ICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgV2ViR0xG
cmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTExvc2VD
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TExvc2VDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xMb3NlQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsy
OSwxMSBAQAogCiAjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMTG9zZUNvbnRleHQ6OldlYkdMTG9z
ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorV2ViR0xMb3NlQ29udGV4
dDo6V2ViR0xMb3NlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQog
ICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KQEAgLTQ5LDcgKzQ5LDcgQEAgV2Vi
R0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xMb3NlQwogCiB2b2lkIFdlYkdMTG9zZUNv
bnRleHQ6Omxvc2VDb250ZXh0KCkKIHsKLSAgICBtX2NvbnRleHQtPmZvcmNlTG9zdENvbnRleHQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpTeW50aGV0aWNMb3N0Q29udGV4dCk7CisgICAgbV9jb250
ZXh0LT5mb3JjZUxvc3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlN5bnRoZXRp
Y0xvc3RDb250ZXh0KTsKIH0KIAogdm9pZCBXZWJHTExvc2VDb250ZXh0OjpyZXN0b3JlQ29udGV4
dCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29udGV4
dC5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TExvc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIFdlYkdMTG9zZUNvbnRleHQgZmluYWwg
OiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMTG9z
ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xMb3Nl
Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xM
b3NlQ29udGV4dCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25z
dCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVj
dC5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDExIEBACiAjaW5jbHVk
ZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgogI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJz
LmgiCiAjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTE9iamVjdDo6V2ViR0xPYmplY3QoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KikKK1dlYkdMT2JqZWN0OjpXZWJHTE9iamVjdChXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKikKICAgICA6IG1fb2JqZWN0KDApCiAgICAgLCBtX2F0dGFjaG1lbnRDb3VudCgw
KQogICAgICwgbV9kZWxldGVkKGZhbHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTE9iamVjdC5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBXZWJH
TENvbnRleHRHcm91cDsKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIFdlYkdMT2JqZWN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViR0xPYmplY3Q+IHsKIHB1YmxpYzoKQEAgLTU2LDEwICs1NiwxMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0RlbGV0ZWQoKSB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KIAogICAgIC8vIFRy
dWUgaWYgdGhpcyBvYmplY3QgYmVsb25ncyB0byB0aGUgZ3JvdXAgb3IgY29udGV4dC4KLSAgICB2
aXJ0dWFsIGJvb2wgdmFsaWRhdGUoY29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHZhbGlkYXRl
KGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwgY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopIGNvbnN0ID0gMDsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMT2JqZWN0KFdlYkdMUmVuZGVy
aW5nQ29udGV4dCopOworICAgIFdlYkdMT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKIAogICAgIC8vIHNldE9iamVjdCBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSByaWdodCBh
ZnRlciBjcmVhdGluZyBhIFdlYkdMT2JqZWN0LgogICAgIHZvaWQgc2V0T2JqZWN0KFBsYXRmb3Jt
M0RPYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dy
YW0uY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNiArMzAsMTYgQEAKICNpbmNs
dWRlICJXZWJHTFByb2dyYW0uaCIKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0j
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2Vi
R0xQcm9ncmFtPiBXZWJHTFByb2dyYW06OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKK1Bhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFByb2dyYW06OmNyZWF0ZShXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJH
TFByb2dyYW0oY3R4KSk7CiB9CiAKLVdlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4KQorV2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAg
ICwgbV9saW5rU3RhdHVzKGZhbHNlKQogICAgICwgbV9saW5rQ291bnQoMCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiAxNzg2MDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBXZWJHTFByb2dyYW0gZmluYWwgOiBwdWJsaWMgV2Vi
R0xTCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xQcm9ncmFtKCk7CiAKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAKICAgICB1bnNpZ25lZCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KTsKICAgICBHQzNEaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKEdDM0R1aW50IGluZGV4KTsK
QEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIGJvb2wgZGV0YWNoU2hhZGVyKFdlYkdMU2hh
ZGVyKik7CiAKIHByb3RlY3RlZDoKLSAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250
ZXh0Kik7CisgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxh
dGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIK
IAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdM
UmVuZGVyYnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVm
UHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdM
UmVuZGVyYnVmZmVyKGN0eCkpOwogfQpAQCAtNDQsNyArNDQsNyBAQCBXZWJHTFJlbmRlcmJ1ZmZl
cjo6fldlYkdMUmVuZGVyYnVmZmVyKCkKICAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAKLVdlYkdM
UmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKK1dlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX2lu
dGVybmFsRm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNCkKICAgICAsIG1faW5pdGlhbGl6
ZWQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyYnVmZmVyLmgJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
Y2xhc3MgV2ViR0xSZW5kZXJidWZmZXIgZmluYWwgOiBwdWJsaWMgVwogcHVibGljOgogICAgIHZp
cnR1YWwgfldlYkdMUmVuZGVyYnVmZmVyKCk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJH
TFJlbmRlcmJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogCiAgICAgdm9pZCBzZXRJbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCkKICAgICB7CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhh
c0V2ZXJCZWVuQm91bmQoKSB7IG1faGFzRXZlckJlZW5Cb3VuZCA9IHRydWU7IH0KIAogcHJvdGVj
dGVkOgotICAgIFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAg
IFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0z
RE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsNjMxMyArMjYsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
IAogI2lmIEVOQUJMRShXRUJHTCkKLQogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5o
IgogCi0jaW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNpbmNsdWRlICJDYWNoZWRJ
bWFnZS5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRVhUQmxlbmRNaW5NYXguaCIKLSNpbmNsdWRlICJFWFRGcmFnRGVwdGguaCIKLSNp
bmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmgiCi0jaW5jbHVkZSAiRVhUc1JHQi5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
LSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVk
ZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1haW5GcmFtZS5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgotI2luY2x1ZGUgIk9F
U1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKLSNp
bmNsdWRlICJPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFs
ZkZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgotI2luY2x1
ZGUgIk9FU1ZlcnRleEFycmF5T2JqZWN0LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUg
IlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViR0xBY3Rp
dmVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKLSNpbmNsdWRlICJXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDLmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRD
LmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaCIKLSNpbmNsdWRlICJX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiV2ViR0xDb250ZXh0RXZlbnQuaCIK
LSNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdSZW5k
ZXJlckluZm8uaCIKLSNpbmNsdWRlICJXZWJHTERlYnVnU2hhZGVycy5oIgotI2luY2x1ZGUgIldl
YkdMRGVwdGhUZXh0dXJlLmgiCi0jaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgotI2luY2x1
ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCi0j
aW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIK
LSNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgotI2luY2x1ZGUgIldlYkdMU2hhZGVyUHJlY2lzaW9u
Rm9ybWF0LmgiCi0jaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCi0jaW5jbHVkZSAiV2ViR0xVbmlm
b3JtTG9jYXRpb24uaCIKLQotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5lcy5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1VpbnQz
MkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgZG91YmxlIHNlY29uZHNCZXR3ZWVuUmVzdG9yZUF0
dGVtcHRzID0gMS4wOwotY29uc3QgaW50IG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSA9IDI1
NjsKLQotbmFtZXNwYWNlIHsKLQotICAgIGNsYXNzIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3aW5n
QnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJpbmRp
bmcpCi0gICAgICAgICAgICA6IG1fZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQotICAgICAg
ICAgICAgLCBtX2ZyYW1lYnVmZmVyQmluZGluZyhmcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwg
Zm9yIG11bHRpc2FtcGxpbmcpCi0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmIG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNv
bW1pdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgflNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIo
KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVl
ZGVkCi0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1
ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICAgICAg
fQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVmZmVy
OwotICAgICAgICBXZWJHTEZyYW1lYnVmZmVyKiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAgICB9
OwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9iamVj
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDogMDsK
LSAgICB9Ci0KLSAgICB2b2lkIGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkgcmFuZ2Us
IEdDM0RzaXplaSBzb3VyY2VSYW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNEc2l6ZWkq
IGNsaXBwZWRSYW5nZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYgY2xp
cHBlZFJhbmdlKTsKLSAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICAgICAgcmFuZ2Ug
Kz0gc3RhcnQ7Ci0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgR0Mz
RGludCBlbmQgPSBzdGFydCArIHJhbmdlOwotICAgICAgICBpZiAoZW5kID4gc291cmNlUmFuZ2Up
Ci0gICAgICAgICAgICByYW5nZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKLSAgICAgICAgKmNsaXBw
ZWRTdGFydCA9IHN0YXJ0OwotICAgICAgICAqY2xpcHBlZFJhbmdlID0gcmFuZ2U7Ci0gICAgfQot
Ci0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGkuZS4s
IHgsIHksIHdpZHRoLCBoZWlnaHQgc3RheSB0aGUgc2FtZS4KLSAgICBib29sIGNsaXAyRChHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgIEdDM0RzaXplaSBzb3VyY2VXaWR0aCwgR0MzRHNpemVpIHNvdXJjZUhlaWdo
dCwKLSAgICAgICAgICAgICAgICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGludCogY2xpcHBlZFks
IEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhlaWdodCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChjbGlwcGVkWCAmJiBjbGlwcGVkWSAmJiBjbGlwcGVkV2lkdGggJiYg
Y2xpcHBlZEhlaWdodCk7Ci0gICAgICAgIGNsaXAxRCh4LCB3aWR0aCwgc291cmNlV2lkdGgsIGNs
aXBwZWRYLCBjbGlwcGVkV2lkdGgpOwotICAgICAgICBjbGlwMUQoeSwgaGVpZ2h0LCBzb3VyY2VI
ZWlnaHQsIGNsaXBwZWRZLCBjbGlwcGVkSGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuICgqY2xpcHBl
ZFggIT0geCB8fCAqY2xpcHBlZFkgIT0geSB8fCAqY2xpcHBlZFdpZHRoICE9IHdpZHRoIHx8ICpj
bGlwcGVkSGVpZ2h0ICE9IGhlaWdodCk7Ci0gICAgfQotCi0gICAgR0MzRGludCBjbGFtcChHQzNE
aW50IHZhbHVlLCBHQzNEaW50IG1pbiwgR0MzRGludCBtYXgpCi0gICAgewotICAgICAgICBpZiAo
dmFsdWUgPCBtaW4pCi0gICAgICAgICAgICB2YWx1ZSA9IG1pbjsKLSAgICAgICAgaWYgKHZhbHVl
ID4gbWF4KQotICAgICAgICAgICAgdmFsdWUgPSBtYXg7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsK
LSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBhIGNoYXJhY3RlciBiZWxvbmdzIHRvIHRo
ZSBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbgotICAgIC8vIEdMU0wgRVMgMS4wIHNwZWMgc2Vj
dGlvbiAzLjEuCi0gICAgYm9vbCB2YWxpZGF0ZUNoYXJhY3Rlcih1bnNpZ25lZCBjaGFyIGMpCi0g
ICAgewotICAgICAgICAvLyBQcmludGluZyBjaGFyYWN0ZXJzIGFyZSB2YWxpZCBleGNlcHQgIiAk
IGAgQCBcICcgREVMLgotICAgICAgICBpZiAoYyA+PSAzMiAmJiBjIDw9IDEyNgotICAgICAgICAg
ICAgJiYgYyAhPSAnIicgJiYgYyAhPSAnJCcgJiYgYyAhPSAnYCcgJiYgYyAhPSAnQCcgJiYgYyAh
PSAnXFwnICYmIGMgIT0gJ1wnJykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAv
LyBIb3Jpem9udGFsIHRhYiwgbGluZSBmZWVkLCB2ZXJ0aWNhbCB0YWIsIGZvcm0gZmVlZCwgY2Fy
cmlhZ2UgcmV0dXJuCi0gICAgICAgIC8vIGFyZSBhbHNvIHZhbGlkLgotICAgICAgICBpZiAoYyA+
PSA5ICYmIGMgPD0gMTMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgaXNQcmVmaXhSZXNlcnZlZChjb25zdCBTdHJpbmcm
IG5hbWUpCi0gICAgewotICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJnbF8iKSB8fCBuYW1l
LnN0YXJ0c1dpdGgoIndlYmdsXyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiX3dlYmdsXyIpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBTdHJpcHMgY29tbWVudHMgZnJvbSBzaGFkZXIgdGV4dC4gVGhpcyBhbGxvd3Mgbm9uLUFT
Q0lJIGNoYXJhY3RlcnMKLSAgICAvLyB0byBiZSB1c2VkIGluIGNvbW1lbnRzIHdpdGhvdXQgcG90
ZW50aWFsbHkgYnJlYWtpbmcgT3BlbkdMCi0gICAgLy8gaW1wbGVtZW50YXRpb25zIG5vdCBleHBl
Y3RpbmcgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBHTFNMIEVTIHNldC4KLSAgICBjbGFzcyBTdHJp
cENvbW1lbnRzIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0cmlwQ29tbWVudHMoY29uc3QgU3Ry
aW5nJiBzdHIpCi0gICAgICAgICAgICA6IG1fcGFyc2VTdGF0ZShCZWdpbm5pbmdPZkxpbmUpCi0g
ICAgICAgICAgICAsIG1fc291cmNlU3RyaW5nKHN0cikKLSAgICAgICAgICAgICwgbV9sZW5ndGgo
c3RyLmxlbmd0aCgpKQotICAgICAgICAgICAgLCBtX3Bvc2l0aW9uKDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHBhcnNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcmVzdWx0KCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwotICAg
ICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBib29sIGhhc01vcmVDaGFyYWN0ZXJzKCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChtX3Bvc2l0aW9uIDwgbV9sZW5n
dGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwYXJzZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHdoaWxlIChoYXNNb3JlQ2hhcmFjdGVycygpKSB7Ci0gICAgICAgICAgICAgICAgcHJv
Y2VzcyhjdXJyZW50KCkpOwotICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MoKSBtaWdodCBhZHZh
bmNlIHRoZSBwb3NpdGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoaGFzTW9yZUNoYXJhY3RlcnMo
KSkKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBwcm9jZXNzKFVDaGFyKTsKLQotICAgICAgICBib29sIHBlZWso
VUNoYXImIGNoYXJhY3RlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcG9z
aXRpb24gKyAxID49IG1fbGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGNoYXJhY3RlciA9IG1fc291cmNlU3RyaW5nW21fcG9zaXRpb24gKyAxXTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgVUNoYXIgY3VycmVu
dCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9z
b3VyY2VTdHJpbmdbbV9wb3NpdGlvbl07Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFkdmFu
Y2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICArK21fcG9zaXRpb247Ci0gICAgICAgIH0KLQot
ICAgICAgICBib29sIGlzTmV3bGluZShVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIERvbid0IGF0dGVtcHQgdG8gY2Fub25pY2FsaXplIG5ld2xpbmUgcmVs
YXRlZCBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgcmV0dXJuIChjaGFyYWN0ZXIgPT0gJ1xuJyB8
fCBjaGFyYWN0ZXIgPT0gJ1xyJyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVtaXQoVUNo
YXIgY2hhcmFjdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKGNo
YXJhY3Rlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBlbnVtIFBhcnNlU3RhdGUgewotICAgICAg
ICAgICAgLy8gSGF2ZSBub3Qgc2VlbiBhbiBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIg
eWV0IG9uCi0gICAgICAgICAgICAvLyB0aGlzIGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWlnaHQg
c2VlIGEgcHJlcHJvY2Vzc29yCi0gICAgICAgICAgICAvLyBkaXJlY3RpdmUuCi0gICAgICAgICAg
ICBCZWdpbm5pbmdPZkxpbmUsCi0KLSAgICAgICAgICAgIC8vIEhhdmUgc2VlbiBhdCBsZWFzdCBv
bmUgQVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyCi0gICAgICAgICAgICAvLyBvbiB0aGlz
IGxpbmUuCi0gICAgICAgICAgICBNaWRkbGVPZkxpbmUsCi0KLSAgICAgICAgICAgIC8vIEhhbmRs
aW5nIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gUGFzc2VzIHRocm91Z2ggYWxsCi0gICAgICAg
ICAgICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIERpc2FibGVzIGNv
bW1lbnQKLSAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcuCi0gICAgICAgICAgICBJblByZXByb2Nl
c3NvckRpcmVjdGl2ZSwKLQotICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBzaW5nbGUtbGluZSBj
b21tZW50LiBUaGUgY29tbWVudCB0ZXh0IGlzCi0gICAgICAgICAgICAvLyByZXBsYWNlZCB3aXRo
IGEgc2luZ2xlIHNwYWNlLgotICAgICAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVudCwKLQotICAg
ICAgICAgICAgLy8gSGFuZGxpbmcgYSBtdWx0aS1saW5lIGNvbW1lbnQuIE5ld2xpbmVzIGFyZSBw
YXNzZWQKLSAgICAgICAgICAgIC8vIHRocm91Z2ggdG8gcHJlc2VydmUgbGluZSBudW1iZXJzLgot
ICAgICAgICAgICAgSW5NdWx0aUxpbmVDb21tZW50Ci0gICAgICAgIH07Ci0KLSAgICAgICAgUGFy
c2VTdGF0ZSBtX3BhcnNlU3RhdGU7Ci0gICAgICAgIFN0cmluZyBtX3NvdXJjZVN0cmluZzsKLSAg
ICAgICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIG1fcG9zaXRpb247Ci0g
ICAgICAgIFN0cmluZ0J1aWxkZXIgbV9idWlsZGVyOwotICAgIH07Ci0KLSAgICB2b2lkIFN0cmlw
Q29tbWVudHM6OnByb2Nlc3MoVUNoYXIgYykKLSAgICB7Ci0gICAgICAgIGlmIChpc05ld2xpbmUo
YykpIHsKLSAgICAgICAgICAgIC8vIE5vIG1hdHRlciB3aGF0IHN0YXRlIHdlIGFyZSBpbiwgcGFz
cyB0aHJvdWdoIG5ld2xpbmVzCi0gICAgICAgICAgICAvLyBzbyB3ZSBwcmVzZXJ2ZSBsaW5lIG51
bWJlcnMuCi0gICAgICAgICAgICBlbWl0KGMpOwotCi0gICAgICAgICAgICBpZiAobV9wYXJzZVN0
YXRlICE9IEluTXVsdGlMaW5lQ29tbWVudCkKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUg
PSBCZWdpbm5pbmdPZkxpbmU7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIFVDaGFyIHRlbXAgPSAwOwotICAgICAgICBzd2l0Y2ggKG1fcGFyc2VTdGF0ZSkgewot
ICAgICAgICBjYXNlIEJlZ2lubmluZ09mTGluZToKLSAgICAgICAgICAgIGlmIChXVEY6OmlzQVND
SUlTcGFjZShjKSkgewotICAgICAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjID09ICcjJykgewotICAg
ICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluUHJlcHJvY2Vzc29yRGlyZWN0aXZlOwotICAg
ICAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFRyYW5zaXRpb24gdG8gbm9ybWFsIHN0YXRlIGFuZCByZS1o
YW5kbGUgY2hhcmFjdGVyLgotICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gTWlkZGxlT2ZMaW5l
OwotICAgICAgICAgICAgcHJvY2VzcyhjKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgTWlkZGxlT2ZMaW5lOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nICYmIHBlZWsodGVt
cCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSAnLycpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9wYXJzZVN0YXRlID0gSW5TaW5nbGVMaW5lQ29tbWVudDsKLSAgICAgICAgICAgICAg
ICAgICAgZW1pdCgnICcpOwotICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICh0ZW1wID09ICcqJykgewotICAgICAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBJ
bk11bHRpTGluZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNvbW1l
bnQgc3RhcnQgaW4gY2FzZSB0aGUgdXNlciBoYXMKLSAgICAgICAgICAgICAgICAgICAgLy8gYW4g
dW5jbG9zZWQgY29tbWVudCBhbmQgd2Ugd2FudCB0byBsYXRlcgotICAgICAgICAgICAgICAgICAg
ICAvLyBzaWduYWwgYW4gZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsKLSAg
ICAgICAgICAgICAgICAgICAgZW1pdCgnKicpOwotICAgICAgICAgICAgICAgICAgICBhZHZhbmNl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU6Ci0gICAgICAgICAgICAvLyBObyBt
YXR0ZXIgd2hhdCB0aGUgY2hhcmFjdGVyIGlzLCBqdXN0IHBhc3MgaXQKLSAgICAgICAgICAgIC8v
IHRocm91Z2guIERvIG5vdCBwYXJzZSBjb21tZW50cyBpbiB0aGlzIHN0YXRlLiBUaGlzCi0gICAg
ICAgICAgICAvLyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGxvbmcgdGVybSwg
YnV0IGl0Ci0gICAgICAgICAgICAvLyBzaG91bGQgaGFuZGxlIHRoZSAjZXJyb3IgcHJlcHJvY2Vz
c29yIGRpcmVjdGl2ZS4KLSAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIEluU2luZ2xlTGluZUNvbW1lbnQ6Ci0gICAgICAgICAgICAvLyBUaGUg
bmV3bGluZSBjb2RlIGF0IHRoZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlCi0gICAg
ICAgICAgICAvLyBvZiByZXNldHRpbmcgb3VyIHN0YXRlIHdoZW4gd2UgZ2V0IG91dCBvZiB0aGUK
LSAgICAgICAgICAgIC8vIHNpbmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVyIGNo
YXJhY3RlcnMuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEluTXVsdGlMaW5l
Q29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICcqJyAmJiBwZWVrKHRlbXApICYmIHRlbXAg
PT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgZW1pdCgnKicpOwotICAgICAgICAgICAgICAgIGVt
aXQoJy8nKTsKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7Ci0g
ICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJzLiBV
bmNsZWFyIHdoZXRoZXIgd2UgbWF5Ci0gICAgICAgICAgICAvLyB3YW50IG9yIG5lZWQgdG8ganVz
dCBlbWl0IGEgc3BhY2UgcGVyIGNoYXJhY3RlciB0byB0cnkKLSAgICAgICAgICAgIC8vIHRvIHBy
ZXNlcnZlIGNvbHVtbiBudW1iZXJzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0gLy8gbmFtZXNwYWNlIGFub255bW91cwotCi1j
bGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2sgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxs
YmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIG9uQ29udGV4dExvc3QoKSBvdmVycmlkZSB7IG1fY29udGV4dC0+Zm9yY2VM
b3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OlJlYWxMb3N0Q29udGV4dCk7IH0KLSAg
ICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7fQotcHJpdmF0
ZToKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKLX07Ci0KLWNsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrIDogcHVibGljIEdyYXBoaWNz
Q29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjayB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JN
ZXNzYWdlQ2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjYikgOiBtX2NvbnRleHQoY2Ip
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIEdDM0RpbnQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0LT5tX3N5
bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKQotICAgICAgICAgICAgbV9jb250ZXh0LT5wcmludEdM
RXJyb3JUb0NvbnNvbGUobWVzc2FnZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYkdMUmVuZGVy
aW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKCkgeyB9Ci1wcml2YXRlOgotICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwotfTsKLQotc3RkOjp1bmlxdWVfcHRyPFdlYkdM
UmVuZGVyaW5nQ29udGV4dD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoSFRNTENhbnZh
c0VsZW1lbnQqIGNhbnZhcywgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogYXR0cnMpCi17Ci0gICAg
RG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzLT5kb2N1bWVudCgpOwotICAgIEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAvLyBUaGUgRnJhbWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3JlYXRp
b24gb2YgYSBuZXcgV2ViR0wgY29udGV4dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBpbgot
ICAgIC8vIHBhcnRpY3VsYXIsIGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3IgbW9y
ZSB0aW1lcyB2aWEgdGhlIEdMX0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KLSAgICBpZiAoIWZy
YW1lLT5sb2FkZXIoKS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdM
RW5hYmxlZCgpKSkgewotICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50
LCBmYWxzZSwgdHJ1ZSwgIldlYiBwYWdlIHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBXZWJH
TCBjb250ZXh0LiIpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYm9v
bCBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gZmFsc2U7Ci0gICAgRG9jdW1lbnQmIHRvcERv
Y3VtZW50ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKTsKLSAgICBQYWdlKiBwYWdlID0gdG9wRG9j
dW1lbnQucGFnZSgpOwotICAgIGlmIChwYWdlICYmICF0b3BEb2N1bWVudC51cmwoKS5pc0xvY2Fs
RmlsZSgpKSB7Ci0gICAgICAgIFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5tYWluRnJh
bWUoKS5sb2FkZXIoKS5jbGllbnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVudC51cmwo
KSk7Ci0KLSAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pIHsKLSAgICAg
ICAgICAgIExPRyhXZWJHTCwgIlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJMICglcykgaXMgdG8gYmxv
Y2sgV2ViR0wuIiwgdG9wRG9jdW1lbnQudXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocG9saWN5
ID09IFdlYkdMUGVuZGluZ0NyZWF0aW9uKSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJXZWJH
TCBwb2xpY3kgaXMgcGVuZGluZy4gTWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQgbGF0ZXIuIik7Ci0g
ICAgICAgICAgICBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBh
dHRycyA/IGF0dHJzLT5hdHRyaWJ1dGVzKCkgOiBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGlmICghZnJh
bWUtPnNldHRpbmdzKCkub3BlbkdMTXVsdGlzYW1wbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgICAg
IGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYXR0cmlidXRlcy5u
b0V4dGVuc2lvbnMgPSB0cnVlOwotICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxz
ZTsKLSAgICBhdHRyaWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVID0gdHJ1ZTsKLQotICAgIGlmIChm
cmFtZS0+c2V0dGluZ3MoKS5mb3JjZVNvZnR3YXJlV2ViR0xSZW5kZXJpbmcoKSkKLSAgICAgICAg
YXR0cmlidXRlcy5mb3JjZVNvZnR3YXJlUmVuZGVyZXIgPSB0cnVlOwotCi0gICAgaWYgKHBhZ2Up
Ci0gICAgICAgIGF0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNjYWxl
RmFjdG9yKCk7Ci0KLSAgICBpZiAoaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAgICAg
ICBMT0coV2ViR0wsICJDcmVhdGUgYSBXZWJHTCBjb250ZXh0IHRoYXQgbG9va3MgcmVhbCwgYnV0
IHdpbGwgcmVxdWlyZSBhIHBvbGljeSByZXNvbHV0aW9uIGlmIHVzZWQuIik7Ci0gICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQobmV3
IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgcmVu
ZGVyaW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgICAgIHJldHVybiByZW5kZXJp
bmdDb250ZXh0OwotICAgIH0KLQotICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVu
dC52aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpOwotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RX
aW5kb3cpKTsKLQotICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpIHsKLSAgICAgICAgY2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFs
c2UsIHRydWUsICJDb3VsZCBub3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9
IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMo
IkdMX0VYVF9kZWJ1Z19tYXJrZXIiKSkKLSAgICAgICAgZXh0ZW5zaW9ucy0+cHVzaEdyb3VwTWFy
a2VyRVhUKCJXZWJHTFJlbmRlcmluZ0NvbnRleHQiKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQobmV3IFdlYkdMUmVuZGVyaW5n
Q29udGV4dChjYW52YXMsIGNvbnRleHQsIGF0dHJpYnV0ZXMpKTsKLSAgICByZW5kZXJpbmdDb250
ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLQotICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0Owot
fQotCiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2Fu
dmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRyaWJ1dGVzKQotICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCi0g
ICAgLCBBY3RpdmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKLSAgICAsIG1f
Y29udGV4dCgwKQotICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCi0gICAgLCBtX2Rpc3BhdGNoQ29u
dGV4dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRj
aENvbnRleHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQotICAgICwg
bV9yZXN0b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9y
ZUNvbnRleHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoMCkKLSAgICAsIG1fY29udGV4
dExvc3QoZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4
dCkKLSAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9zeW50aGVzaXplZEVy
cm9yc1RvQ29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQo
bWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uKHRydWUpCi0gICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFsc2Up
CisgICAgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKHBhc3NlZENhbnZhcywgYXR0cmlidXRl
cykKIHsKIH0KIAogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQo
SFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCwKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzKQotICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCi0gICAgLCBB
Y3RpdmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fY29udGV4
dChjb250ZXh0KQotICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCi0gICAgLCBtX2Rpc3BhdGNoQ29u
dGV4dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRj
aENvbnRleHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQotICAgICwg
bV9yZXN0b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9y
ZUNvbnRleHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoNCkKLSAgICAsIG1fY29udGV4
dExvc3QoZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4
dCkKLSAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9zeW50aGVzaXplZEVy
cm9yc1RvQ29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQo
bWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uKGZhbHNlKQotICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNl
KQotewotICAgIEFTU0VSVChtX2NvbnRleHQpOwotICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xD
b250ZXh0R3JvdXA6OmNyZWF0ZSgpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRo
aXMpOwotCi0gICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0RGltc1sxXSA9
IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJ
RVdQT1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotCi0gICAgc2V0dXBGbGFncygp
OwotICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRM
b3N0KTsKLSAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICBtX21hcmtlZENhbnZhc0RpcnR5
ID0gZmFsc2U7Ci0gICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7Ci0gICAgbV9wYWNrQWxpZ25t
ZW50ID0gNDsKLSAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbV91bnBhY2tGbGlwWSA9
IGZhbHNlOwotICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOwotICAgIG1fdW5w
YWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZB
VUxUX1dFQkdMOwotICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7Ci0gICAgbV9jdXJyZW50UHJv
Z3JhbSA9IDA7Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgIG1fcmVuZGVyYnVm
ZmVyQmluZGluZyA9IDA7Ci0gICAgbV9kZXB0aE1hc2sgPSB0cnVlOwotICAgIG1fc3RlbmNpbEVu
YWJsZWQgPSBmYWxzZTsKLSAgICBtX3N0ZW5jaWxNYXNrID0gMHhGRkZGRkZGRjsKLSAgICBtX3N0
ZW5jaWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsRnVuY1JlZiA9IDA7Ci0g
ICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOwotICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhG
RkZGRkZGRjsKLSAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAweEZGRkZGRkZGOwotICAgIG1f
bGF5ZXJDbGVhcmVkID0gZmFsc2U7Ci0gICAgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQg
PSBtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7Ci0gICAgCi0gICAgbV9jbGVhckNvbG9yWzBd
ID0gbV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0gbV9jbGVhckNvbG9yWzNdID0g
MDsKLSAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgbV9jbGVhckRlcHRoID0gMTsK
LSAgICBtX2NsZWFyU3RlbmNpbCA9IDA7Ci0gICAgbV9jb2xvck1hc2tbMF0gPSBtX2NvbG9yTWFz
a1sxXSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOwotCi0gICAgR0Mz
RGludCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBtX2NvbnRleHQtPmdl
dEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIG1fdGV4dHVyZVVuaXRz
LmNsZWFyKCk7Ci0gICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMpOwotCi0gICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKLSAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMs
ICZudW1WZXJ0ZXhBdHRyaWJzKTsKLSAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhB
dHRyaWJzOwotICAgIAotICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRl
eHR1cmVTaXplKTsKLSAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0
ZUxldmVsQ291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7Ci0gICAgbV9t
YXhDdWJlTWFwVGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBU
ZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJl
Ojpjb21wdXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFw
VGV4dHVyZVNpemUpOwotICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpF
LCAmbV9tYXhSZW5kZXJidWZmZXJTaXplKTsKLQotICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJv
bSBFWFRfZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4KLSAgICBtX21heERyYXdCdWZm
ZXJzID0gMDsKLSAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOwotCi0gICAgbV9iYWNrRHJh
d0J1ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOwotICAgIG1fZHJhd0J1ZmZlcnNXZWJH
TFJlcXVpcmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKLSAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVk
ID0gZmFsc2U7Ci0KLSAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpW
YW9UeXBlRGVmYXVsdCk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJh
eU9iamVjdC5nZXQoKSk7Ci0gICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0
VmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgCi0gICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUo
bV9tYXhWZXJ0ZXhBdHRyaWJzKTsKLQotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAg
ICAgICAgY3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7Ci0gICAgaWYgKCFpc0dMRVMy
Q29tcGxpYW50KCkpCi0gICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7Ci0KLSAgICBJbnRTaXpl
IGNhbnZhc1NpemUgPSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoY2FudmFzU2l6ZSk7Ci0KLSAgICBt
X2NvbnRleHQtPnJlc2hhcGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgp
KTsKLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2Fu
dmFzU2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250ZXh0LT5zY2lzc29yKDAsIDAsIGNhbnZhc1Np
emUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBtX2NvbnRleHQtPnNldENv
bnRleHRMb3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRM
b3N0Q2FsbGJhY2s+KHRoaXMpKTsKLSAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxi
YWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2Fs
bGJhY2s+KHRoaXMpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxh
Z3MoKQotewotICAgIEFTU0VSVChtX2NvbnRleHQpOwotCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBj
YW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNU
b0NvbnNvbGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgp
OwotCi0gICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50
KCk7Ci0gICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fc3RyaWN0X2F0dHJp
YnMiKTsKLSAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOwotICAgIGlmIChtX2lzR0xF
UzJDb21wbGlhbnQpIHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7Ci0gICAg
ICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28iKTsKLSAgICAg
ICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIH0KLSAgICBt
X2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5p
c0VuYWJsZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3QKLXsKLSAgICBpZiAoUGFn
ZSogcGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIHBh
Z2UtPnNldHRpbmdzKCkucHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb21wcmVz
c2VkVGV4dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgaWYgKCFtX2NvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQotICAgICAgICBtX2NvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCkKLXsKLSAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5j
ZXMgdG8gV2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRoZSBsYXN0IHJlZmVyZW5jZQotICAg
IC8vIHRoZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxhc3QgY29udGV4dCBpcyByZW1vdmVk
IGZyb20gdGhlIGNvbnRleHQgZ3JvdXAuCi0gICAgbV9ib3VuZEFycmF5QnVmZmVyID0gbnVsbHB0
cjsKLSAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIg
PSBudWxscHRyOwotICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxscHRyOwotICAgIG1fZnJhbWVi
dWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKLSAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSBudWxs
cHRyOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7
ICsraSkgewotICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVs
bHB0cjsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKLSAgICBt
X2JsYWNrVGV4dHVyZUN1YmVNYXAgPSBudWxscHRyOwotCi0gICAgaWYgKCFtX2lzUGVuZGluZ1Bv
bGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwot
ICAgICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLSAgICAgICAgbV9jb250ZXh0R3Jv
dXAtPnJlbW92ZUNvbnRleHQodGhpcyk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBpZiAobV9pc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgZHJhd2lu
ZyBidWZmZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ry
b3llZAotICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KLSAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsK
LQotICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9z
dENhbGxiYWNrKG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNh
bGxiYWNrKG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQotewotICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250
ZXh0LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+bWFya0NvbnRlbnRzQ2hhbmdlZCgpOwotCi0gICAgbV9s
YXllckNsZWFyZWQgPSBmYWxzZTsKLSAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygp
LT5yZW5kZXJCb3goKTsKLSAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiBy
ZW5kZXJCb3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewotICAgICAgICBtX21hcmtl
ZENhbnZhc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2Uo
KTsKLSAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAgICAg
ICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwotICAgICAgICAgICAgY2FudmFzKCktPmRp
ZERyYXcoRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
SWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9jb250ZXh0
LT5sYXllckNvbXBvc2l0ZWQoKSB8fCBtX2xheWVyQ2xlYXJlZAotICAgICAgICB8fCBtX2F0dHJp
YnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyIHx8IChtYXNrICYmIG1fZnJhbWVidWZmZXJCaW5k
aW5nKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXM+IGNvbnRleHRBdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLQot
ICAgIC8vIERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRo
ZSB1c2VyIGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KLSAgICBib29sIGNvbWJpbmVkQ2xlYXIg
PSBtYXNrICYmICFtX3NjaXNzb3JFbmFibGVkOwotCi0gICAgbV9jb250ZXh0LT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGlmIChjb21iaW5lZENsZWFyICYm
IChtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQotICAgICAgICBt
X2NvbnRleHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAw
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFy
Q29sb3JbMV0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tb
Ml0gPyBtX2NsZWFyQ29sb3JbMl0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9jb2xvck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICBtX2NvbnRleHQtPmNvbG9y
TWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKLSAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNr
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKGNvbnRleHRB
dHRyaWJ1dGVzLT5kZXB0aCgpKSB7Ci0gICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9k
ZXB0aE1hc2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQp
KQotICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOwotICAgICAgICBjbGVh
ck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgICAgIG1f
Y29udGV4dC0+ZGVwdGhNYXNrKHRydWUpOwotICAgIH0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0
ZXMtPnN0ZW5jaWwoKSkgewotICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgICAgICAgICAgbV9jb250
ZXh0LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAg
IGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotICAg
ICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
T05ULCAweEZGRkZGRkZGKTsKLSAgICB9Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVmZmVycyhjbGVhck1hc2spOwotICAgIGVs
c2UgewotICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2Nv
bnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDAp
OwotICAgICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7Ci0gICAgfQotCi0gICAgcmVz
dG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAg
ICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBt
X2xheWVyQ2xlYXJlZCA9IHRydWU7Ci0KLSAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQotewot
ICAgIC8vIFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgotICAgIGlmICht
X3NjaXNzb3JFbmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNv
bG9yWzBdLCBtX2NsZWFyQ29sb3JbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xl
YXJDb2xvclsyXSwgbV9jbGVhckNvbG9yWzNdKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayht
X2NvbG9yTWFza1swXSwgbV9jb2xvck1hc2tbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
bV9jb2xvck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyRGVw
dGgobV9jbGVhckRlcHRoKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3Rl
bmNpbCk7Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4
dDNEOjpGUk9OVCwgbV9zdGVuY2lsTWFzayk7Ci0gICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9k
ZXB0aE1hc2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0xheWVyQ29t
cG9zaXRlZCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQotICAgICAgICBjYW52YXMo
KS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7Ci0KLSAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlz
IHdyaXR0ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAotICAgIC8vIGhh
cHBlbmVkIGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBj
b21wb3NpdG9yLgotICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFtX2F0
dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+cGFp
bnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7Ci0KLSAgICAg
ICAgY2FudmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGNhbnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKLSAgICBjbGVhcklmQ29tcG9zaXRl
ZCgpOwotCi0gICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAg
ICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBtX2RyYXdpbmdC
dWZmZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1l
YnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPmJpbmQoKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKLXsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
aW1hZ2VEYXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSht
X2RyYXdpbmdCdWZmZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAg
ICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVy
byhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRh
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IGxldmVsIHdlIGRvbid0Ci0gICAgLy8ga25vdyBpZiB0aGUgdW5k
ZXJseWluZyBGQk8gdXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgotICAgIEdDM0RpbnQg
bWF4U2l6ZSA9IHN0ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6
ZSk7Ci0gICAgLy8gTGltaXQgZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1v
cnkgZXhoYXVzdGlvbi4KLSAgICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OwotICAg
IG1heFNpemUgPSBzdGQ6Om1pbihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7Ci0gICAgR0MzRGlu
dCBtYXhXaWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKLSAg
ICBHQzNEaW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1z
WzFdKTsKLSAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7Ci0gICAgaGVpZ2h0
ID0gY2xhbXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOwotCi0gICAgaWYgKG1fbmVlZHNVcGRhdGUp
IHsKLSAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7
Ci0gICAgICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCkpCi0gICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0No
YW5nZWQpOwotICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8g
V2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXds
eSBjcmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCi0gICAgLy8gY2xlYXIg
KGFuZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgotICAgIGlmIChtX2RyYXdp
bmdCdWZmZXIpIHsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRo
LCBoZWlnaHQpKTsKLSAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwotICAgIH0gZWxz
ZQotICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICBtX2Nv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RP
clplcm8obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKSkpOwotICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdl
dCgpKSk7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclpl
cm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKLXsKLSAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQotICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsK
LQotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lk
dGgoKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdo
dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIG1f
ZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+
Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotdW5zaWduZWQgaW50
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKLXsKLSAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0Mz
RHNob3J0KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpJTlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1
aW50KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgcmV0dXJu
IHNpemVvZihHQzNEZmxvYXQpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1
cmUoR0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90
ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBv
dXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2FjdGl2ZVRleHR1
cmVVbml0ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMDsKLSAgICBtX2Nv
bnRleHQtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEFjdGl2ZVRleHR1cmVVbml0KHRleHR1cmUp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0
YWNoU2hhZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25BdHRh
Y2hlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5k
QXR0cmliTG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFs
aWRhdGVMb2NhdGlvbkxlbmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBu
YW1lKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiYmluZEF0dHJpYkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBX
ZWJHTE9iamVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQotewotICAgIGRlbGV0ZWQgPSBmYWxz
ZTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKG9iamVjdCkgewotICAgICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29u
dGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBu
b3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+b2JqZWN0KCk7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hl
Y2tPYmplY3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgaWYg
KGJ1ZmZlciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0g
dGFyZ2V0KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQg
d2l0aCBtdWx0aXBsZSB0YXJnZXRzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQotICAgICAgICBtX2Jv
dW5kQXJyYXlCdWZmZXIgPSBidWZmZXI7Ci0gICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAgICAgbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImJpbmRCdWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIp
KTsKLSAgICBpZiAoYnVmZmVyKQotICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNoZWNr
T2JqZWN0VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAg
aWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRG
cmFtZWJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKG9iamVj
dE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIEluc3RlYWQgb2Yg
YmluZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KLSAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5iaW5kKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwotICAgIGlmIChidWZmZXIpCi0g
ICAgICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwotICAgIGFwcGx5U3RlbmNpbFRl
c3QoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsK
LSAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVy
QnVmZmVyLCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAg
ICAgICByZW5kZXJCdWZmZXIgPSAwOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdl
dCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9
IHJlbmRlckJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBv
YmplY3RPclplcm8ocmVuZGVyQnVmZmVyKSk7Ci0gICAgaWYgKHJlbmRlckJ1ZmZlcikKLSAgICAg
ICAgcmVuZGVyQnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFRl
eHR1cmUiLCB0ZXh0dXJlLCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxl
dGVkKQotICAgICAgICB0ZXh0dXJlID0gMDsKLSAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5n
ZXRUYXJnZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
YmluZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFy
Z2V0cyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAw
OwotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKLSAg
ICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
ZyA9IHRleHR1cmU7Ci0gICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7Ci0KLSAg
ICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKLSAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8o
dGV4dHVyZSkpOwotCi0gICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVApIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKLSAgICAgICAgbWF4TGV2
ZWwgPSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0
dXJlIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7Ci0gICAg
aWYgKHRleHR1cmUpCi0gICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVs
KTsKLQotICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNl
dCB0aGUgVEVYVFVSRV9XUkFQX1IKLSAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFNUF9UT19FREdF
IGZvciBjdWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKLSAgICAvLyBFUyAyLjAgZG9l
c24ndCBleHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbikgYW5kCi0g
ICAgLy8gb3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBvdmVyIHRoZSBz
ZWFtcyBpbiB0aGlzCi0gICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQg
c3VwcG9ydGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAotICAgIC8vIHBsYXRmb3JtcyBpcyBmYWly
bHkgaW52b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJlIElECi0gICAg
Ly8gaW4gYWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxhaW50cywgc28g
dGhlIGxvZ2ljIGhhcwotICAgIC8vIGJlZW4gcmVtb3ZlZC4KLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBH
QzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3Io
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1v
ZGUpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRl
KEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRp
b24iLCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwg
bW9kZUFscGhhKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlv
blNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5j
RmFjdG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwg
R0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCi17
Ci0gICAgLy8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMg
YXMgUkdCLgotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxl
bmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3Jj
QWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZl
ckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0
LCB1c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc2l6
ZSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9m
Qm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVy
RGF0YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJE
YXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
OwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXpl
aXB0cj4oc2l6ZSksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBm
YWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtz
IGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwotICAg
IH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0g
dGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxp
ZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7Ci0g
ICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRhdGEpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJi
dWZmZXJEYXRhIiwgIm5vIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
IWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAo
IWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwot
ICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0
YS0+ZGF0YSgpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhl
dGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFp
bGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBp
dCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKLSAgICB9
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZh
bGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsK
LSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghZGF0YSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlm
ICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRh
dGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7
Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBk
YXRhLT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVu
Y3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0
IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEo
KTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFy
Z2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIGlmICghYnVmZmVyKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRh
IiwgIm9mZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWRhdGEp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0
YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZm
ZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGlj
X2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRh
KCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
KSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0
aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAg
ICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxv
bmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRl
QnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEFUSUNfRFJBVyk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0g
ICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdD
M0RpbnRwdHI+KG9mZnNldCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zm
c2V0IG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAg
ICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRy
PihvZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAg
IGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAg
ICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVy
IGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAgICAgICAgYnVm
ZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi1HQzNEZW51bSBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0
KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgaWYgKHRhcmdl
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9D
T01QTEVURTsKLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0
ZSI7Ci0gICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3Rh
dHVzKCZyZWFzb24pOwotICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0gICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdl
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJ
VCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIi
LCAiaW52YWxpZCBtYXNrIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hh
ciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29u
dGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04sICJjbGVhciIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFj
bGVhcklmQ29tcG9zaXRlZChtYXNrKSkKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsK
LSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0Mz
RGZsb2F0IGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmIChzdGQ6OmlzbmFuKHIpKQotICAgICAgICByID0gMDsKLSAgICBpZiAo
c3RkOjppc25hbihnKSkKLSAgICAgICAgZyA9IDA7Ci0gICAgaWYgKHN0ZDo6aXNuYW4oYikpCi0g
ICAgICAgIGIgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFuKGEpKQotICAgICAgICBhID0gMTsKLSAg
ICBtX2NsZWFyQ29sb3JbMF0gPSByOwotICAgIG1fY2xlYXJDb2xvclsxXSA9IGc7Ci0gICAgbV9j
bGVhckNvbG9yWzJdID0gYjsKLSAgICBtX2NsZWFyQ29sb3JbM10gPSBhOwotICAgIG1fY29udGV4
dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsK
LSAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGVhclN0ZW5jaWwgPSBz
OwotICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4s
IEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbG9yTWFza1swXSA9
IHJlZDsKLSAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOwotICAgIG1fY29sb3JNYXNrWzJdID0g
Ymx1ZTsKLSAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwotICAgIG1fY29udGV4dC0+Y29sb3JN
YXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVyKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclpl
cm8oc2hhZGVyKSk7Ci0gICAgR0MzRGludCB2YWx1ZTsKLSAgICBtX2NvbnRleHQtPmdldFNoYWRl
cml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFU
VVMsICZ2YWx1ZSk7Ci0gICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSkKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxl
dmVsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhG
b3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJpbnZh
bGlkIGludGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGJv
cmRlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5z
aW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0
LCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlQ29t
cHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQs
IGludGVybmFsZm9ybWF0LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR0xUZXh0
dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIs
IHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IWlzR0xFUzJOUE9UU3RyaWN0KCkpIHsKLSAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVy
ZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJE
IiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7Ci0gICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgYm9yZGVyLCBkYXRhLT5i
eXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1v
dmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBjb21wcmVz
c2VkVGV4SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBk
b2Vzbid0IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCi0gICAgICAgIHRleC0+bWFya0lu
dmFsaWQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0ZXgt
PnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIHRleC0+c2V0Q29tcHJl
c3NlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xl
dmVsKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoZm9ybWF0KSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJl
QmluZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlm
ICghdGV4KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZm9ybWF0ICE9IHRleC0+Z2V0SW50
ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1Yklt
YWdlMkQiLCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVu
c2lvbnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YS0+Ynl0ZUxlbmd0
aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKLSAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQpCisgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKHBhc3NlZENhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykKIHsKLSAgICBpZiAoR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldENsZWFyQml0c0J5Rm9ybWF0KGZvcm1hdCkgJiAoR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZG
RVJfQklUKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBjYW4gbm90IGJlIHNldCwg
b25seSByZW5kZXJlZCB0byIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygiY29w
eVRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0
ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZygiY29weVRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4KQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21i
aW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3Jt
YXQoKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21w
YXRpYmxlIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXNHTEVT
Mk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVp
Z2h0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFt
ZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNv
dXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleEltYWdl
MkQiLCByZWFzb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFySWZDb21wb3Np
dGVkKCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKLSAgICAgICAgU2NvcGVkRHJhd2lu
Z0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9k
cmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAg
IEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwotICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdp
ZHRoLCBjbGlwcGVkSGVpZ2h0OwotICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWln
aHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0
KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkp
IHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV91bnBhY2tBbGlnbm1lbnQpOwotICAgICAg
ICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDApIHsKLSAgICAg
ICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNs
aXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRI
ZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJh
bWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhl
Y3V0ZWQuCi0gICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvcHlUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0
LCBsZXZlbCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlk
YXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAg
ICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKCJjb3B5
VGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpIHx8ICF2YWxpZGF0ZVNpemUoImNvcHlU
ZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBC
ZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBjaGVjayBpZiBvdmVyZmxvdyBo
YXBwZW5zIGZpcnN0LgotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZzZXQgKyBo
ZWlnaHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4LT5n
ZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4LT5nZXRIZWln
aHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJyZWN0YW5nbGUg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwotICAg
IGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleFN1YkltYWdlMkQiLCBpbnRl
cm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3Jt
YXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdldEJvdW5kRnJh
bWVidWZmZXJDb2xvckZvcm1hdCgpKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJm
cmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwot
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9u
QWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsIHJlYXNvbik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBpZiAoaXNS
ZXNvdXJjZVNhZmUoKSkgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRl
cihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKLSAg
ICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBH
QzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKLSAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0
aCwgY2xpcHBlZEhlaWdodDsKLSAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgp
LCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7
Ci0gICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRh
cmdldCwgbGV2ZWwpOwotICAgICAgICAgICAgR0MzRGVudW0gdHlwZSA9IHRleC0+Z2V0VHlwZSh0
YXJnZXQsIGxldmVsKTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25lZCBjaGFy
W10+IHplcm87Ci0gICAgICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNpemU7Ci0gICAgICAgICAgICAgICAgR0MzRGVudW0gZXJyb3Ig
PSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgs
IGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCAwKTsKLSAgICAgICAgICAgICAgICBp
ZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFk
IGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB6ZXJvID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBj
aGFyW10+KHNpemUpOwotICAgICAgICAgICAgICAgIGlmICghemVybykgewotICAgICAgICAgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1zZXQo
emVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2NvbnRl
eHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjbGlw
cGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgU2Nv
cGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5
VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFggLSB4LCB5b2Zm
c2V0ICsgY2xpcHBlZFkgLSB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU2NvcGVkRHJh
d2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVm
ZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMQnVm
ZmVyPiBvID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qo
by5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZl
cj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
UmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUodGhp
cyk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQot
UGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlVGV4
dHVyZSgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdMVGV4dHVyZTo6
Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4g
bzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4gbyA9IFdlYkdM
UHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxXZWJH
TFJlbmRlcmJ1ZmZlcj4gbyA9IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAg
YWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRy
PFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcihHQzNEZW51
bSB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSICYmIHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY3JlYXRlU2hhZGVy
IiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBvID0gV2ViR0xTaGFkZXI6OmNyZWF0ZSh0aGlz
LCB0eXBlKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2NvbnRleHQtPmN1bGxGYWNlKG1vZGUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRleHQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAob2JqZWN0LT5vYmplY3QoKSkKLSAg
ICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIGNvbnRleHQgaGVyZSBiZWNhdXNlIHdlIHdhbnQK
LSAgICAgICAgLy8gdGhpbmdzIGluIHRoaXMgY29udGV4dCB1bmJvdW5kLgotICAgICAgICBvYmpl
Y3QtPmRlbGV0ZU9iamVjdChncmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZl
ciogYnVmZmVyKQotewotICAgIGlmICghZGVsZXRlT2JqZWN0KGJ1ZmZlcikpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAobV9ib3VuZEFycmF5QnVmZmVyID09IGJ1ZmZlcikKLSAgICAgICAgbV9i
b3VuZEFycmF5QnVmZmVyID0gMDsKLQotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+dW5i
aW5kQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxl
dGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAo
IWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZnJh
bWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKLSAgICAgICAgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgPSAwOwotICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZygwKTsKLSAgICAgICAgICAg
IC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJhY2sgdG8gaW50
ZXJuYWwgZmJvLgotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKLXsKLSAgICBk
ZWxldGVPYmplY3QocHJvZ3JhbSk7Ci0gICAgLy8gV2UgZG9uJ3QgcmVzZXQgbV9jdXJyZW50UHJv
Z3JhbSB0byAwIGhlcmUgYmVjYXVzZSB0aGUgZGVsZXRpb24gb2YgdGhlCi0gICAgLy8gY3VycmVu
dCBwcm9ncmFtIGlzIGRlbGF5ZWQuCi19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKLXsKLSAg
ICBpZiAoIWRlbGV0ZU9iamVjdChyZW5kZXJidWZmZXIpKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKHJlbmRlcmJ1ZmZlciA9PSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fcmVu
ZGVyYnVmZmVyQmluZGluZyA9IDA7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAg
ICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1l
YnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKLXsKLSAgICBkZWxldGVPYmplY3Qoc2hh
ZGVyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUoV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIGlmICghZGVsZXRlT2JqZWN0KHRleHR1cmUpKQot
ICAgICAgICByZXR1cm47Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVVbml0c1tp
XS50ZXh0dXJlMkRCaW5kaW5nKQotICAgICAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVy
ZTJEQmluZGluZyA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh0ZXh0dXJlID09IG1fdGV4dHVyZVVu
aXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZykKLSAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRz
W2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IG51bGxwdHI7Ci0gICAgfQotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0
dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcih0ZXh0dXJlKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmRl
cHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoTWFz
ayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2RlcHRoTWFzayA9IGZsYWc7Ci0gICAgbV9jb250ZXh0
LT5kZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0
aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh6TmVhciA+IHpG
YXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAiZGVwdGhSYW5nZSIsICJ6TmVhciA+IHpGYXIiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGV0YWNoU2hh
ZGVyIiwgInNoYWRlciBub3QgYXR0YWNoZWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVjdE9y
WmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0Qo
KSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdDM0RlbnVtIGNh
cCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFi
aWxpdHkoImRpc2FibGUiLCBjYXApKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNhcCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7Ci0gICAgICAgIG1fc3RlbmNpbEVuYWJs
ZWQgPSBmYWxzZTsKLSAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkg
ewotICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX2RyYXdp
bmdCdWZmZXIpCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVk
KG1fc2Npc3NvckVuYWJsZWQpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRl
JiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUo
aW5kZXgpOwotICAgIHN0YXRlLmVuYWJsZWQgPSBmYWxzZTsKLQotICAgIGlmIChpbmRleCA+IDAg
fHwgaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUVsZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNE
aW50cHRyIG9mZnNldCkKLXsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1
ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7
Ci0gICAgCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChvZmZzZXQgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7Ci0gICAgICAgIC8v
IEZvciBhbiB1bnNpZ25lZCBpbnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlzaWJsZSBieSA0
IGZvciBhbGlnbm1lbnQgcmVhc29ucy4KLSAgICAgICAgaWYgKG9mZnNldCAlIDQpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQg
b2Zmc2V0LgotICAgICAgICBvZmZzZXQgLz0gNDsKLQotICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9
IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gNDsKLSAgICAgICAgaWYgKG9mZnNl
dCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQp
IHsKLSAgICAgICAgLy8gRm9yIGFuIHVuc2lnbmVkIHNob3J0IGFycmF5LCBvZmZzZXQgbXVzdCBi
ZSBkaXZpc2libGUgYnkgMiBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCi0gICAgICAgIGlmIChvZmZz
ZXQgJSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIE1ha2UgdW9m
ZnNldCBhbiBlbGVtZW50IG9mZnNldC4KLSAgICAgICAgb2Zmc2V0IC89IDI7Ci0KLSAgICAgICAg
R0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDI7Ci0g
ICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlC
dWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBu
IC0gb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJh
eUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJl
ZCkKLXsKLSAgICAvLyBQZXJmb3JtcyBjb25zZXJ2YXRpdmUgdmFsaWRhdGlvbiBieSBjYWNoaW5n
IGEgbWF4aW11bSBpbmRleCBvZgotICAgIC8vIHRoZSBnaXZlbiB0eXBlIHBlciBlbGVtZW50IGFy
cmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBib3VuZAotICAgIC8vIGFycmF5IGJ1ZmZlcnMgaGF2
ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0aXNmeSB0aGF0IG1heGltdW0KLSAgICAvLyBpbmRleCwg
c2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXItZHJhdy1jYWxsIGl0ZXJhdGlvbiBpbgotICAgIC8vIHZh
bGlkYXRlSW5kZXhBcnJheVByZWNpc2UuCi0gICAgCi0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBl
bGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRB
cnJheUJ1ZmZlcigpOwotCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdDM0RzaXplaXB0ciBudW1FbGVtZW50cyA9IGVsZW1lbnRBcnJh
eUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwotICAgIC8vIFRoZSBjYXNlIGNvdW50PT0wIGlzIGFscmVh
ZHkgZGVhbHQgd2l0aCBpbiBkcmF3RWxlbWVudHMgYmVmb3JlIHZhbGlkYXRlSW5kZXhBcnJheUNv
bnNlcnZhdGl2ZS4KLSAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgY29uc3QgQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxl
bWVudEFycmF5QnVmZmVyKCk7Ci0gICAgQVNTRVJUKGJ1ZmZlcik7Ci0KLSAgICBpbnQgbWF4SW5k
ZXggPSBlbGVtZW50QXJyYXlCdWZmZXItPmdldENhY2hlZE1heEluZGV4KHR5cGUpOwotICAgIGlm
IChtYXhJbmRleCA8IDApIHsKLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBpbmRleCBp
biB0aGUgZW50aXJlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5kZXguCi0gICAgICAg
IHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxj
b25zdCBHQzNEdWJ5dGUqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKEdDM0Rz
aXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAgICAgICAgICAgbWF4
SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVDogewotICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdD
M0R1c2hvcnQpOwotICAgICAgICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0
PGNvbnN0IEdDM0R1c2hvcnQqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKEdD
M0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAgICAgICAgICAg
bWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9JTlQ6IHsKLSAgICAgICAgICAgIGlmICghbV9vZXNFbGVtZW50SW5kZXhV
aW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG51bUVsZW1l
bnRzIC89IHNpemVvZihHQzNEdWludCk7Ci0gICAgICAgICAgICBjb25zdCBHQzNEdWludCogcCA9
IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAg
ICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAg
ICAgICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4o
cFtpXSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbGVtZW50QXJy
YXlCdWZmZXItPnNldENhY2hlZE1heEluZGV4KHR5cGUsIG1heEluZGV4KTsKLSAgICB9Ci0KLSAg
ICBpZiAobWF4SW5kZXggPj0gMCkgewotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcXVpcmVk
IGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG1heGltdW0KLSAgICAgICAgLy8gaW5kZXgg
dGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgotICAgICAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gbWF4
SW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlQ
cmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQs
IHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQotewotICAgIEFTU0VSVChjb3VudCA+PSAw
ICYmIG9mZnNldCA+PSAwKTsKLSAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSAwOwotICAgIAotICAg
IFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLQotICAgIGlmICghZWxlbWVudEFy
cmF5QnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNvdW50KSB7Ci0g
ICAgICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGxvbmcgdW9mZnNldCA9IG9m
ZnNldDsKLSAgICB1bnNpZ25lZCBsb25nIG4gPSBjb3VudDsKLQotICAgIGlmICh0eXBlID09IEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0
IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89IHNpemVvZihHQzNEdWludCk7
Ci0gICAgICAgIGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVpbnQq
PihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9m
ZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlmICgqcCA+IGxh
c3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAgICAgICAgICsr
cDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQpIHsKLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zm
c2V0LgotICAgICAgICB1b2Zmc2V0IC89IHNpemVvZihHQzNEdXNob3J0KTsKLSAgICAgICAgY29u
c3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihlbGVtZW50
QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNldDsKLSAg
ICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkK
LSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAgICAgICAgICsrcDsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSkgewotICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBH
QzNEdWJ5dGUqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRh
KCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlm
ICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAg
ICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZW4gc2V0IHRoZSBsYXN0
IGluZGV4IGluIHRoZSBpbmRleCBhcnJheSBhbmQgbWFrZSBzdXJlIGl0IGlzIHZhbGlkLgotICAg
IG51bUVsZW1lbnRzUmVxdWlyZWQgPSBsYXN0SW5kZXggKyAxOwotICAgIHJldHVybiBudW1FbGVt
ZW50c1JlcXVpcmVkID4gMDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1p
dGl2ZUNvdW50KQotewotICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgLy8gTG9vayBpbiBlYWNoIGVuYWJsZWQgdmVydGV4IGF0dHJpYiBhbmQg
Y2hlY2sgaWYgdGhleSd2ZSBiZWVuIGJvdW5kIHRvIGEgYnVmZmVyLgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX21heFZlcnRleEF0dHJpYnM7ICsraSkgewotICAgICAgICBpZiAoIW1f
Ym91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaSkudmFsaWRhdGVC
aW5kaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGVs
ZW1lbnRDb3VudCA8PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotCi0gICAgLy8gTG9vayBp
biBlYWNoIGNvbnN1bWVkIHZlcnRleCBhdHRyaWIgKGJ5IHRoZSBjdXJyZW50IHByb2dyYW0pLgot
ICAgIGJvb2wgc2F3Tm9uSW5zdGFuY2VkQXR0cmliID0gZmFsc2U7Ci0gICAgYm9vbCBzYXdFbmFi
bGVkQXR0cmliID0gZmFsc2U7Ci0gICAgaW50IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyA9IG1f
Y3VycmVudFByb2dyYW0tPm51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zOyArK2kpIHsKLSAgICAgICAgaW50
IGxvYyA9IG1fY3VycmVudFByb2dyYW0tPmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGkpOwotICAg
ICAgICBpZiAobG9jID49IDAgJiYgbG9jIDwgc3RhdGljX2Nhc3Q8aW50PihtX21heFZlcnRleEF0
dHJpYnMpKSB7Ci0gICAgICAgICAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpW
ZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZl
cnRleEF0dHJpYlN0YXRlKGxvYyk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZW5hYmxlZCkgewot
ICAgICAgICAgICAgICAgIHNhd0VuYWJsZWRBdHRyaWIgPSB0cnVlOwotICAgICAgICAgICAgICAg
IC8vIEF2b2lkIG9mZi1ieS1vbmUgZXJyb3JzIGluIG51bUVsZW1lbnRzIGNvbXB1dGF0aW9uLgot
ICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgbGFzdCBlbGVtZW50LCB3ZSB3aWxsIG9ubHkgdG91
Y2ggdGhlIGRhdGEgZm9yIHRoZQotICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgYW5kIG5vdGhp
bmcgYmV5b25kIGl0LgotICAgICAgICAgICAgICAgIGludCBieXRlc1JlbWFpbmluZyA9IHN0YXRp
Y19jYXN0PGludD4oc3RhdGUuYnVmZmVyQmluZGluZy0+Ynl0ZUxlbmd0aCgpIC0gc3RhdGUub2Zm
c2V0KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHN0YXRlLnN0cmlkZSA+IDApOwotICAgICAgICAgICAgICAgIGlmIChi
eXRlc1JlbWFpbmluZyA+PSBzdGF0ZS5ieXRlc1BlckVsZW1lbnQpCi0gICAgICAgICAgICAgICAg
ICAgIG51bUVsZW1lbnRzID0gMSArIChieXRlc1JlbWFpbmluZyAtIHN0YXRlLmJ5dGVzUGVyRWxl
bWVudCkgLyBzdGF0ZS5zdHJpZGU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW5zdGFuY2Vz
UmVxdWlyZWQgPSAwOwotICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5kaXZpc29yKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGluc3RhbmNlc1JlcXVpcmVkID0gY2VpbChzdGF0aWNfY2FzdDxmbG9h
dD4ocHJpbWl0aXZlQ291bnQpIC8gc3RhdGUuZGl2aXNvcik7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpbnN0YW5jZXNSZXF1aXJlZCA+IG51bUVsZW1lbnRzKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChlbGVtZW50Q291bnQgPiBudW1FbGVtZW50cykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXNhd05vbkluc3RhbmNlZEF0dHJpYiAmJiBzYXdFbmFi
bGVkQXR0cmliKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCogb2JqZWN0KQotewotICAgIGlmICghb2Jq
ZWN0IHx8ICFvYmplY3QtPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBvYmplY3Qg
b3Igb2JqZWN0IGRlbGV0ZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBp
ZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRleHQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwg
R0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlv
bk5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZmlyc3QgPCAwIHx8IGNv
dW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZmlyc3Qgb3IgY291bnQgPCAwIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKHByaW1pdGl2ZUNvdW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwg
MCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFpc0Vycm9yR2Vu
ZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKLSAgICAgICAgLy8gRW5zdXJlIHdlIGhh
dmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKLSAgICAgICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNv
cmRPdmVyZmxvdz4gY2hlY2tlZEZpcnN0KGZpcnN0KTsKLSAgICAgICAgQ2hlY2tlZDxHQzNEaW50
LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZENvdW50KGNvdW50KTsKLSAgICAgICAgQ2hlY2tlZDxH
QzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFN1bSA9IGNoZWNrZWRGaXJzdCArIGNoZWNr
ZWRDb3VudDsKLSAgICAgICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tl
ZFByaW1pdGl2ZUNvdW50KHByaW1pdGl2ZUNvdW50KTsKLSAgICAgICAgaWYgKGNoZWNrZWRTdW0u
aGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltaXRpdmVDb3VudC5oYXNPdmVyZmxvd2VkKCkg
fHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhjaGVja2VkU3VtLnVuc2FmZUdldCgpLCBjaGVj
a2VkUHJpbWl0aXZlQ291bnQudW5zYWZlR2V0KCkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXZh
bGlkYXRlVmVydGV4QXR0cmlidXRlcygwKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJh
dHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0bHkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZl
ciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNh
ZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNv
bik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwg
R0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdB
cnJheXMiLCBtb2RlLCBmaXJzdCwgY291bnQsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
bGVhcklmQ29tcG9zaXRlZCgpOwotCi0gICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
ZmFsc2U7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwot
ICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxl
dGVuZXNzKCJkcmF3QXJyYXlzIiwgdHJ1ZSk7Ci0KLSAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMo
bW9kZSwgZmlyc3QsIGNvdW50KTsKLQotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZl
cnRleEF0dHJpYjBTaW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0
dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAg
ICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCBmYWxzZSk7Ci0gICAgbWFy
a0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUs
IEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWdu
ZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6ZWkgcHJpbWl0aXZlQ291bnQpCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5jdGlvbk5hbWUs
IG1vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXZhbGlkYXRlU3RlbmNp
bFNldHRpbmdzKGZ1bmN0aW9uTmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3
aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAgICAgICAg
aWYgKG1fb2VzRWxlbWVudEluZGV4VWludCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKGNvdW50IDwgMCB8fCBvZmZzZXQgPCAwKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJjb3VudCBvciBvZmZzZXQgPCAwIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHByaW1pdGl2ZUNvdW50
IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gRUxFTUVO
VF9BUlJBWV9CVUZGRVIgYm91bmQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAg
ICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCi0gICAgICAgIGlm
ICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNE
aW50cHRyPihvZmZzZXQpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJyZXF1ZXN0IG91
dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJBWV9CVUZGRVIiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWNvdW50KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3Zl
cmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWRQcmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7Ci0gICAg
ICAgIGlmIChjaGVja2VkQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltaXRpdmVD
b3VudC5oYXNPdmVyZmxvd2VkKCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1w
dCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdmFsaWRhdGVJbmRleEFycmF5Q29uc2Vy
dmF0aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKG51
bUVsZW1lbnRzLCBjaGVja2VkUHJpbWl0aXZlQ291bnQudW5zYWZlR2V0KCkpKSB7Ci0gICAgICAg
ICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY2hlY2tlZENvdW50LnVuc2FmZUdl
dCgpLCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cykg
fHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2
ZUNvdW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0
ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcygwKSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0bHkiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9
ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAh
aXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyhH
QzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBv
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0KLSAg
ICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7Ci0gICAgaWYgKCF2YWxpZGF0ZURyYXdFbGVtZW50
cygiZHJhd0VsZW1lbnRzIiwgbW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgbnVtRWxlbWVudHMs
IDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotCi0gICAg
Ym9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7Ci0gICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkpIHsKLSAgICAgICAgaWYgKCFudW1FbGVtZW50cykKLSAgICAgICAgICAgIHZhbGlk
YXRlSW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+
KG9mZnNldCksIG51bUVsZW1lbnRzKTsKLSAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9
IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7Ci0gICAgfQotICAgIGlmICghaXNH
TEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3
RWxlbWVudHMiLCB0cnVlKTsKLQotICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNv
dW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLQotICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCi0gICAgICAgIHJl
c3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAgaWYgKCFpc0dM
RVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdF
bGVtZW50cyIsIGZhbHNlKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJlbmFibGUiLCBj
YXApKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9URVNUKSB7Ci0gICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgPSB0cnVlOwotICAgICAg
ICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7Ci0gICAgICAgIG1fc2Npc3Nv
ckVuYWJsZWQgPSB0cnVlOwotICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsK
LSAgICB9Ci0gICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZW5hYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXgg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKLSAgICBzdGF0ZS5lbmFi
bGVkID0gdHJ1ZTsKLQotICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5k
ZXgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZmluaXNoKCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZXh0LT5maW5pc2goKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZsdXNoKCkK
LXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9jb250ZXh0LT5mbHVzaCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiBidWZm
ZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJh
bWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsIHRhcmdldCwgYXR0YWNobWVudCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAocmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgImlu
dmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGJ1ZmZlciAm
JiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gYnVmZmVyIG9yIGJ1ZmZlciBub3QgZnJvbSB0aGlz
IGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBEb24ndCBhbGxvdyB0
aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBhbGwgY3VycmVudAotICAgIC8v
IGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRl
ZmF1bHQKLSAgICAvLyBGQk8uCi0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXJPYmplY3QgPSBvYmplY3RPclplcm8oYnVmZmVy
KTsKLSAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVO
VCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOwotICAgICAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJP
YmplY3QpOwotICAgIH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZv
ckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgYnVmZmVyKTsKLSAgICBhcHBseVN0ZW5jaWxU
ZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1
cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRh
cmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZm
ZXJUZXh0dXJlMkQiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKGxldmVsKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibGV2ZWwgbm90IDAiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodGV4dHVyZSAmJiAhdGV4dHVyZS0+dmFs
aWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVy
ZTJEIiwgIm5vIHRleHR1cmUgb3IgdGV4dHVyZSBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFt
ZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBhbGwgY3VycmVudAotICAgIC8vIGltcGxlbWVudGF0aW9u
cyB1c2UgYW4gRkJPIGludGVybmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKLSAgICAvLyBG
Qk8uCi0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIGZyYW1l
YnVmZmVyIGJvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlT2JqZWN0ID0gb2JqZWN0T3JaZXJvKHRleHR1cmUpOwotICAgIHN3aXRjaCAo
YXR0YWNobWVudCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxf
QVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJn
ZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1
cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUy
RCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHRleHRhcmdl
dCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2Jq
ZWN0LCBsZXZlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1
cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2Jq
ZWN0LCBsZXZlbCk7Ci0gICAgfQotICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRBdHRhY2ht
ZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxl
dmVsKTsKLSAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5mcm9udEZhY2Uo
bW9kZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZW5lcmF0ZU1pcG1hcChH
QzNEZW51bSB0YXJnZXQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZygiZ2VuZXJhdGVNaXBtYXAiLCB0YXJnZXQsIGZhbHNlKTsKLSAgICBpZiAoIXRleCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghdGV4LT5jYW5HZW5lcmF0ZU1pcG1hcHMoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZW5lcmF0ZU1pcG1hcCIsICJsZXZlbCAwIG5vdCBwb3dlciBvZiAyIG9yIG5vdCBhbGwg
dGhlIHNhbWUgc2l6ZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzOTE2LiBDb21wcmVzc2Vk
IHRleHR1cmVzIHNob3VsZCBiZSBhbGxvd2VkIGluIFdlYkdMIDI6Ci0gICAgaWYgKHRleC0+aXND
b21wcmVzc2VkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAidHJ5aW5nIHRvIGdlbmVy
YXRlIG1pcG1hcHMgZnJvbSBjb21wcmVzc2VkIHRleHR1cmUiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoImdlbmVyYXRlTWlwbWFw
IiwgdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIDApKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gZ2VuZXJhdGVNaXBtYXAgd29uJ3Qgd29yayBwcm9wZXJseSBpZiBtaW5GaWx0ZXIg
aXMgbm90IE5FQVJFU1RfTUlQTUFQX0xJTkVBUgotICAgIC8vIG9uIE1hYy4gIFJlbW92ZSB0aGUg
aGFjayBvbmNlIHRoaXMgZHJpdmVyIGJ1ZyBpcyBmaXhlZC4KLSNpZiBPUyhEQVJXSU4pCi0gICAg
Ym9vbCBuZWVkVG9SZXNldE1pbkZpbHRlciA9IGZhbHNlOwotICAgIGlmICh0ZXgtPmdldE1pbkZp
bHRlcigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpIHsKLSAg
ICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJ
TkVBUik7Ci0gICAgICAgIG5lZWRUb1Jlc2V0TWluRmlsdGVyID0gdHJ1ZTsKLSAgICB9Ci0jZW5k
aWYKLSAgICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Ci0jaWYgT1MoREFSV0lO
KQotICAgIGlmIChuZWVkVG9SZXNldE1pbkZpbHRlcikKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwg
dGV4LT5nZXRNaW5GaWx0ZXIoKSk7Ci0jZW5kaWYKLSAgICB0ZXgtPmdlbmVyYXRlTWlwbWFwTGV2
ZWxJbmZvKCk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50
IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdl
dEFjdGl2ZUF0dHJpYiIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBB
Y3RpdmVJbmZvIGluZm87Ci0gICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZUF0dHJpYihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZlIGF0dHJpYnV0ZSAlZDogJXMiLCBp
bmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZl
SW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwotfQotCi1QYXNz
UmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVV
bmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QWN0aXZlVW5pZm9ybSIsIHBy
b2dyYW0pKQotICAgICAgICByZXR1cm4gMDsKLSAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgaWYg
KCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRl
eCwgaW5mbykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpKQotICAgICAgICBpZiAoaW5mby5zaXplID4gMSAmJiAhaW5mby5uYW1lLmVuZHNXaXRo
KCJbMF0iKSkKLSAgICAgICAgICAgIGluZm8ubmFtZS5hcHBlbmQoIlswXSIpOwotCi0gICAgTE9H
KFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSB1bmlmb3JtICVkOiAlcyIsIGluZGV4LCBpbmZvLm5h
bWUudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICByZXR1cm4gV2ViR0xBY3RpdmVJbmZvOjpjcmVhdGUo
aW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBWZWN0
b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4mIHNoYWRlck9iamVjdHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgc2hhZGVyT2JqZWN0cy5jbGVhcigpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
ImdldEF0dGFjaGVkU2hhZGVycyIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBjb25zdCBHQzNEZW51bSBzaGFkZXJUeXBlW10gPSB7Ci0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpWRVJURVhfU0hBREVSLAotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01F
TlRfU0hBREVSCi0gICAgfTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKHNo
YWRlclR5cGUpIC8gc2l6ZW9mKEdDM0RlbnVtKTsgKytpKSB7Ci0gICAgICAgIFdlYkdMU2hhZGVy
KiBzaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihzaGFkZXJUeXBlW2ldKTsKLSAg
ICAgICAgaWYgKHNoYWRlcikKLSAgICAgICAgICAgIHNoYWRlck9iamVjdHMuYXBwZW5kKHNoYWRl
cik7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1HQzNEaW50IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0cmliTG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAg
cmV0dXJuIC0xOwotICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0aCgiZ2V0QXR0cmliTG9j
YXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICghdmFsaWRhdGVTdHJp
bmcoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBp
ZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICgh
cHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEF0dHJpYkxvY2F0aW9uIiwg
InByb2dyYW0gbm90IGxpbmtlZCIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJl
dHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwg
bmFtZSk7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZl
clBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBpZiAodGFyZ2V0
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIgJiYgdGFyZ2V0ICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVy
IiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAg
ICB9Ci0KLSAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9TSVpFICYm
IHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfVVNBR0UpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZl
clBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBtX2Nv
bnRleHQtPmdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAg
aWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSkKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xDb250ZXh0
QXR0cmlidXRlcz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRDb250ZXh0QXR0cmlidXRlcygp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgLy8gV2UgYWx3YXlzIG5lZWQgdG8gcmV0dXJuIGEgbmV3IFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMgb2JqZWN0IHRvCi0gICAgLy8gcHJldmVudCB0aGUgdXNlciBmcm9tIG11dGF0
aW5nIGFueSBjYWNoZWQgdmVyc2lvbi4KLQotICAgIC8vIEFsc28sIHdlIG5lZWQgdG8gZW5mb3Jj
ZSByZXF1ZXN0ZWQgdmFsdWVzIG9mICJmYWxzZSIgZm9yIGRlcHRoCi0gICAgLy8gYW5kIHN0ZW5j
aWwsIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHVuZGVybHlpbmcKLSAgICAv
LyBHcmFwaGljc0NvbnRleHQzRCBvciBEcmF3aW5nQnVmZmVyLgotICAgIFJlZlB0cjxXZWJHTENv
bnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVzID0gV2ViR0xDb250ZXh0QXR0cmlidXRlczo6Y3Jl
YXRlKG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSk7Ci0gICAgaWYgKCFtX2F0dHJp
YnV0ZXMuZGVwdGgpCi0gICAgICAgIGF0dHJpYnV0ZXMtPnNldERlcHRoKGZhbHNlKTsKLSAgICBp
ZiAoIW1fYXR0cmlidXRlcy5zdGVuY2lsKQotICAgICAgICBhdHRyaWJ1dGVzLT5zZXRTdGVuY2ls
KGZhbHNlKTsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIFRoZSBEcmF3
aW5nQnVmZmVyIG9idGFpbnMgaXRzIHBhcmFtZXRlcnMgZnJvbSBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSwKLSAgICAgICAgLy8gYnV0IGl0IG1ha2VzIGl0cyBvd24g
ZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIG11bHRpc2FtcGxpbmcgaXMgc3VwcG9ydGVkLgotICAg
ICAgICBhdHRyaWJ1dGVzLT5zZXRBbnRpYWxpYXMobV9kcmF3aW5nQnVmZmVyLT5tdWx0aXNhbXBs
ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZXMucmVsZWFzZSgpOwotfQotCi1HQzNE
ZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobV9pc1Bl
bmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PX0VSUk9SOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEVycm9yKCk7Ci19Ci0KLVdlYkdM
RXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIG5hbWUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9i
bGVuZF9taW5tYXgiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX0VYVF9ibGVuZF9taW5tYXgiKSkgewotICAgICAgICBpZiAoIW1fZXh0QmxlbmRN
aW5NYXgpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVF
bmFibGVkKCJHTF9FWFRfYmxlbmRfbWlubWF4Iik7Ci0gICAgICAgICAgICBtX2V4dEJsZW5kTWlu
TWF4ID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRCbGVuZE1pbk1heD4odGhpcyk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG1fZXh0QmxlbmRNaW5NYXguZ2V0KCk7Ci0gICAgfQotICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiRVhUX3NSR0IiKQotICAgICAgICAmJiBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zUkdCIikpIHsKLSAgICAgICAgaWYg
KCFtX2V4dHNSR0IpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5l
bnN1cmVFbmFibGVkKCJHTF9FWFRfc1JHQiIpOwotICAgICAgICAgICAgbV9leHRzUkdCID0gc3Rk
OjptYWtlX3VuaXF1ZTxFWFRzUkdCPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
bV9leHRzUkdCLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwg
IkVYVF9mcmFnX2RlcHRoIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9FWFRfZnJhZ19kZXB0aCIpKSB7Ci0gICAgICAgIGlmICghbV9leHRGcmFn
RGVwdGgpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVF
bmFibGVkKCJHTF9FWFRfZnJhZ19kZXB0aCIpOwotICAgICAgICAgICAgbV9leHRGcmFnRGVwdGgg
PSBzdGQ6Om1ha2VfdW5pcXVlPEVYVEZyYWdEZXB0aD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIG1fZXh0RnJhZ0RlcHRoLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKQotICAgICAgICAmJiAobV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVf
bG9kIikgfHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hh
ZGVyX3RleHR1cmVfbG9kIikpKSB7Ci0gICAgICAgIGlmICghbV9leHRTaGFkZXJUZXh0dXJlTE9E
KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxl
ZCgiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOwotICAgICAgICAgICAgbV9leHRTaGFkZXJU
ZXh0dXJlTE9EID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRTaGFkZXJUZXh0dXJlTE9EPih0aGlzKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9leHRTaGFkZXJUZXh0dXJlTE9ELmdldCgpOwot
ICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9FWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKSB7Ci0g
ICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKLSAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMiKTsKLSAgICAgICAgICAgIG1fZXh0VGV4dHVyZUZpbHRlckFu
aXNvdHJvcGljID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM+
KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYy5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJP
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpKSB7Ci0gICAg
ICAgIGlmICghbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKSB7Ci0gICAgICAgICAgICBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIik7Ci0gICAgICAgICAgICBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMgPSBzdGQ6Om1h
a2VfdW5pcXVlPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+KHRoaXMpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMuZ2V0KCk7Ci0gICAgfQotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfZmxvYXQiKQotICAgICAgICAm
JiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zs
b2F0IikpIHsKLSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdCkgewotICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJl
X2Zsb2F0Iik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdCA9IHN0ZDo6bWFrZV91bmlx
dWU8T0VTVGV4dHVyZUZsb2F0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9v
ZXNUZXh0dXJlRmxvYXQuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkg
ewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0TGluZWFyKSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVf
ZmxvYXRfbGluZWFyIik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdExpbmVhciA9IHN0
ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUZsb2F0TGluZWFyPih0aGlzKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIuZ2V0KCk7Ci0gICAgfQotICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpCi0g
ICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3Rl
eHR1cmVfaGFsZl9mbG9hdCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlSGFsZkZsb2F0
KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxl
ZCgiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJl
SGFsZkZsb2F0ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNUZXh0dXJlSGFsZkZsb2F0Pih0aGlzKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0LmdldCgpOwot
ICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZf
ZmxvYXRfbGluZWFyIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKSB7Ci0gICAgICAgIGlm
ICghbV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9h
dF9saW5lYXIiKTsKLSAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhciA9IHN0
ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcj4odGhpcyk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhci5nZXQoKTsKLSAg
ICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdmVydGV4X2FycmF5X29i
amVjdCIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygi
R0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSkgewotICAgICAgICBpZiAoIW1fb2VzVmVydGV4
QXJyYXlPYmplY3QpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5l
bnN1cmVFbmFibGVkKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpOwotICAgICAgICAgICAg
bV9vZXNWZXJ0ZXhBcnJheU9iamVjdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVmVydGV4QXJyYXlP
YmplY3Q+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc1ZlcnRleEFycmF5
T2JqZWN0LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9F
U19lbGVtZW50X2luZGV4X3VpbnQiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkgewotICAgICAgICBp
ZiAoIW1fb2VzRWxlbWVudEluZGV4VWludCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKTsK
LSAgICAgICAgICAgIG1fb2VzRWxlbWVudEluZGV4VWludCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VT
RWxlbWVudEluZGV4VWludD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2Vz
RWxlbWVudEluZGV4VWludC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJXRUJHTF9sb3NlX2NvbnRleHQiKSkgewotICAgICAgICBpZiAoIW1fd2ViZ2xMb3Nl
Q29udGV4dCkKLSAgICAgICAgICAgIG1fd2ViZ2xMb3NlQ29udGV4dCA9IHN0ZDo6bWFrZV91bmlx
dWU8V2ViR0xMb3NlQ29udGV4dD4odGhpcyk7Ci0gICAgICAgIHJldHVybiBtX3dlYmdsTG9zZUNv
bnRleHQuZ2V0KCk7Ci0gICAgfQotICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldF
QktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIikpCi0gICAgICAgICYmIFdlYkdMQ29t
cHJlc3NlZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fd2Vi
Z2xDb21wcmVzc2VkVGV4dHVyZUFUQykKLSAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4
dHVyZUFUQyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQz4odGhp
cyk7Ci0gICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMuZ2V0KCk7Ci0g
ICAgfQotICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9XRUJHTF9jb21w
cmVzc2VkX3RleHR1cmVfcHZydGMiKSkKLSAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQykKLSAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRD
ID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM+KHRoaXMpOwot
ICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMuZ2V0KCk7Ci0gICAg
fQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfY29tcHJlc3NlZF90ZXh0
dXJlX3MzdGMiKQotICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9y
dGVkKHRoaXMpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQykK
LSAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMgPSBzdGQ6Om1ha2VfdW5p
cXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPih0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1f
d2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVwdGhfdGV4dHVyZSIpCi0gICAgICAgICYmIFdlYkdM
RGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpIHsKLSAgICAgICAg
aWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fZGVwdGhfdGV4dHVyZSIpOwot
ICAgICAgICAgICAgbV93ZWJnbERlcHRoVGV4dHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xE
ZXB0aFRleHR1cmU+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX3dlYmdsRGVw
dGhUZXh0dXJlLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwg
IldFQkdMX2RyYXdfYnVmZmVycyIpICYmIHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkgewotICAgICAg
ICBpZiAoIW1fd2ViZ2xEcmF3QnVmZmVycykgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKLSAgICAg
ICAgICAgIG1fd2ViZ2xEcmF3QnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEcmF3QnVm
ZmVycz4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fd2ViZ2xEcmF3QnVmZmVy
cy5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJBTkdMRV9p
bnN0YW5jZWRfYXJyYXlzIikgJiYgQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlz
KSkgewotICAgICAgICBpZiAoIW1fYW5nbGVJbnN0YW5jZWRBcnJheXMpIHsKLSAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9pbnN0
YW5jZWRfYXJyYXlzIik7Ci0gICAgICAgICAgICBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzID0gc3Rk
OjptYWtlX3VuaXF1ZTxBTkdMRUluc3RhbmNlZEFycmF5cz4odGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG1fYW5nbGVJbnN0YW5jZWRBcnJheXMuZ2V0KCk7Ci0gICAgfQotICAgIGlm
IChhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsICJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIikpIHsKLSAgICAgICAgICAg
IGlmICghbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAgICAgIG1fd2ViZ2xE
ZWJ1Z1JlbmRlcmVySW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1Z1JlbmRlcmVySW5m
bz4odGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvLmdl
dCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VC
R0xfZGVidWdfc2hhZGVycyIpCi0gICAgICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpKSB7Ci0g
ICAgICAgICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1NoYWRlcnMpCi0gICAgICAgICAgICAgICAgbV93
ZWJnbERlYnVnU2hhZGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1Z1NoYWRlcnM+KHRo
aXMpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMuZ2V0KCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBXZWJHTFNoYXJl
ZE9iamVjdCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEF0dGFjaG1lbnRPYmpl
Y3QoYXR0YWNobWVudCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKHBuYW1lID09
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKQot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7
Ci0gICAgICAgIC8vIE9wZW5HTCBFUyAyLjAgc3BlY2lmaWVzIElOVkFMSURfRU5VTSBpbiB0aGlz
IGNhc2UsIHdoaWxlIGRlc2t0b3AgR0wKLSAgICAgICAgLy8gc3BlY2lmaWVzIElOVkFMSURfT1BF
UkFUSU9OLgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0K
LQotICAgIEFTU0VSVChvYmplY3QtPmlzVGV4dHVyZSgpIHx8IG9iamVjdC0+aXNSZW5kZXJidWZm
ZXIoKSk7Ci0gICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkpIHsKLSAgICAgICAgc3dpdGNoIChw
bmFtZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX09CSkVDVF9UWVBFOgotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRSk7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihyZWludGVycHJldF9jYXN0PFdl
YkdMVGV4dHVyZSo+KG9iamVjdCkpKTsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFD
RToKLSAgICAgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09M
T1JfRU5DT0RJTkdfRVhUOiB7Ci0gICAgICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFy
Z2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUg
Zm9yIHRleHR1cmUgYXR0YWNobWVudCIpOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoIChwbmFtZSkgewot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9UWVBFOgotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSKTsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4ocmVpbnRlcnByZXRfY2FzdDxX
ZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCkpKTsKLSAgICAgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7Ci0gICAgICAgICAg
ICBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxXZWJH
TFJlbmRlcmJ1ZmZlcio+KG9iamVjdCk7Ci0gICAgICAgICAgICBHQzNEZW51bSByZW5kZXJCdWZm
ZXJGb3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAg
ICBBU1NFUlQocmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQgJiYg
cmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQpOwotICAg
ICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlckZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0I4X0FM
UEhBOF9FWFQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhFeHRlbnNpb25z
M0Q6OlNSR0JfRVhUKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjb25zdCBpbnQg
aW50WmVybyA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9URVhUVVJFOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfTElORV9X
SURUSF9SQU5HRToKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JB
TkdFOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQV9CSVRTOgotICAgICAgICByZXR1cm4g
Z2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJB
WV9CVUZGRVJfQklORElORzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRy
PFdlYkdMQnVmZmVyPihtX2JvdW5kQXJyYXlCdWZmZXIpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORDoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgotICAgICAgICByZXR1
cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORF9EU1RfQUxQSEE6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZElu
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNU
X1JHQjoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9BTFBIQToKLSAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9SR0I6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25l
ZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRf
U1JDX0FMUEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19SR0I6Ci0gICAgICAgIHJl
dHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxVRV9CSVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxVRToKLSAgICAg
ICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLOgotICAgICAgICByZXR1cm4gZ2V0Qm9v
bGVhbkFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpD
T01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhV
aW50MzJBcnJheTo6Y3JlYXRlKG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmRhdGEoKSwgbV9j
b21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6ZSgpKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Q1VMTF9GQUNFOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFX01PREU6Ci0gICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPihtX2N1cnJlbnRQcm9ncmFtKSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQklUUzoKLSAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFMVUU6Ci0gICAgICAg
IHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5HRToKLSAgICAg
ICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5Q
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1dSSVRF
TUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5Q
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0
cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlC
dWZmZXIoKSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJ
Tkc6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVm
ZmVyPihtX2ZyYW1lYnVmZmVyQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZST05UX0ZBQ0U6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0g
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6R1JFRU5fQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9XSURUSDoKLSAg
ICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFOgotICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRToK
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9B
VFRSSUJTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgotICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BP
UlRfRElNUzoKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6
Ci0gICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgYWx3YXlzIHJldHVybiAwIGZvciB0aGlzPwot
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRkFD
VE9SOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZJTEw6Ci0gICAgICAgIHJldHVybiBn
ZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQ
T0xZR09OX09GRlNFVF9VTklUUzoKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfQklUUzoKLSAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1Jl
ZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4obV9yZW5kZXJidWZmZXJCaW5kaW5nKSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVI6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oU3RyaW5nKCJXZWJLaXQgV2ViR0wiKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFX0JVRkZFUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6Ci0gICAg
ICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfVkFMVUU6Ci0gICAgICAgIHJldHVybiBnZXRGbG9h
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUzoK
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oIldlYkdMIEdMU0wgRVMgMS4wICgiICsgbV9jb250ZXh0LT5nZXRT
dHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTikgKyAiKSIp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GQUlMOgotICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GVU5DOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNL
X1BBU1NfREVQVEhfUEFTUzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUkVGOgot
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQklUUzoK
LSAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLnN0ZW5j
aWwpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGludFplcm8pOwotICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0ZBSUw6Ci0gICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9GVU5DOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFT
U19ERVBUSF9GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9QQVNT
OgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUkVGOgotICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RF
U1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1ZBTFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9XUklURU1BU0s6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1VCUElYRUxfQklUUzoK
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HXzJEOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1
cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBh
c3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0
XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfQUxJR05NRU5UOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrRmxpcFkpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbik7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKFN0cmluZygiV2ViS2l0IikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlNJ
T046Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldlYkdMIDEuMCAoIiArIG1fY29udGV4
dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OKSArICIpIik7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTElu
dEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRf
U0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcwot
ICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKQotICAgICAgICAgICAgcmV0dXJu
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RF
UklWQVRJVkVfSElOVF9PRVMpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUsIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBub3QgZW5hYmxlZCIpOwotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpV
Tk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZWJ1Z1JlbmRlcmVy
SW5mbykKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9jb250ZXh0LT5nZXRTdHJp
bmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSKSk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxl
ZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBXZWJHTERlYnVn
UmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9WRU5ET1JfV0VCR0w6Ci0gICAgICAgIGlmIChtX3dlYmds
RGVidWdSZW5kZXJlckluZm8pCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29u
dGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpWRU5ET1IpKTsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZv
IG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6VkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTOiAvLyBPRVNfdmVydGV4X2Fy
cmF5X29iamVjdAotICAgICAgICBpZiAobV9vZXNWZXJ0ZXhBcnJheU9iamVjdCkgewotICAgICAg
ICAgICAgaWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmlzRGVmYXVsdE9iamVjdCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTPihtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QpKTsKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5vdCBlbmFibGVk
Iik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMKLSAgICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKQot
ICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVuc2lvbnMzRDo6
TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVu
YWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUOiAvLyBFWFRfZHJhd19idWZmZXJzIEJF
R0lOCi0gICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMpCi0gICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKGdldE1heENvbG9yQXR0YWNobWVudHMoKSk7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZHJhd19idWZmZXJzIG5vdCBlbmFibGVk
Iik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6TUFYX0RSQVdfQlVGRkVSU19FWFQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMp
Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGdldE1heERyYXdCdWZmZXJzKCkpOwot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVm
ZmVycyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycwotICAgICAgICAgICAgJiYg
cG5hbWUgPj0gRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUCi0gICAgICAgICAgICAmJiBw
bmFtZSA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9F
WFQgKyBnZXRNYXhEcmF3QnVmZmVycygpKSkgewotICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOwotICAgICAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJC
aW5kaW5nKQotICAgICAgICAgICAgICAgIHZhbHVlID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdl
dERyYXdCdWZmZXIocG5hbWUpOwotICAgICAgICAgICAgZWxzZSAvLyBlbXVsYXRlZCBiYWNrYnVm
ZmVyCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBtX2JhY2tEcmF3QnVmZmVyOwotICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRQcm9ncmFt
UGFyYW1ldGVyIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLQot
ICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHByb2dyYW0tPmlzRGVsZXRlZCgpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpW
QUxJREFURV9TVEFUVVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5LX1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5nZXRM
aW5rU3RhdHVzKCkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFUVEFDSEVEX1NIQURF
UlM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVTOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUzoKLSAgICAgICAgbV9jb250ZXh0LT5n
ZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFt
ZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFByb2dyYW1QYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1TdHJpbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dy
YW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbUluZm9Mb2ciLCBwcm9ncmFtKSkK
LSAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKG1fY29udGV4dC0+
Z2V0UHJvZ3JhbUluZm9Mb2cob2JqZWN0T3JaZXJvKHByb2dyYW0pKSk7Ci19Ci0KLVdlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJp
bnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQot
ICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmct
Pm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJubyByZW5k
ZXJidWZmZXIgYm91bmQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0K
LQotICAgIGlmIChtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwKLSAgICAgICAgJiYgIW1fcmVuZGVyYnVm
ZmVyQmluZGluZy0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIEFTU0VSVCghaXNEZXB0aFN0ZW5jaWxT
dXBwb3J0ZWQoKSk7Ci0gICAgICAgIGludCB2YWx1ZSA9IDA7Ci0gICAgICAgIHN3aXRjaCAocG5h
bWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1dJRFRI
OgotICAgICAgICAgICAgdmFsdWUgPSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSX0hFSUdIVDoKLSAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5k
aW5nLT5nZXRIZWlnaHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxVRV9TSVpFOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKLSAgICAgICAgICAgIHZhbHVl
ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAgICAgICAgICAgIHZhbHVlID0gMjQ7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX1NURU5DSUxfU0laRToKLSAgICAgICAgICAgIHZhbHVlID0gODsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJO
QUxfRk9STUFUOgotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkpOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0g
ICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAgfQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7
Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9XSURUSDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJf
SEVJR0hUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9SRURfU0la
RToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxVRV9TSVpFOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6Ci0gICAgICAgIG1f
Y29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVl
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkp
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQot
fQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0
ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVyUGFyYW1ldGVyIiwgc2hhZGVy
KSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIEdDM0RpbnQgdmFsdWUgPSAw
OwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxF
VEVfU1RBVFVTOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHNoYWRlci0+aXNEZWxldGVk
KCkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTOgotICAgICAg
ICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZh
bHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1
ZSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFOgotICAgICAgICBt
X2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVl
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KHZhbHVlKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclBhcmFtZXRlciIsICJpbnZhbGlk
IHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9
Ci19Ci0KLVN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlckluZm9Mb2coV2Vi
R0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJJbmZvTG9n
Iiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1cmVOb3ROdWxs
KG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhvYmplY3RPclplcm8oc2hhZGVyKSkpOwotfQot
Ci1QYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0PiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNE
ZW51bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
R01FTlRfU0hBREVSOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkxPV19GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpNRURJVU1fRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfSU5UOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1FRElVTV9JTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9J
TlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQcmVjaXNpb25G
b3JtYXQiLCAiaW52YWxpZCBwcmVjaXNpb24gdHlwZSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBHQzNEaW50IHJhbmdlWzJdID0gezAsIDB9OwotICAgIEdDM0RpbnQg
cHJlY2lzaW9uID0gMDsKLSAgICBtX2NvbnRleHQtPmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChz
aGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgJnByZWNpc2lvbik7Ci0gICAgcmV0dXJu
IFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpjcmVhdGUocmFuZ2VbMF0sIHJhbmdlWzFdLCBw
cmVjaXNpb24pOwotfQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJT
b3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFk
ZXJTb3VyY2UiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm4gIiI7Ci0gICAgcmV0dXJuIGVuc3Vy
ZU5vdE51bGwoc2hhZGVyLT5nZXRTb3VyY2UoKSk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpCi17Ci0gICAgVmVjdG9y
PFN0cmluZz4gcmVzdWx0OwotCi0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9ibGVuZF9taW5tYXgiKSkKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgiRVhUX2JsZW5kX21pbm1heCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zUkdCIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIkVY
VF9zUkdCIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygi
R0xfRVhUX2ZyYWdfZGVwdGgiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX2ZyYWdfZGVw
dGgiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9P
RVNfdGV4dHVyZV9mbG9hdCIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9m
bG9hdCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNf
dGV4dHVyZV9mbG9hdF9saW5lYXIiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikpCi0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICBpZiAobV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVh
ciIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVh
ciIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIikpCi0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICBpZiAobV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX0VYVF90ZXh0dXJl
X2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpCi0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpKQot
ICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik7Ci0gICAgcmVz
dWx0LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7Ci0gICAgaWYgKFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VC
S0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiKTsKLSAgICBpZiAoV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQo
IldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTsKLSAgICBpZiAoV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTsKLSAgICBpZiAoV2ViR0xEZXB0
aFRleHR1cmU6OnN1cHBvcnRlZChncmFwaGljc0NvbnRleHQzRCgpKSkKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpOwotICAgIGlmIChzdXBwb3J0c0RyYXdCdWZm
ZXJzKCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RyYXdfYnVmZmVycyIpOwotICAg
IGlmIChBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1
bHQuYXBwZW5kKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7Ci0KLSAgICBpZiAoYWxsb3dQcml2
aWxlZ2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpKQotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfc2hhZGVycyIpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIik7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIFdlYkdM
VGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2V0VGV4UGFyYW1ldGVyIiwg
dGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfVDoKLSAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0
PHVuc2lnbmVkIGludD4odmFsdWUpKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9N
QVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAg
ICAgICBpZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1
ZSkpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1l
dGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiB1bmlmb3JtTG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiZ2V0VW5pZm9ybSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7Ci0gICAgaWYgKCF1bmlmb3JtTG9jYXRpb24gfHwgdW5pZm9ybUxvY2F0aW9uLT5w
cm9ncmFtKCkgIT0gcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtIiwgIm5vIHVuaWZvcm1s
b2NhdGlvbiBvciBub3QgdmFsaWQgZm9yIHRoaXMgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIEdDM0RpbnQgbG9jYXRpb24gPSB1bmlmb3JtTG9j
YXRpb24tPmxvY2F0aW9uKCk7Ci0KLSAgICBHQzNEZW51bSBiYXNlVHlwZTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGg7Ci0gICAgc3dpdGNoICh1bmlmb3JtTG9jYXRpb24tPnR5cGUoKSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUMzOgotICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAzOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzQ6Ci0gICAg
ICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9
IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKLSAg
ICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGgg
PSAxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVD
MjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBs
ZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlRfVkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAg
ICAgICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpJTlRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
OwotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMzOgotICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDNDoKLSAgICAgICAg
YmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDI6
Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBs
ZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVF9NQVQzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsK
LSAgICAgICAgbGVuZ3RoID0gOTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVRfTUFUNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE2OwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNBTVBMRVJfQ1VCRToKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCi0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmhh
bmRsZWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAg
IHN3aXRjaCAoYmFzZVR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDog
ewotICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9OwotICAgICAgICBpZiAobV9pc1Jv
YnVzdG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+Z2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCAx
NiAqIHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24s
IHZhbHVlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyh2YWx1ZVswXSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQz
MkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpJTlQ6IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICAg
ICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSks
IGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci0gICAgfQotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHsw
fTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8o
cHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPiAxKSB7Ci0g
ICAgICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgICAgYm9vbFZhbHVl
W2pdID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbal0pOwotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhib29sVmFsdWUsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZVswXSkpOwotICAgIH0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIC8vIElmIHdl
IGdldCBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiBvdXIgdW5mb3J0dW5hdGVseSBjb21w
bGV4IGxvZ2ljIGFib3ZlCi0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVua25vd24gZXJyb3IiKTsKLSAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm1Mb2NhdGlvbiIsIHByb2dyYW0pKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldFVu
aWZvcm1Mb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAo
IXZhbGlkYXRlU3RyaW5nKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImdldFVuaWZvcm1Mb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIEdDM0RpbnQgdW5pZm9ybUxvY2F0aW9uID0gbV9j
b250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsK
LSAgICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0Tm9u
QnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsKLSAgICBmb3IgKEdD
M0RpbnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsrKSB7Ci0gICAgICAgIEFjdGl2ZUlu
Zm8gaW5mbzsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1lIGlmIGl0J3MgYW4gYXJyYXkuCi0g
ICAgICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIpKQotICAgICAgICAgICAgaW5mby5u
YW1lID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0aCgpIC0gMyk7Ci0gICAgICAgIC8v
IElmIGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGVhY2ggZWxlbWVu
dCwgYXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4KLSAgICAgICAgZm9yIChHQzNEaW50
IGluZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFN0
cmluZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSArICJbIiArIFN0cmluZzo6bnVtYmVyKGluZGV4
KSArICJdIjsKLQotICAgICAgICAgICAgaWYgKG5hbWUgPT0gdW5pZm9ybU5hbWUgfHwgbmFtZSA9
PSBpbmZvLm5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMVW5pZm9ybUxvY2F0aW9u
OjpjcmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9uLCBpbmZvLnR5cGUpOwotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwotCi0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFZl
cnRleEF0dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6
OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0
VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgaWYgKG1fYW5nbGVJbnN0YW5jZWRBcnJh
eXMgJiYgcG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRElW
SVNPUl9BTkdMRSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5kaXZpc29yKTsK
LQotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICBpZiAoKCFpc0dMRVMyQ29t
cGxpYW50KCkgJiYgIWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4
QXR0cmliU3RhdGUoMCkuYnVmZmVyQmluZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpCi0g
ICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZwotICAgICAgICAgICAgfHwgIXN0YXRl
LmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+
KHN0YXRlLmJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3Rh
dGUuZW5hYmxlZCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9B
UlJBWV9OT1JNQUxJWkVEOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm5vcm1h
bGl6ZWQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlf
U0laRToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5zaXplKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5vcmlnaW5hbFN0cmlkZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgotICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHN0YXRlLnR5cGUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNV
UlJFTlRfVkVSVEVYX0FUVFJJQjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMy
QXJyYXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCkpOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1sb25nIGxvbmcg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RlbnVtIHBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIEdDM0RzaXplaXB0ciByZXN1bHQgPSBtX2NvbnRleHQt
PmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KHJlc3VsdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBpc1ZhbGlkID0g
ZmFsc2U7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpHRU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElW
RV9ISU5UX09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCi0gICAgICAgIGlmIChtX29l
c1N0YW5kYXJkRGVyaXZhdGl2ZXMpCi0gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICghaXNWYWxpZCkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiaGludCIsICJpbnZhbGlk
IHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+aGludCh0
YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omlz
QnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIgfHwgaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYnVmZmVy
LT5oYXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1f
Y29udGV4dC0+aXNCdWZmZXIoYnVmZmVyLT5vYmplY3QoKSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250
ZXh0TG9zdDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQ29udGV4dExvc3RP
clBlbmRpbmcoKQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gJiYgIW1f
aGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBMT0coV2ViR0wsICJDb250
ZXh0IGlzIGJlaW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgcG9saWN5LiIpOwotICAg
ICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS50b3BEb2N1bWVu
dCgpOwotICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpOwotICAgICAgICBpZiAo
cGFnZSAmJiAhZG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgICAgIHBhZ2Ut
Pm1haW5GcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLnJlc29sdmVXZWJHTFBvbGljeUZvclVSTChk
b2N1bWVudC51cmwoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkgZG8g
YW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0IGZyb20gcmVzb2x1dGlvbi4gQSBtb3JlCi0gICAgICAg
IC8vIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG1pZ2h0IHRyeSB0byBjb25zdHJ1Y3QgYSByZWFs
IGNvbnRleHQsIGV0YyBhbmQgcHJvY2VlZAotICAgICAgICAvLyB3aXRoIG5vcm1hbCBvcGVyYXRp
b24uCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjkxMjIKLSAgICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0TG9zdCB8fCBtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb247Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVk
KEdDM0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIsIGNhcCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkKLSAgICAgICAg
cmV0dXJuIG1fc3RlbmNpbEVuYWJsZWQ7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVk
KGNhcCk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNGcmFtZWJ1
ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVm
ZmVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpZiAoIWZyYW1lYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2Jq
ZWN0KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUHJvZ3Jh
bShXZWJHTFByb2dyYW0qIHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtIHx8IGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250
ZXh0LT5pc1Byb2dyYW0ocHJvZ3JhbS0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5k
ZXJidWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghcmVuZGVyYnVmZmVyLT5oYXNF
dmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4
dC0+aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7Ci19Ci0KLUdDM0Rib29s
ZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikK
LXsKLSAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNTaGFkZXIoc2hhZGVyLT5vYmpl
Y3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJl
KFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUgfHwgaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghdGV4dHVyZS0+
aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2Nv
bnRleHQtPmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmxp
bmVXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJv
Z3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdCgibGlua1Byb2dyYW0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiB2
ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQz
RDo6VkVSVEVYX1NIQURFUik7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiBmcmFnbWVudFNoYWRlciA9
IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9T
SEFERVIpOwotICAgICAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5pc1Zh
bGlkKCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNWYWxpZCgpIHx8
ICFtX2NvbnRleHQtPnByZWNpc2lvbnNNYXRjaChvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwg
b2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkgfHwgIW1fY29udGV4dC0+Y2hlY2tWYXJ5aW5n
c1BhY2tpbmcob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciksIG9iamVjdE9yWmVybyhmcmFnbWVu
dFNoYWRlcikpKSB7Ci0gICAgICAgICAgICBwcm9ncmFtLT5zZXRMaW5rU3RhdHVzKGZhbHNlKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+
bGlua1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAgICBwcm9ncmFtLT5pbmNyZWFz
ZUxpbmtDb3VudCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9y
ZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgotICAgICAgICBt
X3VucGFja0ZsaXBZID0gcGFyYW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKLSAgICAgICAgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhID0gcGFyYW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6Ci0gICAg
ICAgIGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdM
IHx8IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKQotICAgICAgICAgICAgbV91bnBh
Y2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihwYXJhbSk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBm
b3IgVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlBBQ0tfQUxJR05NRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQ6Ci0gICAgICAgIGlmIChwYXJhbSA9PSAxIHx8IHBhcmFtID09IDIgfHwgcGFyYW0g
PT0gNCB8fCBwYXJhbSA9PSA4KSB7Ci0gICAgICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UKQotICAgICAgICAgICAgICAgIG1fcGFja0FsaWdubWVu
dCA9IHBhcmFtOwotICAgICAgICAgICAgZWxzZSAvLyBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVDoKLSAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCA9IHBhcmFtOwot
ICAgICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3Ig
YWxpZ25tZW50Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2NvbnRleHQtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBEdWUg
dG8gV2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMsIGl0IGlzIG5vdCBwb3NzaWJsZSB0
bwotICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhlIFdlYkdMIEFQSS4KLSAgICBBU1NF
UlQoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOwotICAgIC8vIFZhbGlkYXRlIGlucHV0IHBhcmFt
ZXRlcnMuCi0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFkUGl4ZWxzIiwgIm5vIGRlc3RpbmF0
aW9uIEFycmF5QnVmZmVyVmlldyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN3aXRj
aCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFs
aWQgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgdHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxz
IiwgImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJR05FRF9CWVRFIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgLy8gVmFsaWRhdGUgYXJyYXkgdHlwZSBhZ2FpbnN0IHBpeGVs
IHR5cGUuCi0gICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4KSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVm
ZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgcmVh
c29uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBDYWxjdWxhdGUgYXJyYXkgc2l6
ZSwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FMSUdOTUVOVC4KLSAgICB1bnNp
Z25lZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgcGFkZGlu
ZyA9IDA7Ci0gICAgaWYgKCFtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgewotICAgICAgICBH
QzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0
LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWly
ZWQsICZwYWRkaW5nKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpO
T19FUlJPUikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJyZWFkUGl4
ZWxzIiwgImludmFsaWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJl
ZCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IGxhcmdl
IGVub3VnaCBmb3IgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICB2b2lkKiBkYXRhID0gcGl4
ZWxzLT5iYXNlQWRkcmVzcygpOwotCi0gICAgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVy
QmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5n
LmdldCgpKTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAg
ICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlYWRuUGl4ZWxzRVhUKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5ieXRlTGVuZ3RoKCksIGRhdGEpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAgICB9Ci0KLSNpZiBPUyhEQVJXSU4p
Ci0gICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKSAvLyB3ZSBoYXZlbid0IGNvbXB1
dGVkIHBhZGRpbmcKLSAgICAgICAgbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhm
b3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNS
ZXF1aXJlZCwgJnBhZGRpbmcpOwotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBzZWN0aW9uIHdo
ZW4gR0wgZHJpdmVyIGJ1ZyBvbiBNYWMgQU5EIHRoZSBHTEVTIGRyaXZlciBidWcKLSAgICAvLyBv
biBRQyBpcyBmaXhlZCwgaS5lLiwgd2hlbiBhbHBoYSBpcyBvZmYsIHJlYWRQaXhlbHMgc2hvdWxk
Ci0gICAgLy8gc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCi0gICAgaWYgKCFtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiAhbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFscGhh
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KGRhdGEpOwotICAgICAgICBmb3IgKEdDM0RzaXplaSBpeSA9IDA7IGl5IDwg
aGVpZ2h0OyArK2l5KSB7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaSBpeCA9IDA7IGl4IDwg
d2lkdGg7ICsraXgpIHsKLSAgICAgICAgICAgICAgICBwaXhlbHNbM10gPSAyNTU7Ci0gICAgICAg
ICAgICAgICAgcGl4ZWxzICs9IDQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwaXhlbHMg
Kz0gcGFkZGluZzsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5yZWxl
YXNlU2hhZGVyQ29tcGlsZXIoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
bmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAodGFyZ2V0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2Ui
LCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1f
cmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVTaXplKCJyZW5kZXJi
dWZmZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0
Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
Q09NUE9ORU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIGlmIChpbnRl
cm5hbGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9FWFQgJiYgIW1fZXh0c1JH
QikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1h
dCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fY29udGV4dC0+
cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRl
cm5hbGZvcm1hdCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0
cnVlKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWln
aHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMOgotICAgICAgICBpZiAoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSkgewotICAgICAg
ICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgRXh0ZW5zaW9uczNE
OjpERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgfQotICAgICAgICBt
X3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIG1f
cmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgp
KTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRl
cm5hbGZvcm1hdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZm
ZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFsdWUsIEdDM0Rib29sZWFuIGludmVy
dCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoInNj
aXNzb3IiLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+
c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0
cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJzaGFk
ZXJTb3VyY2UiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgU3RyaW5nIHN0cmluZ1dp
dGhvdXRDb21tZW50cyA9IFN0cmlwQ29tbWVudHMoc3RyaW5nKS5yZXN1bHQoKTsKLSAgICBpZiAo
IXZhbGlkYXRlU3RyaW5nKCJzaGFkZXJTb3VyY2UiLCBzdHJpbmdXaXRob3V0Q29tbWVudHMpKQot
ICAgICAgICByZXR1cm47Ci0gICAgc2hhZGVyLT5zZXRTb3VyY2Uoc3RyaW5nKTsKLSAgICBtX2Nv
bnRleHQtPnNoYWRlclNvdXJjZShvYmplY3RPclplcm8oc2hhZGVyKSwgc3RyaW5nV2l0aG91dENv
bW1lbnRzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKEdD
M0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRl
U3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jIiwgZnVuYykpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwot
ICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKLSAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sg
PSBtYXNrOwotICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVu
dW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghdmFsaWRhdGVTdGVuY2lsRnVuYygic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsIGZ1bmMpKQotICAg
ICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7Ci0g
ICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgICAgICBtX3N0ZW5jaWxGdW5j
TWFzayA9IG1hc2s7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UOgotICAgICAgICBt
X3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s6Ci0gICAg
ICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFz
a0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAic3RlbmNpbEZ1
bmNTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1h
c2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFz
azsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWlu
dCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBzd2l0Y2ggKGZhY2UpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVF9BTkRfQkFDSzoKLSAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7Ci0gICAgICAgIG1f
c3RlbmNpbE1hc2tCYWNrID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJPTlQ6Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgotICAgICAgICBtX3N0
ZW5jaWxNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJz
dGVuY2lsTWFza1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBH
QzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVu
Y2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFp
bCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwg
ZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUg
YW55IGVycm9ycyByZXR1cm5lZC4KLSAgICBlYyA9IDA7Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAg
ICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSkpOwotICAgIEFTU0VSVCh0ZXgpOwotICAgIEFTU0VSVCghbGV2
ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKTsKLSAgICBpZiAoIXBp
eGVscykgewotICAgICAgICAvLyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5HTCBpbXBsZW1lbnRhdGlv
biBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMgdGhlcmVmb3JlIHRydWUu
Ci0gICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGlmIHRoZXkgYXJlIHVzaW5n
IEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVzCi0gICAgICAgIC8vIGNh
biBub3QgYmUgY2xlYXJlZCB3aXRoIHRleEltYWdlMkQgYW5kIG11c3QgYmUgY2xlYXJlZCBieSBi
aW5kaW5nIHRvIGFuIGZibyBhbmQgY2FsbGluZwotICAgICAgICAvLyBjbGVhci4KLSAgICAgICAg
aWYgKGlzUmVzb3VyY2VTYWZlKCkpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCBudWxscHRyKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBib29sIHN1
Y2NlZWQgPSBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IG1fdW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgICAgIGlmICghc3VjY2VlZCkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQo
dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSk7
Ci0gICAgICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0g
ICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgICAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3Jz
VG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAgICAgLy8gVGhlIHRleEltYWdlMkQg
ZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQgZG9lc24ndCBoYXZlIHRo
ZSBkYXRhIGZvciB0aGlzIGxldmVsLgotICAgICAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJn
ZXQsIGxldmVsKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICB0
ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgdHlwZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJE
SW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwot
ICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4
dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhh
LCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05F
KTsKLSAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7Ci0gICAgY29uc3Qg
dm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVsRGF0YSgpOwot
Ci0gICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYgKHR5cGUgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAm
JiAhZmxpcFkpCi0gICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0
YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFn
ZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJ0ZXhJbWFnZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAg
ICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElH
Tk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5l
ZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwgZWMpOwotICAgIGlm
IChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSBmdW5jdGlv
blR5cGUsIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSBzb3VyY2VUeXBlLCBHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0KQotewotICAg
IGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uVHlw
ZSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViR0xUZXh0dXJl
KiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyhmdW5jdGlvbk5hbWUsIHRhcmdldCwg
dHJ1ZSk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoZnVuY3Rpb25UeXBlID09IE5vdFRleFN1YkltYWdlMkQpIHsKLSAgICAgICAgaWYgKGxldmVs
ICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRm9yIFNvdXJjZUFycmF5QnVmZmVyVmlldywg
ZnVuY3Rpb24gdmFsaWRhdGVUZXhGdW5jRGF0YSgpIHdvdWxkIGhhbmRsZSB3aGV0aGVyIHRvIHZh
bGlkYXRlIHRoZSBTZXR0YWJsZVRleEZvcm1hdAotICAgICAgICAvLyBieSBjaGVja2luZyBpZiB0
aGUgQXJyYXlCdWZmZXJWaWV3IGlzIG51bGwgb3Igbm90LgotICAgICAgICBpZiAoc291cmNlVHlw
ZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZpZXcpIHsKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVT
ZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVNpemUoZnVuY3Rpb25OYW1lLCB4
b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8g
QmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cg
aGFwcGVucyBmaXJzdC4KLSAgICAgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNl
dCArIGhlaWdodCA8IDApIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJiYWQgZGltZW5zaW9ucyIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICh4b2Zm
c2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0
ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGV4dHVyZS0+Z2V0SW50ZXJuYWxG
b3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8IHRleHR1cmUtPmdldFR5cGUodGFyZ2V0
LCBsZXZlbCkgIT0gdHlwZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIGFuZCBm
b3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4
RnVuY0RhdGEoInRleEltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMsIE51bGxBbGxvd2VkKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJ
bWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0gICAgdm9pZCogZGF0YSA9IHBpeGVscyA/IHBp
eGVscy0+YmFzZUFkZHJlc3MoKSA6IDA7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOwot
ICAgIGJvb2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0gICAgaWYgKGRhdGEgJiYg
KG1fdW5wYWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgewotICAgICAgICBp
ZiAoIW1fY29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFj
a0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7Ci0gICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVu
dCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAg
IG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1F
TlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBl
LCBkYXRhLCBlYyk7Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9j
b250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwg
bV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2Uy
RCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgcGl4ZWxz
LT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAg
ICAgICByZXR1cm47Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgYm9vbCBuZWVkQ29u
dmVyc2lvbiA9IHRydWU7Ci0gICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlz
IG9mIGZvcm1hdCBSR0JBOC4KLSAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0
aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZs
aXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmICghbV91bnBh
Y2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAg
ICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwg
bV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAg
IG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1F
TlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgbmVl
ZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsK
LSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhl
bFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGln
bm1lbnQpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRy
YXdJbWFnZUludG9CdWZmZXIoSW1hZ2UqIGltYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGlu
dCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICBJbnRTaXplIHNpemUod2lkdGgsIGhlaWdodCk7
Ci0gICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1
ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKLSAgICBpZiAoIWJ1
ZikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09G
X01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGlt
YWdlLT5zaXplKCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCksIHNpemUp
OwotICAgIGJ1Zi0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgidGV4SW1hZ2UyRCIsIGlt
YWdlLCBlYykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JS
ZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVu
ZGVyZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdlKCkpCi0gICAgICAg
IGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFnZUZvclJlbmRlci5nZXQo
KSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0KLSAgICBpZiAoIWltYWdl
Rm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFn
ZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQoKSwgMCwg
Zm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGV4SW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JS
ZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4SW1h
Z2UyRCIsIGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RU
ZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0
LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR0xUZXh0dXJlKiB0ZXh0
dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7
Ci0gICAgLy8gSWYgcG9zc2libGUsIGNvcHkgZnJvbSB0aGUgY2FudmFzIGVsZW1lbnQgZGlyZWN0
bHkgdG8gdGhlIHRleHR1cmUKLSAgICAvLyB2aWEgdGhlIEdQVSwgd2l0aG91dCBhIHJlYWQtYmFj
ayB0byBzeXN0ZW0gbWVtb3J5LgotICAgIC8vCi0gICAgLy8gRklYTUU6IHJlc3RyaWN0aW9uIG9m
IChSR0IgfHwgUkdCQSkvVU5TSUdORURfQllURSBzaG91bGQgYmUgbGlmdGVkIHdoZW4KLSAgICAv
LyBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGltcGxlbWVudGF0aW9ucyBhcmUg
ZnVsbHkgZnVuY3Rpb25hbC4KLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQg
PT0gdGFyZ2V0ICYmIHRleHR1cmUgJiYgdHlwZSA9PSB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwg
bGV2ZWwpCi0gICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpICYmIHR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNh
bnZhcy0+YnVmZmVyKCk7Ci0gICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0
Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFs
Zm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7Ci0gICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgdHlwZSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFn
ZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOwotICAgIGlmIChpbWFnZURhdGEpCi0gICAg
ICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7Ci0gICAgZWxzZQotICAgICAgICB0ZXhJbWFnZTJESW1w
bCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNv
cGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVOQUJMRShWSURF
TykKLVBhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRv
SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0
b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSW50U2l6ZSBzaXplKHZpZGVvLT52aWRl
b1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpKTsKLSAgICBJbWFnZUJ1ZmZlciogYnVmID0g
bV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOwotICAgIGlmICghYnVmKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVN
T1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLSAgICBJbnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSk7Ci0gICAgLy8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGEgR1BVLUdQVSB0ZXh0
dXJlIGNvcHkgaW5zdGVhZCBvZiBDUFUgcmVhZGJhY2suCi0gICAgdmlkZW8tPnBhaW50Q3VycmVu
dEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIGJ1
Zi0+Y29weUltYWdlKGJhY2tpbmdTdG9yZUNvcHkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRl
bywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4SW1hZ2UyRCIs
IHZpZGVvLCBlYykKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5v
dFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwg
MCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gR28gdGhy
b3VnaCB0aGUgZmFzdCBwYXRoIGRvaW5nIGEgR1BVLUdQVSB0ZXh0dXJlcyBjb3B5IHdpdGhvdXQg
YSByZWFkYmFjayB0byBzeXN0ZW0gbWVtb3J5IGlmIHBvc3NpYmxlLgotICAgIC8vIE90aGVyd2lz
ZSwgaXQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBTVyBwYXRoLgotICAgIC8vIEZJWE1F
OiBUaGUgY3VycmVudCByZXN0cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZvcm1hdCBzaG91ZCBiZSBS
R0Igb3IgUkdCQSwKLSAgICAvLyB0eXBlIHNob3VsZCBiZSBVTlNJR05FRF9CWVRFIGFuZCBsZXZl
bCBzaG91bGQgYmUgMC4gSXQgbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlLgotICAgIFdlYkdM
VGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0
YXJnZXQsIHRydWUpOwotICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCA9PSB0
YXJnZXQgJiYgdGV4dHVyZQotICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKQotICAgICAgICAmJiB0
eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAgICYmICh0ZXh0
dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKQotICAgICAgICAmJiAh
bGV2ZWwpIHsKLSAgICAgICAgaWYgKHZpZGVvLT5jb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRl
eHR1cmUobV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwgbGV2ZWwsIHR5cGUsIGlu
dGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7
Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCB0eXBl
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vcm1h
bCBwdXJlIFNXIHBhdGguCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0lt
YWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwotICAgIGlm
ICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhLCBlYyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFy
YW1mLCBHQzNEaW50IHBhcmFtaSwgYm9vbCBpc0Zsb2F0KQotewotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9
IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFBhcmFtZXRlciIsIHRhcmdldCwgZmFsc2UpOwot
ICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgotICAgICAgICBpZiAoKGlzRmxvYXQgJiYgcGFy
YW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtZiAhPSBHcmFw
aGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVQRUFUKQotICAgICAgICAgICAgfHwgKCFpc0Zsb2F0ICYmIHBhcmFtaSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVB
VCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRl
cl9hbmlzb3Ryb3BpYwotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyLCBFWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoaXNGbG9hdCkgewotICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmYocG5hbWUsIHBhcmFt
Zik7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBwYXJh
bWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRleC0+c2V0UGFyYW1ldGVyaShwbmFtZSwgcGFy
YW1pKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBh
cmFtaSk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1l
dGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pCi17
Ci0gICAgdGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIHBhcmFtLCAwLCB0cnVlKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICB0ZXhQYXJhbWV0ZXIodGFy
Z2V0LCBwbmFtZSwgMCwgcGFyYW0sIGZhbHNlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBw
aXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGln
bm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCi0gICAgZWMgPSAwOwotICAgIEFTU0VSVCghaXNDb250
ZXh0TG9zdCgpKTsKLSAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4U3Vi
SW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgMCwgZm9ybWF0LCB0eXBlKSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlU2l6ZSgidGV4U3Vi
SW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpKTsKLSAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJs
ZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCkpOwotICAgIFdlYkdMVGV4dHVyZSog
dGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1
ZSk7Ci0gICAgaWYgKCF0ZXgpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKCh4b2Zmc2V0ICsgd2lkdGgpID49IDApOwot
ICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdodCkgPj0gMCk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0
V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhvZmZzZXQgKyB3aWR0aCkpOwotICAgIEFTU0VSVCh0
ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSA+PSAoeW9mZnNldCArIGhlaWdodCkpOwotICAg
IEFTU0VSVCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpID09IGZvcm1hdCk7
Ci0gICAgQVNTRVJUKHRleC0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSB0eXBlKTsKLSAgICBt
X2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0
bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBWZWN0b3I8dWludDhfdD4g
ZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0
b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNl
Q29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7ICAKLSAgICBpZiAoIWltYWdl
RXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFk
IGltYWdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNl
Rm9ybWF0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCA9IGltYWdl
RXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwotICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRh
ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKLQotICAgIGJvb2wgbmVlZENvbnZl
cnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYgIWZsaXBZKQotICAgICAgICBu
ZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIW1fY29udGV4
dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxp
cFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgo
KSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3Vy
Y2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQg
aW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleFN1
YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0
aCgpLCBpbWFnZS0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwgIG5lZWRDb252ZXJzaW9uID8gZGF0
YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVu
dCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzLCBOdWxsTm90QWxsb3dlZCkKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4
RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmll
dywgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUs
IHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0gICAgdm9pZCogZGF0YSA9IHBp
eGVscy0+YmFzZUFkZHJlc3MoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7Ci0gICAg
Ym9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKLSAgICBpZiAoZGF0YSAmJiAobV91
bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7Ci0gICAgICAgIGlmICgh
bV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxp
Z25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5w
YWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKLSAgICAgICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0g
dHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9j
b250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwg
MSk7Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7Ci0gICAgaWYgKGNoYW5n
ZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGlj
c0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
ZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAh
dmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSW1h
Z2VEYXRhLCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsICBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+
aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGJvb2wgbmVlZENvbnZlcnNp
b24gPSB0cnVlOwotICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBvZiBm
b3JtYXQgUkdCQTguCi0gICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGluYXRp
b24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlwIG9y
IFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAoZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUgJiYgIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkK
LSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYg
KCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1fdW5w
YWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4
U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwgbmVl
ZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsK
LSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhl
bFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGln
bm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGltYWdl
LCBlYykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5k
ZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVy
ZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdlKCkpCi0gICAgICAgIGlt
YWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFnZUZvclJlbmRlci5nZXQoKSwg
aW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0KLSAgICBpZiAoIWltYWdlRm9y
UmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJE
LCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGltYWdlRm9y
UmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlw
ZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRleFN1YkltYWdl
MkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1h
Z2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5w
YWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBl
YyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1M
Q2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZhcywgZWMpCi0gICAgICAgIHx8ICF2
YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1M
Q2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNh
bnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+
Z2V0SW1hZ2VEYXRhKCk7Ci0gICAgaWYgKGltYWdlRGF0YSkKLSAgICAgICAgdGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0
YS5nZXQoKSwgZWMpOwotICAgIGVsc2UKLSAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZElt
YWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBt
X3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgdmlkZW8sIGVjKQotICAgICAgICB8
fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNl
SFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0
aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zm
c2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVv
RnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMp
OwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICB0ZXhTdWJJbWFnZTJESW1w
bCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdl
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBw
cm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZv
cm0xZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
RmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgMSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
bGVuZ3RoKCksIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0
KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHNpemUsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVu
aWZvcm0xaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKChsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlNBTVBMRVJfQ1VCRSkgJiYgeCA+PSAoaW50KW1fdGV4dHVyZVVuaXRzLnNpemUoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInVuaWZvcm0xaSIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobG9jYXRpb24tPmxvY2F0aW9uKCks
IHgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxv
Y2F0aW9uLCB2LCAxKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT50eXBl
KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKQotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdi0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKHYtPmRhdGEo
KVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNpemUoKSkpIHsKLSAgICAg
ICAgICAgICAgICBMT0coV2ViR0wsICJUZXh0dXJlIHVuaXQgc2l6ZT0lenUsIHZbJWRdPSVkLiBM
b2NhdGlvbiB0eXBlID0gJTA0WC4iLCBtX3RleHR1cmVVbml0cy5zaXplKCksIGksIHYtPmRhdGEo
KVtpXSwgbG9jYXRpb24tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFs
aWQgdGV4dHVyZSB1bml0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHYtPmxlbmd0aCgpLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwg
MSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoKChH
QzNEaW50Kil2KVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNpemUoKSkp
IHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIG1f
Y29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJm
IiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
eCwgeSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yZnYi
LCBsb2NhdGlvbiwgdiwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5p
Zm9ybTJmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMiwgdik7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxv
Y2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3Jt
MmkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpKGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB4LCB5KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYi
LCBsb2NhdGlvbiwgdiwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZv
cm0yaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
Y29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxv
YXQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtM2YiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCAzKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5n
dGgoKSAvIDMsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0
KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHNpemUgLyAzLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEaW50IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3Vy
cmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3Vy
cmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQt
PnVuaWZvcm0zaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYsIDMpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYsIHNp
emUsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVu
aWZvcm00ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHgsIHksIHosIHcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJh
eSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJz
KCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIDQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8g
NCwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
c2l6ZSAvIDQsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRp
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RpbnQgeiwgR0MzRGludCB3LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0
aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00aSIsICJsb2NhdGlvbiBub3QgZm9y
IGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250
ZXh0LT51bmlmb3JtNGkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2LCA0
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9u
LCB2LCBzaXplLCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3Jt
NGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygi
dW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LT5sZW5ndGgoKSAvIDQsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
TWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2Us
IHYsIHNpemUsIDQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdHJhbnNwb3NlLCB2KTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0
MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwg
OSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gOSwgdHJhbnNwb3NlLCB2LT5kYXRhKCkp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwg
R0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRp
b24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgOSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA5LCB0cmFu
c3Bvc2UsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJp
eDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRy
YW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0ZnYiLCBsb2NhdGlvbiwg
dHJhbnNwb3NlLCB2LCAxNikpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZv
cm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMTYsIHRyYW5z
cG9zZSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1h
dHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2KSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgc2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICgh
Y2hlY2tPYmplY3RUb0JlQm91bmQoInVzZVByb2dyYW0iLCBwcm9ncmFtLCBkZWxldGVkKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBwcm9ncmFtID0gMDsKLSAg
ICBpZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVz
ZVByb2dyYW0iLCAicHJvZ3JhbSBub3QgdmFsaWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7Ci0gICAgICAgIGlmIChtX2N1
cnJlbnRQcm9ncmFtKQotICAgICAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+b25EZXRhY2hlZChn
cmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICAgICAgbV9jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07
Ci0gICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOwot
ICAgICAgICBpZiAocHJvZ3JhbSkKLSAgICAgICAgICAgIHByb2dyYW0tPm9uQXR0YWNoZWQoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2dyYW0o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoInZhbGlkYXRlUHJvZ3JhbSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgdjApCi17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0
dHJpYjFmIiwgaW5kZXgsIDEsIHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgRmxvYXQz
MkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2Iiwg
aW5kZXgsIHYsIDEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewot
ICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIHNpemUs
IDEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIHZlcnRleEF0
dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIsIGluZGV4LCAyLCB2MCwgdjEsIDAuMGYsIDEuMGYp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1
aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2
ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgMik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0Mz
RHNpemVpIHNpemUpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYi
LCBpbmRleCwgdiwgc2l6ZSwgMik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEs
IEdDM0RmbG9hdCB2MikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliM2Yi
LCBpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikK
LXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCAz
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICB2ZXJ0ZXhB
dHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCBzaXplLCAzKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMp
Ci17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjRmIiwgaW5kZXgsIDQsIHYw
LCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0
dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIDQpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVy
dGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIHNpemUsIDQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBz
aXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3Ry
aWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpC
WVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFs
aWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpbmRleCA+PSBtX21h
eFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImluZGV4IG91dCBv
ZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzaXplIDwgMSB8fCBz
aXplID4gNCB8fCBzdHJpZGUgPCAwIHx8IHN0cmlkZSA+IDI1NSB8fCBvZmZzZXQgPCAwKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQgc2l6ZSwgc3RyaWRlIG9yIG9mZnNldCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVyKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAibm8gYm91bmQgQVJSQVlfQlVGRkVSIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZWxl
bWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhlIG9mZnNldCwgc2l6ZSwg
dHlwZSBhbmQgc3RyaWRlCi0gICAgdW5zaWduZWQgaW50IHR5cGVTaXplID0gc2l6ZUluQnl0ZXMo
dHlwZSk7Ci0gICAgaWYgKCF0eXBlU2l6ZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJp
bnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoKHN0cmlkZSAl
IHR5cGVTaXplKSB8fCAoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSAlIHR5cGVTaXpl
KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgInN0cmlkZSBvciBvZmZzZXQgbm90
IHZhbGlkIGZvciB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR0MzRHNpemVp
IGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiB0eXBlU2l6ZTsKLQotICAgIG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGJ5dGVzUGVyRWxlbWVudCwg
c2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBtX2JvdW5kQXJyYXlCdWZmZXIpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
UG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKCJ2aWV3cG9ydCIsIHdpZHRoLCBoZWlnaHQp
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlTG9zdENvbnRl
eHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImxvc2VDb250ZXh0IiwgImNv
bnRleHQgYWxyZWFkeSBsb3N0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Nv
bnRleHRHcm91cC0+bG9zZUNvbnRleHRHcm91cChtb2RlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxvc3RD
b250ZXh0TW9kZSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29udGV4dExvc3QgPSB0cnVlOwotICAgIG1fY29udGV4dExvc3RNb2Rl
ID0gbW9kZTsKLQotICAgIGlmIChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgewotICAgICAgICAv
LyBJbmZvcm0gdGhlIGVtYmVkZGVyIHRoYXQgYSBsb3N0IGNvbnRleHQgd2FzIHJlY2VpdmVkLiBJ
biByZXNwb25zZSwgdGhlIGVtYmVkZGVyIG1pZ2h0Ci0gICAgICAgIC8vIGRlY2lkZSB0byB0YWtl
IGFjdGlvbiBzdWNoIGFzIGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlzc2lvbiB0byB1c2UgV2Vi
R0wgYWdhaW4uCi0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjYW52YXMoKS0+ZG9jdW1lbnQo
KS5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmRpZExvc2VX
ZWJHTENvbnRleHQobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRT
dGF0dXNBUkIoKSk7Ci0gICAgfQotCi0gICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwot
Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBNYWtlIGFic29sdXRlbHkg
c3VyZSB3ZSBkbyBub3QgcmVmZXIgdG8gYW4gYWxyZWFkeS1kZWxldGVkIHRleHR1cmUgb3IgZnJh
bWVidWZmZXIuCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZygw
KTsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7Ci0g
ICAgfQotCi0gICAgLy8gVGhlcmUgaXMgbm8gZGlyZWN0IHdheSB0byBjbGVhciBlcnJvcnMgZnJv
bSBhIEdMIGltcGxlbWVudGF0aW9uIGFuZAotICAgIC8vIGxvb3BpbmcgdW50aWwgZ2V0RXJyb3Io
KSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRlIGxvb3AgaWYKLSAgICAv
LyB0aGUgZHJpdmVyIG9yIGNvbnRleHQgaW1wbGVtZW50YXRpb24gaGFkIGEgYnVnLiBTbywgbG9v
cCBhIHJlYXNvbmFibHkKLSAgICAvLyBsYXJnZSBudW1iZXIgb2YgdGltZXMgdG8gY2xlYXIgYW55
IGV4aXN0aW5nIGVycm9ycy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgKytpKSB7Ci0g
ICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIENvbnNvbGVEaXNwbGF5UHJl
ZmVyZW5jZSBkaXNwbGF5ID0gKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSA/IERpc3BsYXlJbkNv
bnNvbGU6IERvbnREaXNwbGF5SW5Db25zb2xlOwotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wsICJsb3NlQ29udGV4dCIsICJjb250ZXh0
IGxvc3QiLCBkaXNwbGF5KTsKLQotICAgIC8vIERvbid0IGFsbG93IHJlc3RvcmF0aW9uIHVubGVz
cyB0aGUgY29udGV4dCBsb3N0IGV2ZW50IGhhcyBib3RoIGJlZW4KLSAgICAvLyBkaXNwYXRjaGVk
IGFuZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBwcmV2ZW50ZWQuCi0gICAgbV9yZXN0b3JlQWxsb3dl
ZCA9IGZhbHNlOwotCi0gICAgLy8gQWx3YXlzIGRlZmVyIHRoZSBkaXNwYXRjaCBvZiB0aGUgY29u
dGV4dCBsb3N0IGV2ZW50LCB0byBpbXBsZW1lbnQKLSAgICAvLyB0aGUgc3BlYyBiZWhhdmlvciBv
ZiBxdWV1ZWluZyBhIHRhc2suCi0gICAgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lci5z
dGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZVJl
c3RvcmVDb250ZXh0KCkKLXsKLSAgICBpZiAoIWlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IG5vdCBsb3N0Iik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpIHsKLSAgICAgICAgaWYg
KG1fY29udGV4dExvc3RNb2RlID09IFN5bnRoZXRpY0xvc3RDb250ZXh0KQotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
cmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCByZXN0b3JhdGlvbiBub3QgYWxsb3dlZCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc3RvcmVUaW1lci5pc0FjdGl2ZSgp
KQotICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLVBsYXRmb3Jt
TGF5ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICghaXNDb250ZXh0TG9zdCgpICYmICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24pID8gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCkgOiAwOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmpl
Y3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZU9iamVjdChvYmplY3QpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOwotICAgIG1fY29u
dGV4dEdyb3VwLT5hZGRPYmplY3Qob2JqZWN0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0KiBvYmplY3QpCi17
Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9jb250ZXh0T2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmFkZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0KiBvYmpl
Y3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOwotICAgIG1fY29udGV4dE9iamVj
dHMuYWRkKG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hB
bmRSZW1vdmVBbGxPYmplY3RzKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAobV9jb250ZXh0T2JqZWN0cy5zaXpl
KCkgPiAwKSB7Ci0gICAgICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0T2JqZWN0Kj46Oml0ZXJhdG9y
IGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdpbigpOwotICAgICAgICAoKml0KS0+ZGV0YWNoQ29u
dGV4dCgpOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6c3RvcCgpCi17Ci0gICAgaWYgKCFpc0NvbnRleHRMb3N0KCkgJiYg
IW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBmb3JjZUxvc3RDb250ZXh0
KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKLSAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNE
KCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRC
b29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdDM0Rib29sZWFuIHZhbHVl
ID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCAmdmFsdWUpOwotICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKLX0KLQotV2ViR0xH
ZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQotewotICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfV1JJVEVNQVNLKSB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oMCwgMCk7Ci0gICAgfQotICAgIEdDM0Rib29sZWFuIHZhbHVlWzRdID0g
ezB9OwotICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKLSAgICBib29s
IGJvb2xWYWx1ZVs0XTsKLSAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgNDsgKytpaSkKLSAgICAg
ICAgYm9vbFZhbHVlW2lpXSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2lpXSk7Ci0gICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhib29sVmFsdWUsIDQpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAg
ICBHQzNEZmxvYXQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCAm
dmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotfQotCi1XZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUp
Ci17Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2Vydihw
bmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLX0KLQotV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIo
R0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBu
YW1lKQotewotICAgIEdDM0RmbG9hdCB2YWx1ZVs0XSA9IHswfTsKLSAgICBtX2NvbnRleHQtPmdl
dEZsb2F0dihwbmFtZSwgdmFsdWUpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7Ci0gICAgc3dp
dGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRf
U0laRV9SQU5HRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAg
ICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EX0NPTE9SOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFS
X1ZBTFVFOgotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLX0KLQotV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNE
ZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OwotICAgIG1fY29udGV4
dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwot
ICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklF
V1BPUlRfRElNUzoKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VklFV1BPUlQ6Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotICAgIHJldHVybiBX
ZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRvRHJhdykKLXsKLSAgICBib29sIHJlc2V0
QWN0aXZlVW5pdCA9IGZhbHNlOwotICAgIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZs
YWcgZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lv
bkZsYWc+KChtX29lc1RleHR1cmVGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4
dGVuc2lvbkZsb2F0TGluZWFyRW5hYmxlZCA6IDApIHwgKG1fb2VzVGV4dHVyZUhhbGZGbG9hdExp
bmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkhhbGZGbG9hdExpbmVhckVuYWJs
ZWQgOiAwKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlpID0gMDsgaWkgPCBtX3RleHR1cmVVbml0
cy5zaXplKCk7ICsraWkpIHsKLSAgICAgICAgaWYgKChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVy
ZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRv
VXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKQotICAgICAgICAgICAgfHwgKG1fdGV4dHVyZVVu
aXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1
cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKSkgewot
ICAgICAgICAgICAgaWYgKGlpICE9IG1fYWN0aXZlVGV4dHVyZVVuaXQpIHsKLSAgICAgICAgICAg
ICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOwotICAgICAgICAgICAgICAgIHJlc2V0
QWN0aXZlVW5pdCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc2V0QWN0aXZlVW5p
dCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShpaSk7Ci0gICAg
ICAgICAgICAgICAgcmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBXZWJHTFRleHR1cmUqIHRleDJEOwotICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0
ZXhDdWJlTWFwOwotICAgICAgICAgICAgaWYgKHByZXBhcmVUb0RyYXcpIHsKLSAgICAgICAgICAg
ICAgICBTdHJpbmcgbXNnKFN0cmluZygidGV4dHVyZSBib3VuZCB0byB0ZXh0dXJlIHVuaXQgIikg
KyBTdHJpbmc6Om51bWJlcihpaSkKLSAgICAgICAgICAgICAgICAgICAgKyAiIGlzIG5vdCByZW5k
ZXJhYmxlLiBJdCBtYXliZSBub24tcG93ZXItb2YtMiBhbmQgaGF2ZSBpbmNvbXBhdGlibGUgdGV4
dHVyZSBmaWx0ZXJpbmcgb3IgaXMgbm90ICd0ZXh0dXJlIGNvbXBsZXRlJywiCi0gICAgICAgICAg
ICAgICAgICAgICsgIiBvciBpdCBpcyBhIGZsb2F0L2hhbGYtZmxvYXQgdHlwZSB3aXRoIGxpbmVh
ciBmaWx0ZXJpbmcgYW5kIHdpdGhvdXQgdGhlIHJlbGV2YW50IGZsb2F0L2hhbGYtZmxvYXQgbGlu
ZWFyIGV4dGVuc2lvbiBlbmFibGVkLiIpOwotICAgICAgICAgICAgICAgIHByaW50R0xXYXJuaW5n
VG9Db25zb2xlKGZ1bmN0aW9uTmFtZSwgbXNnLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAg
ICAgIHRleDJEID0gbV9ibGFja1RleHR1cmUyRC5nZXQoKTsKLSAgICAgICAgICAgICAgICB0ZXhD
dWJlTWFwID0gbV9ibGFja1RleHR1cmVDdWJlTWFwLmdldCgpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICB0ZXgyRCA9IG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRC
aW5kaW5nLmdldCgpOwotICAgICAgICAgICAgICAgIHRleEN1YmVNYXAgPSBtX3RleHR1cmVVbml0
c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVy
ZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5z
aW9ucykpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKHRleDJEKSk7Ci0gICAgICAgICAgICBp
ZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0
ZW5zaW9ucykpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgb2JqZWN0T3JaZXJvKHRleEN1YmVNYXApKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVzZXRBY3RpdmVVbml0KQotICAgICAgICBtX2Nv
bnRleHQtPmFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlVW5pdCk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKQotewot
ICAgIHVuc2lnbmVkIGNoYXIgYmxhY2tbXSA9IHswLCAwLCAwLCAyNTV9OwotICAgIG1fYmxhY2tU
ZXh0dXJlMkQgPSBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9ibGFja1RleHR1cmUyRC0+b2JqZWN0KCkp
OwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotICAgIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcCA9IGNy
ZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBtX2JsYWNrVGV4dHVyZUN1YmVNYXAtPm9iamVjdCgpKTsK
LSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1h
Z2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YLCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2Nv
bnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aLCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFj
ayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCAwKTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZl
ckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJuYWxGb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCkKLXsKLSAgICB1bnNpZ25lZCBuZWVk
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQodGV4SW50ZXJuYWxG
b3JtYXQpOwotICAgIHVuc2lnbmVkIGhhdmUgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2hhbm5l
bEJpdHNCeUZvcm1hdChjb2xvckJ1ZmZlckZvcm1hdCk7Ci0gICAgcmV0dXJuIChuZWVkICYgaGF2
ZSkgPT0gbmVlZDsKLX0KLQotR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3Vu
ZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKQotewotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKLSAgICBpZiAobV9hdHRy
aWJ1dGVzLmFscGhhKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0g
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpCi17Ci0gICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAg
cmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlcldpZHRoKCk7Ci0gICAg
cmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkg
OiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKLX0KLQot
aW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpCi17
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1
ZmZlckhlaWdodCgpOwotICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZm
ZXItPnNpemUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5oZWlnaHQoKTsKLX0KLQotV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQotewotICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSA9IG51bGxwdHI7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgotICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJl
VW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGlmICghdXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJl
VW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQOgotICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3Rp
dmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0
Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBpZiAoIXRleHR1cmUpCi0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOwotICAgIHJldHVybiB0ZXh0dXJlOwot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIGNv
bnN0IHVuc2lnbmVkIG1heFdlYkdMTG9jYXRpb25MZW5ndGggPSAyNTY7Ci0gICAgaWYgKHN0cmlu
Zy5sZW5ndGgoKSA+IG1heFdlYkdMTG9jYXRpb25MZW5ndGgpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
ImxvY2F0aW9uIGxlbmd0aCA+IDI1NiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpCi17
Ci0gICAgaWYgKHggPCAwIHx8IHkgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzaXplIDwgMCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghdmFsaWRhdGVDaGFy
YWN0ZXIoc3RyaW5nW2ldKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInN0cmluZyBub3QgQVND
SUkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4
RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5B
TkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0NPTVBPTkVOVDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRleHR1cmUpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGggdGV4dHVyZSBmb3JtYXRzIG5vdCBl
bmFibGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
U1JHQl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGlmICgoZm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQgfHwg
Zm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQpCi0gICAgICAgICAgICAmJiBt
X2V4dHNSR0IpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
ZXh0dXJlIGZvcm1hdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgotICAgICAgICBpZiAobV9vZXNU
ZXh0dXJlRmxvYXQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOgotICAgICAgICBpZiAobV9vZXNUZXh0dXJlSGFs
ZkZsb2F0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4
dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UXzI0Xzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6
Ci0gICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlw
ZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVmVyaWZ5IHRoYXQg
dGhlIGNvbWJpbmF0aW9uIG9mIGZvcm1hdCBhbmQgdHlwZSBpcyBzdXBwb3J0ZWQuCi0gICAgc3dp
dGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhB
TEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBm
b3IgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpTUkdCX0VYVDoKLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81Ci0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
eXBlIGZvciBSR0IgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQ6Ci0gICAgICAgIGlmICh0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80Ci0gICAgICAgICAgICAm
JiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xCi0gICAg
ICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAotICAgICAgICAgICAg
JiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0JBIGZvcm1hdCIpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgaWYgKCFtX3dlYmds
RGVwdGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQ
VEhfQ09NUE9ORU5UIG5vdCBlbmFibGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9JTlQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBU
SF9DT01QT05FTlQgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGxldmVsID4gMCkgewotICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2
ZWwgbXVzdCBiZSAwIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7Ci0gICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Ci0gICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVy
ZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERFUFRIX1NURU5DSUwg
bm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0XzgpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBUSF9TVEVOQ0lM
IGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxldmVsIG11c3QgYmUg
MCBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNMZXZlbChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBpZiAobGV2ZWwg
PCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGlmIChsZXZlbCA+PSBtX21heFRleHR1cmVMZXZl
bCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAg
ICAgICBpZiAobGV2ZWwgPj0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsKSB7Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIFRoaXMgZnVuY3Rp
b24gb25seSBjaGVja3MgaWYgbGV2ZWwgaXMgbGVnYWwsIHNvIHdlIHJldHVybiB0cnVlIGFuZCBk
b24ndAotICAgIC8vIGdlbmVyYXRlIElOVkFMSURfRU5VTSBpZiB0YXJnZXQgaXMgaWxsZWdhbC4K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4RnVuY1ZhbGlk
YXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKQotewotICAg
IC8vIFdlIGFic29sdXRlbHkgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgZm9ybWF0IGFuZCB0eXBlIGNv
bWJpbmF0aW9uLgotICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGVudHJ5IHBvaW50cyB0YWtpbmcgSFRN
TEltYWdlLCBldGMuIHdpbGwgcHJvZHVjZQotICAgIC8vIHRlbXBvcmFyeSBkYXRhIGJhc2VkIG9u
IHRoaXMgY29tYmluYXRpb24sIHNvIGl0IG11c3QgYmUgbGVnYWwuCi0gICAgaWYgKCF2YWxpZGF0
ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0aW9uTmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkg
fHwgIXZhbGlkYXRlVGV4RnVuY0xldmVsKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR0MzRGludCBtYXhUZXh0dXJlU2l6ZUZvckxldmVsID0g
cG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwgLSAxIC0gbGV2ZWwpOwotICAgIHN3aXRjaCAodGFy
Z2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAg
aWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCB8fCBoZWlnaHQgPiBtYXhUZXh0dXJl
U2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91
dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgotICAgICAgICBpZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1YkltYWdl
MkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0g
aGVpZ2h0IGZvciBjdWJlIG1hcCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgaGVpZ2h0IGhlcmUuIEZvciB0ZXhJbWFn
ZSB3aWR0aCA9PSBoZWlnaHQuCi0gICAgICAgIC8vIEZvciB0ZXhTdWJJbWFnZSB0aGF0IHdpbGwg
YmUgY2hlY2tlZCB3aGVuIGNoZWNraW5nIHlvZmZzZXQgKyBoZWlnaHQgaXMgaW4gcmFuZ2UuCi0g
ICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IGludGVybmFsZm9ybWF0KSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0ICE9IGludGVybmFsZm9ybWF0Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoYm9yZGVyKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJib3JkZXIgIT0gMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyog
cGl4ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TnVsbERpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uKQotewotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAg
ICAgIGlmIChkaXNwb3NpdGlvbiA9PSBOdWxsQWxsb3dlZCkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVuY3Rp
b25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5
cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBl
IFVOU0lHTkVEX0JZVEUgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgaWYgKHBpeGVscy0+
Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQxNikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJ0eXBlIFVOU0lHTkVEX1NIT1JUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQxNkFycmF5
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0
Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVGbG9hdDMyKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgRkxPQVQgYnV0IEFycmF5QnVmZmVyVmlldyBu
b3QgRmxvYXQzMkFycmF5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVM6IC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKLSAgICAgICAgLy8gQXMgcGVyIHRoZSBzcGVj
aWZpY2F0aW9uLCBBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJlIG51bGwgd2hlbgotICAgICAgICAv
LyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGlzIGVuYWJsZWQuCi0gICAgICAgIGlmIChwaXhlbHMp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBIQUxGX0ZMT0FUX09FUyBidXQgQXJy
YXlCdWZmZXJWaWV3IGlzIG5vdCBOVUxMIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJl
ZDsKLSAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0
ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwgJnRvdGFs
Qnl0ZXNSZXF1aXJlZCwgMCk7Ci0gICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpO
T19FUlJPUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCB0ZXh0dXJlIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQp
IHsKLSAgICAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpIHsKLSAgICAgICAgICBlcnJv
ciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0
aCwgaGVpZ2h0LCAxLCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKLSAgICAgICAgICBpZiAocGl4
ZWxzLT5ieXRlTGVuZ3RoKCkgPT0gdG90YWxCeXRlc1JlcXVpcmVkKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCB3
aXRoIFVOUEFDS19BTElHTk1FTlQgPiAxIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJW
aWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQotewotICAgIHJl
dHVybiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpOwotfQotCi1i
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKQotewotICAg
IGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBieXRlc1JlcXVpcmVkID0gMDsKLQot
ICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19S
R0JfQU1EOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7
Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICAgICAgY29u
c3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzQWNyb3Nz
ID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOwotICAgICAgICAgICAg
aW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tI
ZWlnaHQ7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICogbnVt
QmxvY2tzRG93biAqIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQ6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVEX0FM
UEhBX0FNRDoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSAx
NjsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7Ci0gICAgICAgICAgICBj
b25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgICAgIGludCBudW1CbG9ja3NBY3Jv
c3MgPSAod2lkdGggKyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lkdGg7Ci0gICAgICAgICAg
ICBpbnQgbnVtQmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAvIGtCbG9j
a0hlaWdodDsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jvc3MgKiBu
dW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKLSAgICAgICAg
ICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDg7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Js
b2NrSGVpZ2h0ID0gODsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lk
dGgsIGtCbG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDQgKyA3
KSAvIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAgICBjb25zdCBp
bnQga0Jsb2NrV2lkdGggPSAxNjsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQg
PSA4OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwga0Jsb2Nr
V2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICogMiArIDcpIC8ga0Jsb2Nr
U2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIGZvcm1hdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpICE9IGJ5dGVzUmVxdWlyZWQpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgImxlbmd0aCBvZiBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGNvcnJlY3QgZm9y
IGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVz
c2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
ZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogewotICAgICAgICBjb25zdCBHQzNEc2l6ZWkg
a0Jsb2NrV2lkdGggPSA0OwotICAgICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrSGVpZ2h0ID0g
NDsKLSAgICAgICAgY29uc3QgR0MzRGludCBtYXhUZXh0dXJlU2l6ZSA9IHRhcmdldCA/IG1fbWF4
VGV4dHVyZVNpemUgOiBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKLSAgICAgICAgY29uc3QgR0Mz
RHNpemVpIG1heENvbXByZXNzZWREaW1lbnNpb24gPSBtYXhUZXh0dXJlU2l6ZSA+PiBsZXZlbDsK
LSAgICAgICAgYm9vbCB3aWR0aFZhbGlkID0gKGxldmVsICYmIHdpZHRoID09IDEpIHx8IChsZXZl
bCAmJiB3aWR0aCA9PSAyKSB8fCAoISh3aWR0aCAlIGtCbG9ja1dpZHRoKSAmJiB3aWR0aCA8PSBt
YXhDb21wcmVzc2VkRGltZW5zaW9uKTsKLSAgICAgICAgYm9vbCBoZWlnaHRWYWxpZCA9IChsZXZl
bCAmJiBoZWlnaHQgPT0gMSkgfHwgKGxldmVsICYmIGhlaWdodCA9PSAyKSB8fCAoIShoZWlnaHQg
JSBrQmxvY2tIZWlnaHQpICYmIGhlaWdodCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKLSAg
ICAgICAgaWYgKCF3aWR0aFZhbGlkIHx8ICFoZWlnaHRWYWxpZCkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1H
OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lN
RzoKLSAgICAgICAgLy8gSGVpZ2h0IGFuZCB3aWR0aCBtdXN0IGJlIHBvd2VycyBvZiAyLgotICAg
ICAgICBpZiAoKHdpZHRoICYgKHdpZHRoIC0gMSkpIHx8IChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkp
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZv
ciBsZXZlbCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhT
dWJEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRl
eHR1cmUqIHRleCkKLXsKLSAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDApIHsKLSAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgPCAwIik7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogewotICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lk
dGggPSA0OwotICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgaWYg
KCh4b2Zmc2V0ICUga0Jsb2NrV2lkdGgpIHx8ICh5b2Zmc2V0ICUga0Jsb2NrSGVpZ2h0KSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgbm90IG11bHRpcGxl
IG9mIDQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAod2lkdGggLSB4b2Zmc2V0ID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKQotICAgICAg
ICAgICAgfHwgaGVpZ2h0IC0geW9mZnNldCA+IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwp
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZh
bGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVs
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOwotICAgIH0KLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOiB7Ci0gICAgICAgIGlmICh4b2Zmc2V0
IHx8IHlvZmZzZXQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBhbmQgeW9m
ZnNldCBtdXN0IGJlIHplcm8iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAod2lkdGggIT0gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKQotICAg
ICAgICAgICAgfHwgaGVpZ2h0ICE9IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgbXVzdCBtYXRjaCBleGlzdGluZyBs
ZXZlbCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0
LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBt
b2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlBPSU5UUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX1NUUklQOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU46Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGRyYXcgbW9kZSIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIGlmICht
X3N0ZW5jaWxNYXNrICE9IG1fc3RlbmNpbE1hc2tCYWNrIHx8IG1fc3RlbmNpbEZ1bmNSZWYgIT0g
bV9zdGVuY2lsRnVuY1JlZkJhY2sgfHwgbV9zdGVuY2lsRnVuY01hc2sgIT0gbV9zdGVuY2lsRnVu
Y01hc2tCYWNrKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3RlbmNp
bHMgc2V0dGluZ3MgZG8gbm90IG1hdGNoIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVN0ZW5jaWxGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZnVuYykK
LXsKLSAgICBzd2l0Y2ggKGZ1bmMpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpORVZF
UjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMRVNTOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkxFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHUkVBVEVSOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOT1RFUVVBTDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFdBWVM6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZnVuY3Rpb24iKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYg
KCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
LS1tX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKLSAgICBwcmludFdhcm5pbmdUb0NvbnNv
bGUobWVzc2FnZSk7Ci0KLSAgICBpZiAoIW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKQot
ICAgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoIldlYkdMOiB0b28gbWFueSBlcnJvcnMsIG5v
IG1vcmUgZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWQgdG8gdGhlIGNvbnNvbGUgZm9yIHRoaXMgY29u
dGV4dC4iKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50V2FybmluZ1Rv
Q29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFjYW52YXMoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhbnZhcygpLT5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OlJlbmRlcmluZywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBtZXNzYWdl
KTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRnJhbWVidWZmZXJG
dW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gYXR0YWNobWVudCkKLXsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycwotICAgICAgICAgICAgJiYgYXR0YWNobWVu
dCA+IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMAotICAgICAgICAgICAgJiYg
YXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVudCIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGVU5DX0FERDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
VU5DX1NVQlRSQUNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfUkVWRVJTRV9T
VUJUUkFDVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUlOX0VYVDoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6TUFYX0VYVDoKLSAgICAgICAgaWYgKChtb2RlID09IEV4dGVuc2lvbnMzRDo6TUlO
X0VYVCB8fCBtb2RlID09IEV4dGVuc2lvbnMzRDo6TUFYX0VYVCkgJiYgIW1fZXh0QmxlbmRNaW5N
YXgpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgbW9kZSIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KQotewotICAgIGlmICgoKHNyYyA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfQ09OU1RBTlRfQ09MT1IpCi0gICAgICAgICAmJiAoZHN0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBkc3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5V
U19DT05TVEFOVF9BTFBIQSkpCi0gICAgICAgIHx8ICgoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpDT05TVEFOVF9DT0xPUiB8fCBkc3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19D
T05TVEFOVF9DT0xPUikKLSAgICAgICAgICAgICYmIChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NP
TlNUQU5UX0FMUEhBKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUgc3Jj
IGFuZCBkc3QiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0eShj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNhcCkKLXsKLSAgICBzd2l0Y2ggKGNh
cCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNVTExfRkFDRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9URVNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTQU1QTEVfQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCBjYXBhYmlsaXR5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBG
bG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgaWYgKCF2
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0
aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJl
ZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWlu
U2l6ZSkKLXsKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCB2b2lkKiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAgICByZXR1cm4gdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwg
diwgc2l6ZSwgcmVxdWlyZWRNaW5TaXplKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRy
YW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewot
ICAgIGlmICghdikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVu
Z3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIHZvaWQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXpl
KQotewotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
bG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAibG9jYXRpb24gaXMgbm90IGZyb20gY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBhcnJheSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh0cmFuc3Bv
c2UpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRyYW5zcG9zZSBub3QgRkFMU0UiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoc2l6ZSA8IHJlcXVpcmVkTWluU2l6ZSB8fCAo
c2l6ZSAlIHJlcXVpcmVkTWluU2l6ZSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6
ZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1XZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJ1ZmZlckRhdGFQ
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSB1c2FnZSkKLXsKLSAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gMDsKLSAgICBzd2l0Y2gg
KHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVG
RkVSOgotICAgICAgICBidWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVI6Ci0gICAgICAgIGJ1ZmZlciA9IG1fYm91bmRBcnJheUJ1
ZmZlci5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAg
IGlmICghYnVmZmVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gYnVmZmVyIik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBzd2l0Y2ggKHVzYWdlKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RBVElDX0RSQVc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19E
UkFXOgotICAgICAgICByZXR1cm4gYnVmZmVyOwotICAgIH0KLSAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHVzYWdlIik7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYg
KCFpbWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5v
IGltYWdlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY29uc3QgVVJMJiB1
cmwgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+cmVzcG9uc2UoKS51cmwoKTsKLSAgICBpZiAodXJs
LmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgaW1hZ2UiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBpZiAod291bGRUYWludE9yaWdpbihpbWFnZSkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklU
WV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+YnVmZmVyKCkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGNhbnZhcyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGNhbnZhcykpIHsKLSAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRN
TFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghdmlk
ZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZpZGVvLT52aWRlb0hlaWdodCgpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJubyB2aWRlbyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVvKSkgewotICAgICAgICBlYyA9IFNFQ1VS
SVRZX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLSNlbmRpZgotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZklt
cGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4
cGVjdGVkU2l6ZSwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0Mz
RGZsb2F0IHYzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAg
IGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBl
Y3RlZFNpemUpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWIxZihpbmRleCwgdjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
MjoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0
ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRy
aWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0cmliVmFsdWUudmFsdWVbMF0gPSB2MDsKLSAgICBhdHRy
aWJWYWx1ZS52YWx1ZVsxXSA9IHYxOwotICAgIGF0dHJpYlZhbHVlLnZhbHVlWzJdID0gdjI7Ci0g
ICAgYXR0cmliVmFsdWUudmFsdWVbM10gPSB2MzsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1
aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSBleHBlY3RlZFNpemUpCi17Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghdikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoZnVuY3Rpb25OYW1lLCBpbmRleCwgdi0+ZGF0
YSgpLCB2LT5sZW5ndGgoKSwgZXhwZWN0ZWRTaXplKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgZXhw
ZWN0ZWRTaXplKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHNpemUgPCBleHBlY3RlZFNpemUpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
ImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIElu
IEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMuCi0gICAgaWYgKGluZGV4
IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkg
ewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFm
dihpbmRleCwgdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAg
ICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHYpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0
cmliM2Z2KGluZGV4LCB2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0g
ICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmRleCwgdik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0
cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XTsKLSAgICBhdHRyaWJWYWx1ZS5p
bml0VmFsdWUoKTsKLSAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgZXhwZWN0ZWRTaXplOyArK2lp
KQotICAgICAgICBhdHRyaWJWYWx1ZS52YWx1ZVtpaV0gPSB2W2lpXTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIwKCkKLXsKLSAgICBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIAotICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlcigpOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXIt
Pm9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVyk7Ci0gICAg
bV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVCwgZmFsc2UsIDAsIDApOwotICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRleEF0
dHJpYjBCdWZmZXI7Ci0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIsIDApOwotICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoMCk7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyVmFsdWVbMF0gPSAwLjBmOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzFdID0gMC4wZjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IDAuMGY7
Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSAxLjBmOwotICAgIG1fZm9yY2VB
dHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9y
ZSA9IGZhbHNlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1WZXJ0ZXgpCi17Ci0gICAgY29uc3QgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKLSAgICBjb25zdCBWZXJ0ZXhBdHRy
aWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVlWzBdOwotICAgIGlmICgh
bV9jdXJyZW50UHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGJvb2wgdXNpbmdW
ZXJ0ZXhBdHRyaWIwID0gbV9jdXJyZW50UHJvZ3JhbS0+aXNVc2luZ1ZlcnRleEF0dHJpYjAoKTsK
LSAgICBpZiAodXNpbmdWZXJ0ZXhBdHRyaWIwKQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBVc2Vk
QmVmb3JlID0gdHJ1ZTsKLSAgICBpZiAoc3RhdGUuZW5hYmxlZCAmJiB1c2luZ1ZlcnRleEF0dHJp
YjApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXVzaW5nVmVydGV4QXR0cmliMCAm
JiAhbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSB0cnVlOwotICAgIG1fY29udGV4dC0+YmluZEJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXItPm9iamVjdCgpKTsKLSAgICBHQzNEc2l6ZWlwdHIgYnVmZmVyRGF0YVNpemUgPSAobnVtVmVy
dGV4ICsgMSkgKiA0ICogc2l6ZW9mKEdDM0RmbG9hdCk7Ci0gICAgaWYgKGJ1ZmZlckRhdGFTaXpl
ID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSkgewotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZl
ckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgYnVmZmVyRGF0YVNpemUsIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOwotICAgICAgICBtX3ZlcnRleEF0dHJp
YjBCdWZmZXJTaXplID0gYnVmZmVyRGF0YVNpemU7Ci0gICAgICAgIG1fZm9yY2VBdHRyaWIwQnVm
ZmVyUmVmaWxsID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMAotICAg
ICAgICAmJiAobV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwKLSAgICAgICAgICAgIHx8IGF0dHJp
YlZhbHVlLnZhbHVlWzBdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdCi0gICAgICAg
ICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVsxXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVsxXQotICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMl0gIT0gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyVmFsdWVbMl0KLSAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzNdICE9
IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdKSkgewotICAgICAgICBhdXRvIGJ1ZmZlckRh
dGEgPSBzdGQ6Om1ha2VfdW5pcXVlPEdDM0RmbG9hdFtdPigobnVtVmVydGV4ICsgMSkgKiA0KTsK
LSAgICAgICAgZm9yIChHQzNEc2l6ZWkgaWkgPSAwOyBpaSA8IG51bVZlcnRleCArIDE7ICsraWkp
IHsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBd
OwotICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAxXSA9IGF0dHJpYlZhbHVlLnZhbHVl
WzFdOwotICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAyXSA9IGF0dHJpYlZhbHVlLnZh
bHVlWzJdOwotICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAzXSA9IGF0dHJpYlZhbHVl
LnZhbHVlWzNdOwotICAgICAgICB9Ci0gICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVl
WzBdID0gYXR0cmliVmFsdWUudmFsdWVbMF07Ci0gICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZl
clZhbHVlWzFdID0gYXR0cmliVmFsdWUudmFsdWVbMV07Ci0gICAgICAgIG1fdmVydGV4QXR0cmli
MEJ1ZmZlclZhbHVlWzJdID0gYXR0cmliVmFsdWUudmFsdWVbMl07Ci0gICAgICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gYXR0cmliVmFsdWUudmFsdWVbM107Ci0gICAgICAgIG1f
Zm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7Ci0gICAgICAgIG1fY29udGV4dC0+YnVm
ZmVyU3ViRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBidWZmZXJEYXRh
U2l6ZSwgYnVmZmVyRGF0YS5nZXQoKSk7Ci0gICAgfQotICAgIG1fY29udGV4dC0+dmVydGV4QXR0
cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIDAsIDAsIDApOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZVN0
YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQotewotICAgIGNvbnN0IFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0
ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7Ci0gICAgaWYgKHN0YXRlLmJ1
ZmZlckJpbmRpbmcgIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclpl
cm8oc3RhdGUuYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgICAgICBtX2NvbnRleHQtPnZlcnRl
eEF0dHJpYlBvaW50ZXIoMCwgc3RhdGUuc2l6ZSwgc3RhdGUudHlwZSwgc3RhdGUubm9ybWFsaXpl
ZCwgc3RhdGUub3JpZ2luYWxTdHJpZGUsIHN0YXRlLm9mZnNldCk7Ci0gICAgfQotICAgIG1fY29u
dGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RP
clplcm8obV9ib3VuZEFycmF5QnVmZmVyLmdldCgpKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQotewotICAgIFJlZlB0cjxXZWJH
TENvbnRleHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0cnVlLCAiIik7Ci0gICAgY2FudmFz
KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwotICAgIG1fcmVzdG9yZUFsbG93ZWQgPSBldmVudC0+
ZGVmYXVsdFByZXZlbnRlZCgpOwotICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9z
dENvbnRleHQgJiYgbV9yZXN0b3JlQWxsb3dlZCkKLSAgICAgICAgbV9yZXN0b3JlVGltZXIuc3Rh
cnRPbmVTaG90KDApOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0
b3JlQ29udGV4dCgpCi17Ci0gICAgQVNTRVJUKG1fY29udGV4dExvc3QpOwotICAgIGlmICghbV9j
b250ZXh0TG9zdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIHJlbmRlcmluZyBjb250
ZXh0IGlzIG5vdCByZXN0b3JlZCB1bmxlc3MgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlCi0g
ICAgLy8gd2ViZ2xjb250ZXh0bG9zdCBldmVudCB3YXMgcHJldmVudGVkIGVhcmxpZXIuCi0gICAg
Ly8KLSAgICAvLyBCZWNhdXNlIG9mIHRoZSB3YXkgbV9yZXN0b3JlVGltZXIgaXMgc2V0IHVwIGZv
ciByZWFsIHZzLiBzeW50aGV0aWMgbG9zdAotICAgIC8vIGNvbnRleHQgZXZlbnRzLCB3ZSBkb24n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdGVzdCBzaG9ydC1jaXJjdWl0aW5nCi0gICAgLy8g
dGhlIHJldHJ5IGxvb3AgZm9yIHJlYWwgY29udGV4dCBsb3N0IGV2ZW50cy4KLSAgICBpZiAoIW1f
cmVzdG9yZUFsbG93ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBjb250ZXh0TG9zdFJl
YXNvbiA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVz
QVJCKCk7Ci0KLSAgICBzd2l0Y2ggKGNvbnRleHRMb3N0UmVhc29uKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9fRVJST1I6Ci0gICAgICAgIC8vIFRoZSBHcmFwaGljc0NvbnRleHQz
RCBpbXBsZW1lbnRhdGlvbiBtaWdodCBub3QgZnVsbHkKLSAgICAgICAgLy8gc3VwcG9ydCBHTF9B
UkJfcm9idXN0bmVzcyBzZW1hbnRpY3MgeWV0LiBBbHRlcm5hdGl2ZWx5LCB0aGUKLSAgICAgICAg
Ly8gV0VCR0xfbG9zZV9jb250ZXh0IGV4dGVuc2lvbiBtaWdodCBoYXZlIGJlZW4gdXNlZCB0byBm
b3JjZQotICAgICAgICAvLyBhIGxvc3QgY29udGV4dC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkdVSUxUWV9DT05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gVGhl
IHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCBpZiB0aGlzIGNvbnRleHQgd2FzCi0g
ICAgICAgIC8vIGd1aWx0eSBvZiBjYXVzaW5nIHRoZSBncmFwaGljcyByZXNldC4KLSAgICAgICAg
cHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50IG9uIHRoZSBwYWdl
IGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0byByZXNldDsgbm90IHJlc3RvcmluZyB0aGUgY29u
dGV4dCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OklOTk9DRU5U
X0NPTlRFWFRfUkVTRVRfQVJCOgotICAgICAgICAvLyBBbHdheXMgYWxsb3cgdGhlIGNvbnRleHQg
dG8gYmUgcmVzdG9yZWQuCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpV
TktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCOgotICAgICAgICAvLyBXYXJuLiBJZGVhbGx5LCBwcm9t
cHQgdGhlIHVzZXIgdGVsbGluZyB0aGVtIHRoYXQgV2ViR0wKLSAgICAgICAgLy8gY29udGVudCBv
biB0aGUgcGFnZSBtaWdodCBoYXZlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0bwotICAgICAg
ICAvLyByZXNldCBhbmQgYXNrIHRoZW0gd2hldGhlciB0aGV5IHdhbnQgdG8gY29udGludWUgcnVu
bmluZwotICAgICAgICAvLyB0aGUgY29udGVudC4gT25seSBpZiB0aGV5IHNheSAieWVzIiBzaG91
bGQgd2Ugc3RhcnQKLSAgICAgICAgLy8gYXR0ZW1wdGluZyB0byByZXN0b3JlIHRoZSBjb250ZXh0
LgotICAgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoIldBUk5JTkc6IFdlYkdMIGNvbnRlbnQg
b24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQi
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgRnJhbWUqIGZyYW1lID0gY2FudmFzKCkt
PmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0
aW5ncygpLndlYkdMRW5hYmxlZCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWVWaWV3
KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsK
LSAgICBTY3JvbGxWaWV3KiByb290ID0gdmlldy0+cm9vdCgpOwotICAgIGlmICghcm9vdCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSByb290LT5ob3N0V2lu
ZG93KCk7Ci0gICAgaWYgKCFob3N0V2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSht
X2F0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAg
aWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29udGV4dCkKLSAgICAgICAgICAgIG1f
cmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdChzZWNvbmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0cyk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIC8vIFRoaXMgbGlrZWx5IHNob3VsZG4ndCBoYXBw
ZW4gYnV0IGlzIHRoZSBiZXN0IHdheSB0byByZXBvcnQgaXQgdG8gdGhlIFdlYkdMIGFwcC4KLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgIiIsICJlcnJvciByZXN0b3JpbmcgY29udGV4dCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gQ29uc3RydWN0IGEgbmV3IGRyYXdpbmcgYnVmZmVyIHdpdGggdGhl
IG5ldyBHcmFwaGljc0NvbnRleHQzRC4KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+ZGlzY2FyZFJlc291cmNlcygpOwotICAgICAgICBEcmF3aW5n
QnVmZmVyOjpQcmVzZXJ2ZURyYXdpbmdCdWZmZXIgcHJlc2VydmUgPSBtX2F0dHJpYnV0ZXMucHJl
c2VydmVEcmF3aW5nQnVmZmVyID8gRHJhd2luZ0J1ZmZlcjo6UHJlc2VydmUgOiBEcmF3aW5nQnVm
ZmVyOjpEaXNjYXJkOwotICAgICAgICBEcmF3aW5nQnVmZmVyOjpBbHBoYVJlcXVpcmVtZW50IGFs
cGhhID0gbV9hdHRyaWJ1dGVzLmFscGhhID8gRHJhd2luZ0J1ZmZlcjo6QWxwaGEgOiBEcmF3aW5n
QnVmZmVyOjpPcGFxdWU7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6
OmNyZWF0ZShjb250ZXh0LmdldCgpLCBtX2RyYXdpbmdCdWZmZXItPnNpemUoKSwgcHJlc2VydmUs
IGFscGhhKTsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotCi0gICAg
bV9jb250ZXh0ID0gY29udGV4dDsKLSAgICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7Ci0gICAgc2V0
dXBGbGFncygpOwotICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Ci0gICAgY2FudmFzKCktPmRp
c3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xj
b250ZXh0cmVzdG9yZWRFdmVudCwgZmFsc2UsIHRydWUsICIiKSk7Ci19Ci0KLVN0cmluZyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmVuc3VyZU5vdE51bGwoY29uc3QgU3RyaW5nJiB0ZXh0KSBjb25z
dAotewotICAgIGlmICh0ZXh0LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gV1RGOjplbXB0eVN0
cmluZygpOwotICAgIHJldHVybiB0ZXh0OwotfQotCi1XZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxS
VUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5KQotICAg
IDogbV9idWZmZXJzKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PltdPihjYXBhY2l0eSkpCi0gICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5KQotewotfQotCi1JbWFn
ZUJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFn
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGludCBpOwotICAgIGZvciAoaSA9
IDA7IGkgPCBtX2NhcGFjaXR5OyArK2kpIHsKLSAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1f
YnVmZmVyc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKCFidWYpCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgaWYgKGJ1Zi0+bG9naWNhbFNpemUoKSAhPSBzaXplKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGJ1YmJsZVRvRnJvbnQoaSk7Ci0gICAgICAgIHJldHVybiBidWY7Ci0g
ICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplLCAxKTsKLSAgICBpZiAoIXRlbXApCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIGkgPSBzdGQ6Om1pbihtX2NhcGFjaXR5IC0gMSwgaSk7Ci0gICAgbV9idWZmZXJz
W2ldID0gV1RGOjptb3ZlKHRlbXApOwotCi0gICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVmZmVy
c1tpXS5nZXQoKTsKLSAgICBidWJibGVUb0Zyb250KGkpOwotICAgIHJldHVybiBidWY7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpidWJibGVU
b0Zyb250KGludCBpZHgpCi17Ci0gICAgZm9yIChpbnQgaSA9IGlkeDsgaSA+IDA7IC0taSkKLSAg
ICAgICAgbV9idWZmZXJzW2ldLnN3YXAobV9idWZmZXJzW2ktMV0pOwotfQotCi1uYW1lc3BhY2Ug
ewotCi0gICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdDM0RlbnVtIGVycm9yKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChlcnJvcikgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU06Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfRU5VTSI7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU6Ci0gICAgICAgICAgICByZXR1
cm4gIklOVkFMSURfVkFMVUUiOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTjoKLSAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9PUEVSQVRJT04iOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZOgotICAgICAgICAg
ICAgcmV0dXJuICJPVVRfT0ZfTUVNT1JZIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046Ci0gICAgICAgICAgICByZXR1cm4gIklO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMOgotICAgICAgICAgICAgcmV0dXJuICJDT05URVhUX0xP
U1RfV0VCR0wiOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6
Zm9ybWF0KCJXZWJHTCBFUlJPUiglMDR4KSIsIGVycm9yKTsKLSAgICAgICAgfQotICAgIH0KLQot
fSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
eW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvciwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlIGRpc3Bs
YXkpCi17Ci0gICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUgJiYgZGlzcGxheSA9
PSBEaXNwbGF5SW5Db25zb2xlKSB7Ci0gICAgICBTdHJpbmcgc3RyID0gU3RyaW5nKCJXZWJHTDog
IikgKyBHZXRFcnJvclN0cmluZyhlcnJvcikgKyAgIjogIiArIFN0cmluZyhmdW5jdGlvbk5hbWUp
ICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7Ci0gICAgICBwcmludEdMRXJyb3JUb0NvbnNv
bGUoc3RyKTsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7
Ci19Ci0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50R0xXYXJuaW5nVG9Db25z
b2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCi17
Ci0gICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUpIHsKLSAgICAgICAgU3RyaW5n
IHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsgU3RyaW5nKGZ1bmN0aW9uTmFtZSkgKyAiOiAiICsg
U3RyaW5nKGRlc2NyaXB0aW9uKTsKLSAgICAgICAgcHJpbnRHTEVycm9yVG9Db25zb2xlKHN0cik7
Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXBwbHlTdGVuY2lsVGVz
dCgpCi17Ci0gICAgYm9vbCBoYXZlU3RlbmNpbEJ1ZmZlciA9IGZhbHNlOwotCi0gICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBoYXZlU3RlbmNpbEJ1ZmZlciA9IG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5oYXNTdGVuY2lsQnVmZmVyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJl
ZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJp
YnV0ZXMoKTsKLSAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBhdHRyaWJ1dGVzLT5zdGVuY2ls
KCk7Ci0gICAgfQotICAgIGVuYWJsZU9yRGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9URVNULAotICAgICAgICAgICAgICAgICAgICBtX3N0ZW5jaWxFbmFibGVkICYmIGhhdmVTdGVu
Y2lsQnVmZmVyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZU9yRGlz
YWJsZShHQzNEZW51bSBjYXBhYmlsaXR5LCBib29sIGVuYWJsZSkKLXsKLSAgICBpZiAoZW5hYmxl
KQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXBhYmlsaXR5KTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXBhYmlsaXR5KTsKLX0KLQotSW50U2l6ZSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRDYW52YXNTaXplKCkKLXsKLSAgICByZXR1cm4gSW50U2l6
ZShjbGFtcChjYW52YXMoKS0+d2lkdGgoKSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pLAotICAg
ICAgICAgICAgICAgICAgIGNsYW1wKGNhbnZhcygpLT5oZWlnaHQoKSwgMSwgbV9tYXhWaWV3cG9y
dERpbXNbMV0pKTsKLX0KLQotR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1heERy
YXdCdWZmZXJzKCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKCFtX21heERyYXdCdWZmZXJzKQotICAgICAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21heERy
YXdCdWZmZXJzKTsKLSAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykKLSAgICAgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19F
WFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOwotICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVycyBy
ZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMgPj0gTUFYX0RSQVdfQlVGRkVSUy4KLSAgICBy
ZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVmZmVycywgbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsK
LX0KLQotR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1heENvbG9yQXR0YWNobWVu
dHMoKQotewotICAgIGlmICghc3VwcG9ydHNEcmF3QnVmZmVycygpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykKLSAgICAgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21h
eENvbG9yQXR0YWNobWVudHMpOwotICAgIHJldHVybiBtX21heENvbG9yQXR0YWNobWVudHM7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51
bSBidWYpCi17Ci0gICAgbV9iYWNrRHJhd0J1ZmZlciA9IGJ1ZjsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKQotewotICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7Ci0gICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCksIGVjKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKCkKLXsKLSAgICBFeGNl
cHRpb25Db2RlIGVjOwotICAgIGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5n
LmdldCgpLCBlYyk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdXBwb3J0c0Ry
YXdCdWZmZXJzKCkKLXsKLSAgICBpZiAoIW1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0No
ZWNrZWQpIHsKLSAgICAgICAgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCA9
IHRydWU7Ci0gICAgICAgIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQgPSBXZWJHTERyYXdCdWZmZXJz
OjpzdXBwb3J0ZWQodGhpcyk7Ci0gICAgfQotICAgIHJldHVybiBtX2RyYXdCdWZmZXJzU3VwcG9y
dGVkOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5c0luc3RhbmNl
ZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXpl
aSBwcmltY291bnQpCi17Ci0gICAgaWYgKCFwcmltY291bnQpIHsKLSAgICAgICAgbWFya0NvbnRl
eHRDaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRl
RHJhd0FycmF5cygiZHJhd0FycmF5c0luc3RhbmNlZCIsIG1vZGUsIGZpcnN0LCBjb3VudCwgcHJp
bWNvdW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLQot
ICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVT
MkNvbXBsaWFudCgpKQotICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVW
ZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3Ry
aWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0FycmF5c0luc3Rh
bmNlZCIsIHRydWUpOwotCi0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUs
IGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKLQotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
ICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZl
cnRleEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQot
ICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBm
YWxzZSk7Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNv
dW50KQotewotICAgIGlmICghcHJpbWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0Q2hhbmdl
ZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMg
PSAwOwotICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50c0luc3RhbmNl
ZCIsIG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzLCBwcmltY291bnQpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotCi0gICAgYm9vbCB2
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkpIHsKLSAgICAgICAgaWYgKCFudW1FbGVtZW50cykKLSAgICAgICAgICAgIHZhbGlkYXRlSW5k
ZXhBcnJheVByZWNpc2UoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNl
dCksIG51bUVsZW1lbnRzKTsKLSAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVs
YXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7Ci0gICAgfQotICAgIGlmICghaXNHTEVTMk5Q
T1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVu
dHNJbnN0YW5jZWQiLCB0cnVlKTsKLQotICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzSW5zdGFu
Y2VkKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBw
cmltY291bnQpOwotCi0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmli
MFNpbXVsYXRlZCkKLSAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVs
YXRpb24oKTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4
dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgZmFsc2UpOwotICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliRGl2aXNv
ciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwg
ZGl2aXNvcik7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZp
c29yKTsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDc5MSAr
MjYsMTcgQEAKICNpZm5kZWYgV2ViR0xSZW5kZXJpbmdDb250ZXh0X2gKICNkZWZpbmUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0X2gKIAotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVk
ZSA8bWVtb3J5PgotI2luY2x1ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9JbnQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEFOR0xFSW5zdGFuY2VkQXJyYXlzOwotY2xhc3MgRVhUQmxlbmRNaW5NYXg7
Ci1jbGFzcyBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7Ci1jbGFzcyBFWFRTaGFkZXJUZXh0
dXJlTE9EOwotY2xhc3MgRVhUc1JHQjsKLWNsYXNzIEVYVEZyYWdEZXB0aDsKLWNsYXNzIEhUTUxJ
bWFnZUVsZW1lbnQ7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotY2xhc3MgSW1hZ2VCdWZmZXI7
Ci1jbGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgT0VTU3RhbmRhcmREZXJp
dmF0aXZlczsKLWNsYXNzIE9FU1RleHR1cmVGbG9hdDsKLWNsYXNzIE9FU1RleHR1cmVGbG9hdExp
bmVhcjsKLWNsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXQ7Ci1jbGFzcyBPRVNUZXh0dXJlSGFsZkZs
b2F0TGluZWFyOwotY2xhc3MgT0VTVmVydGV4QXJyYXlPYmplY3Q7Ci1jbGFzcyBPRVNFbGVtZW50
SW5kZXhVaW50OwotY2xhc3MgV2ViR0xBY3RpdmVJbmZvOwotY2xhc3MgV2ViR0xCdWZmZXI7Ci1j
bGFzcyBXZWJHTENvbnRleHRHcm91cDsKLWNsYXNzIFdlYkdMQ29udGV4dE9iamVjdDsKLWNsYXNz
IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM7Ci1jbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEM7Ci1jbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzsKLWNsYXNzIFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXM7Ci1jbGFzcyBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOwotY2xhc3MgV2Vi
R0xEZWJ1Z1NoYWRlcnM7Ci1jbGFzcyBXZWJHTERlcHRoVGV4dHVyZTsKLWNsYXNzIFdlYkdMRHJh
d0J1ZmZlcnM7Ci1jbGFzcyBXZWJHTEV4dGVuc2lvbjsKLWNsYXNzIFdlYkdMRnJhbWVidWZmZXI7
Ci1jbGFzcyBXZWJHTExvc2VDb250ZXh0OwotY2xhc3MgV2ViR0xPYmplY3Q7Ci1jbGFzcyBXZWJH
TFByb2dyYW07Ci1jbGFzcyBXZWJHTFJlbmRlcmJ1ZmZlcjsKLWNsYXNzIFdlYkdMU2hhZGVyOwot
Y2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7Ci1jbGFzcyBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1h
dDsKLWNsYXNzIFdlYkdMVGV4dHVyZTsKLWNsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uOwotY2xh
c3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKLQotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworY2xhc3MgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Ugewog
cHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0
PiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKik7Ci0g
ICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aXMzZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNpZiBQTEFURk9STShXSU4p
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBhY2NlbGVyYXRlZCAzZCBjYW52YXMgb24gV2luZG93
cy4KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9Ci0jZWxzZQotICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICBpbnQgZHJhd2luZ0J1
ZmZlcldpZHRoKCkgY29uc3Q7Ci0gICAgaW50IGRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdDsK
LQotICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2Vi
R0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJpbmRSZW5kZXJidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmxlbmRDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxv
YXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgYmxl
bmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpOwotICAgIHZvaWQgYmxlbmRG
dW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOwotICAgIHZvaWQgYmxlbmRG
dW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNy
Y0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7Ci0KLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVu
dW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0
YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlckRhdGEo
R0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
bG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBB
cnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIEdDM0RlbnVtIGNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsKLSAgICB2b2lkIGNsZWFyKEdD
M0RiaXRmaWVsZCBtYXNrKTsKLSAgICB2b2lkIGNsZWFyQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0Mz
RGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKTsKLSAgICB2b2lk
IGNsZWFyRGVwdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGNsZWFyU3RlbmNpbChHQzNEaW50KTsK
LSAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBH
QzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7Ci0gICAgdm9pZCBjb21waWxlU2hh
ZGVyKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBjb21wcmVzc2Vk
VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBkYXRh
KTsKLSAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKTsKLQotICAgIHZvaWQgY29w
eVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOwotICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCk7Ci0KLSAgICBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVhdGVCdWZmZXIoKTsK
LSAgICBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0g
ICAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsKLSAgICBQYXNzUmVm
UHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICBQYXNzUmVm
UHRyPFdlYkdMU2hhZGVyPiBjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7Ci0KLSAg
ICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOwotCi0gICAgdm9pZCBkZWxldGVCdWZmZXIo
V2ViR0xCdWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZm
ZXIqKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7Ci0gICAgdm9pZCBk
ZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZVNo
YWRlcihXZWJHTFNoYWRlciopOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUq
KTsKLQotICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsKLSAgICB2b2lkIGRlcHRoTWFzayhH
QzNEYm9vbGVhbik7Ci0gICAgdm9pZCBkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwgR0MzRGZs
b2F0IHpGYXIpOwotICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hh
ZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApOwot
ICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZHJhd0VsZW1l
bnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBs
b25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBlbmFibGUoR0MzRGVudW0g
Y2FwKTsKLSAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmaW5pc2goKTsKLSAgICB2b2lkIGZsdXNoKCk7Ci0g
ICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZm
ZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgV2Vi
R0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZnJv
bnRGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0g
dGFyZ2V0KTsKLQotICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVBdHRy
aWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0q
LCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgZ2V0QXR0YWNoZWRT
aGFkZXJzKFdlYkdMUHJvZ3JhbSosIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiYsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSos
IGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEJ1ZmZlclBhcmFtZXRl
cihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
UGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBnZXRDb250ZXh0QXR0cmlidXRlcygp
OwotICAgIEdDM0RlbnVtIGdldEVycm9yKCk7Ci0gICAgV2ViR0xFeHRlbnNpb24qIGdldEV4dGVu
c2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50
LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRQ
YXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldElu
Zm8gZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qLCBHQzNEZW51bSBwbmFtZSwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0q
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgV2ViR0xHZXRJbmZvIGdldFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRlciosIEdDM0RlbnVt
IHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2Vi
R0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTFNoYWRlclBy
ZWNpc2lvbkZvcm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5
cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcg
Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFZlY3Rv
cjxTdHJpbmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0
VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9ybShXZWJHTFByb2dyYW0qLCBjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdl
YkdMVW5pZm9ybUxvY2F0aW9uPiBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29u
c3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRWZXJ0ZXhB
dHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgbG9uZyBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVu
dW0gcG5hbWUpOwotCi0gICAgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9k
ZSk7Ci0gICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZmZXIqKTsKLSAgICBib29sIGlz
Q29udGV4dExvc3QoKSBjb25zdDsKLSAgICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0g
Y2FwKTsKLSAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsK
LSAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7Ci0gICAgR0MzRGJvb2xl
YW4gaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKLSAgICBHQzNEYm9vbGVhbiBp
c1NoYWRlcihXZWJHTFNoYWRlciopOwotICAgIEdDM0Rib29sZWFuIGlzVGV4dHVyZShXZWJHTFRl
eHR1cmUqKTsKLQotICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCk7Ci0gICAgdm9pZCBsaW5r
UHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBwaXhlbFN0
b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9pZCBwb2x5Z29uT2Zm
c2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7Ci0gICAgdm9pZCByZWFkUGl4
ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhl
bHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwot
ICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZv
aWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpOwot
ICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHNoYWRlclNvdXJjZShXZWJHTFNoYWRlciosIGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHN0ZW5jaWxGdW5jKEdDM0Rl
bnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxG
dW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdD
M0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE1hc2soR0MzRHVpbnQpOwotICAgIHZvaWQg
c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKTsKLSAgICB2
b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBh
c3MpOwotICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0g
ZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKLQotICAgIHZvaWQgdGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwK
LSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
Q2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAg
dm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNlbmRpZgot
Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RmbG9hdCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwotCi0gICAgdm9pZCB0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgdGV4U3ViSW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0Mz
RGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jZW5kaWYK
LQotICAgIHZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xaXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5p
Zm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJh
eSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
SW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBz
aXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9h
dCB6LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgdW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5p
Zm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZs
b2F0IHcsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGl2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVp
IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZs
b2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRy
aXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQq
IHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9y
bU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0q
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFt
KiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGlu
ZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5
KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Yo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopOwot
ICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZh
bHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZs
b2F0IHcpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMy
QXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgs
IEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRy
aWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdD
M0Rib29sZWFuIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSBzdHJpZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZv
aWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCk7Ci0KLSAgICAvLyBXRUJLSVRfbG9zZV9jb250ZXh0IHN1cHBvcnQKLSAgICBl
bnVtIExvc3RDb250ZXh0TW9kZSB7Ci0gICAgICAgIC8vIExvc3QgY29udGV4dCBvY2N1cnJlZCBh
dCB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGxldmVsLgotICAgICAgICBSZWFsTG9zdENvbnRleHQsCi0K
LSAgICAgICAgLy8gTG9zdCBjb250ZXh0IHByb3Zva2VkIGJ5IFdFQktJVF9sb3NlX2NvbnRleHQu
Ci0gICAgICAgIFN5bnRoZXRpY0xvc3RDb250ZXh0Ci0gICAgfTsKLSAgICB2b2lkIGZvcmNlTG9z
dENvbnRleHQoTG9zdENvbnRleHRNb2RlKTsKLSAgICB2b2lkIGZvcmNlUmVzdG9yZUNvbnRleHQo
KTsKLSAgICB2b2lkIGxvc2VDb250ZXh0SW1wbChMb3N0Q29udGV4dE1vZGUpOwotCi0gICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0LmdldCgpOyB9Ci0gICAgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRHcm91cCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHJlc2hhcGUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLQotICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgp
OwotICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpIG92ZXJy
aWRlOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0lt
YWdlRGF0YSgpOwotCi0gICAgdm9pZCByZW1vdmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmpl
Y3QqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0Kik7
Ci0gICAgCi0gICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmlicygpIGNvbnN0IHsgcmV0dXJu
IG1fbWF4VmVydGV4QXR0cmliczsgfQotCi0gICAgLy8gQU5HTEVfaW5zdGFuY2VkX2FycmF5cyBl
eHRlbnNpb24gZnVuY3Rpb25zLgotICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51
bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291
bnQpOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0Rz
aXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHBy
aW1jb3VudCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBH
QzNEdWludCBkaXZpc29yKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xEcmF3
QnVmZmVyczsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsKLSAgICBmcmllbmQg
Y2xhc3MgV2ViR0xPYmplY3Q7Ci0gICAgZnJpZW5kIGNsYXNzIE9FU1ZlcnRleEFycmF5T2JqZWN0
OwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLSAgICBmcmllbmQgY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQzsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdl
Q2FsbGJhY2s7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7Ci0K
ICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyk7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52
YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzKTsKLSAgICB2b2lkIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Ci0gICAg
dm9pZCBzZXR1cEZsYWdzKCk7Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QKLSAgICB2aXJ0dWFs
IGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHN0b3AoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9i
amVjdE5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
IjsgfQotCi0gICAgdm9pZCBhZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKLSAg
ICB2b2lkIGFkZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0Kik7Ci0gICAgdm9pZCBk
ZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7Ci0KLSAgICB2b2lkIGRlc3Ryb3lHcmFwaGljc0Nv
bnRleHQzRCgpOwotICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICAvLyBRdWVy
eSB3aGV0aGVyIGl0IGlzIGJ1aWx0IG9uIHRvcCBvZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50
YXRpb24uCi0gICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgeyByZXR1cm4gbV9pc0dMRVMyQ29t
cGxpYW50OyB9Ci0gICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGlzIE5QT1Qg
c3RyaWN0LgotICAgIGJvb2wgaXNHTEVTMk5QT1RTdHJpY3QoKSB7IHJldHVybiBtX2lzR0xFUzJO
UE9UU3RyaWN0OyB9Ci0gICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGdlbmVy
YXRlcyBlcnJvcnMgb24gb3V0LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzZXMuCi0gICAgYm9vbCBp
c0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgeyByZXR1cm4gbV9pc0Vycm9y
R2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzOyB9Ci0gICAgLy8gUXVlcnkgaWYgdGhlIEdM
IGltcGxlbWVudGF0aW9uIGluaXRpYWxpemVzIHRleHR1cmVzL3JlbmRlcmJ1ZmZlcnMgdG8gMC4K
LSAgICBib29sIGlzUmVzb3VyY2VTYWZlKCkgeyByZXR1cm4gbV9pc1Jlc291cmNlU2FmZTsgfQot
ICAgIC8vIFF1ZXJ5IGlmIGRlcHRoX3N0ZW5jaWwgYnVmZmVyIGlzIHN1cHBvcnRlZC4KLSAgICBi
b29sIGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkgeyByZXR1cm4gbV9pc0RlcHRoU3RlbmNpbFN1
cHBvcnRlZDsgfQotCi0gICAgLy8gSGVscGVyIHRvIHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBv
ZiBPcGVuR0wgZGF0YSB0eXBlcwotICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgot
ICAgIHVuc2lnbmVkIGludCBzaXplSW5CeXRlcyhHQzNEZW51bSB0eXBlKTsKLQotICAgIC8vIEJh
c2ljIHZhbGlkYXRpb24gb2YgY291bnQgYW5kIG9mZnNldCBhZ2FpbnN0IG51bWJlciBvZiBlbGVt
ZW50cyBpbiBlbGVtZW50IGFycmF5IGJ1ZmZlcgotICAgIGJvb2wgdmFsaWRhdGVFbGVtZW50QXJy
YXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQp
OwotCi0gICAgLy8gQ29uc2VydmF0aXZlIGJ1dCBxdWljayBpbmRleCB2YWxpZGF0aW9uCi0gICAg
Ym9vbCB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWdu
ZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpOwotCi0gICAgLy8gUHJlY2lzZSBidXQgc2xvdyBpbmRl
eCB2YWxpZGF0aW9uIC0tIG9ubHkgZG9uZSBpZiBjb25zZXJ2YXRpdmUgY2hlY2tzIGZhaWwKLSAg
ICBib29sIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQp
OwotICAgIGJvb2wgdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3Vu
dCwgdW5zaWduZWQgcHJpbWl0aXZlQ291bnQgPSAwKTsKLQotICAgIGJvb2wgdmFsaWRhdGVXZWJH
TE9iamVjdChjb25zdCBjaGFyKiwgV2ViR0xPYmplY3QqKTsKLQotICAgIGJvb2wgdmFsaWRhdGVE
cmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRGlu
dCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKLSAgICBib29s
IHZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
bW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1
bnNpZ25lZCYgbnVtRWxlbWVudHMsIEdDM0RzaXplaSBwcmltY291bnQpOwotCi0gICAgLy8gQWRk
cyBhIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQuCi0gICAgdm9pZCBhZGRDb21wcmVzc2VkVGV4
dHVyZUZvcm1hdChHQzNEZW51bSk7Ci0KLSAgICBQYXNzUmVmUHRyPEltYWdlPiBkcmF3SW1hZ2VJ
bnRvQnVmZmVyKEltYWdlKiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGV2aWNlU2NhbGVG
YWN0b3IpOwotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVv
RnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBCYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRp
b25Db2RlJik7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250
ZXh0OwotICAgIFJlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gbV9jb250ZXh0R3JvdXA7Ci0KLSAg
ICAvLyBPcHRpb25hbCBzdHJ1Y3R1cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIs
IGluc3RlYWQgb2YgZGlyZWN0bHkKLSAgICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250
ZXh0LgotICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7Ci0KLSAgICAv
LyBEaXNwYXRjaGVzIGEgY29udGV4dCBsb3N0IGV2ZW50IG9uY2UgaXQgaXMgZGV0ZXJtaW5lZCB0
aGF0IG9uZSBpcyBuZWVkZWQuCi0gICAgLy8gVGhpcyBpcyB1c2VkIGJvdGggZm9yIHN5bnRoZXRp
YyBhbmQgcmVhbCBjb250ZXh0IGxvc3Nlcy4gRm9yIHJlYWwgb25lcywgaXQncwotICAgIC8vIGxp
a2VseSB0aGF0IHRoZXJlJ3Mgbm8gSmF2YVNjcmlwdCBvbiB0aGUgc3RhY2ssIGJ1dCB0aGF0IG1p
Z2h0IGJlIGRlcGVuZGVudAotICAgIC8vIG9uIGhvdyBleGFjdGx5IHRoZSBwbGF0Zm9ybSBkaXNj
b3ZlcnMgdGhhdCB0aGUgY29udGV4dCB3YXMgbG9zdC4gRm9yIGJldHRlcgotICAgIC8vIHBvcnRh
YmlsaXR5IHdlIGFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGV2ZW50LgotICAgIFRp
bWVyIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXI7Ci0gICAgYm9vbCBtX3Jlc3RvcmVB
bGxvd2VkOwotICAgIFRpbWVyIG1fcmVzdG9yZVRpbWVyOwotCi0gICAgYm9vbCBtX25lZWRzVXBk
YXRlOwotICAgIGJvb2wgbV9tYXJrZWRDYW52YXNEaXJ0eTsKLSAgICBIYXNoU2V0PFdlYkdMQ29u
dGV4dE9iamVjdCo+IG1fY29udGV4dE9iamVjdHM7Ci0KLSAgICAvLyBMaXN0IG9mIGJvdW5kIFZC
TydzLiBVc2VkIHRvIG1haW50YWluIGluZm8gYWJvdXQgc2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBh
bmQgc3RvcmVkIHZhbHVlcyBmb3IgRUxFTUVOVF9BUlJBWV9CVUZGRVIKLSAgICBSZWZQdHI8V2Vi
R0xCdWZmZXI+IG1fYm91bmRBcnJheUJ1ZmZlcjsKLSAgICAKLSAgICBSZWZQdHI8V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUz4gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgUmVmUHRy
PFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdDsKLSAg
ICB2b2lkIHNldEJvdW5kVmVydGV4QXJyYXlPYmplY3QoUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTPiBhcnJheU9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmIChhcnJheU9iamVj
dCkKLSAgICAgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IGFycmF5T2JqZWN0Owot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2Rl
ZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsKLSAgICB9Ci0gICAgCi0gICAgY2xhc3MgVmVydGV4QXR0
cmliVmFsdWUgewotICAgIHB1YmxpYzoKLSAgICAgICAgVmVydGV4QXR0cmliVmFsdWUoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpbml0VmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgdm9pZCBpbml0VmFsdWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWx1ZVswXSA9
IDAuMGY7Ci0gICAgICAgICAgICB2YWx1ZVsxXSA9IDAuMGY7Ci0gICAgICAgICAgICB2YWx1ZVsy
XSA9IDAuMGY7Ci0gICAgICAgICAgICB2YWx1ZVszXSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIEdDM0RmbG9hdCB2YWx1ZVs0XTsKLSAgICB9OwotICAgIFZlY3RvcjxWZXJ0
ZXhBdHRyaWJWYWx1ZT4gbV92ZXJ0ZXhBdHRyaWJWYWx1ZTsKLSAgICB1bnNpZ25lZCBtX21heFZl
cnRleEF0dHJpYnM7Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXI7Ci0gICAgbG9uZyBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplOwotICAgIEdDM0RmbG9hdCBt
X3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVs0XTsKLSAgICBib29sIG1fZm9yY2VBdHRyaWIwQnVm
ZmVyUmVmaWxsOwotICAgIGJvb2wgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZTsKLQotICAgIFJl
ZlB0cjxXZWJHTFByb2dyYW0+IG1fY3VycmVudFByb2dyYW07Ci0gICAgUmVmUHRyPFdlYkdMRnJh
bWVidWZmZXI+IG1fZnJhbWVidWZmZXJCaW5kaW5nOwotICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1
ZmZlcj4gbV9yZW5kZXJidWZmZXJCaW5kaW5nOwotICAgIHN0cnVjdCBUZXh0dXJlVW5pdFN0YXRl
IHsKLSAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4dHVyZTJEQmluZGluZzsKLSAgICAg
ICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4dHVyZUN1YmVNYXBCaW5kaW5nOwotICAgIH07Ci0g
ICAgVmVjdG9yPFRleHR1cmVVbml0U3RhdGU+IG1fdGV4dHVyZVVuaXRzOwotICAgIHVuc2lnbmVk
IGxvbmcgbV9hY3RpdmVUZXh0dXJlVW5pdDsKLQotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG1f
YmxhY2tUZXh0dXJlMkQ7Ci0gICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFja1RleHR1cmVD
dWJlTWFwOwotCi0gICAgVmVjdG9yPEdDM0RlbnVtPiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0
czsKLQotICAgIC8vIEZpeGVkLXNpemUgY2FjaGUgb2YgcmV1c2FibGUgaW1hZ2UgYnVmZmVycyBm
b3IgdmlkZW8gdGV4SW1hZ2UyRCBjYWxscy4KLSAgICBjbGFzcyBMUlVJbWFnZUJ1ZmZlckNhY2hl
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5
KTsKLSAgICAgICAgLy8gVGhlIHBvaW50ZXIgcmV0dXJuZWQgaXMgb3duZWQgYnkgdGhlIGltYWdl
IGJ1ZmZlciBtYXAuCi0gICAgICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcihjb25zdCBJbnRT
aXplJiBzaXplKTsKLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGJ1YmJsZVRvRnJvbnQoaW50
IGlkeCk7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+W10+IG1fYnVmZmVyczsKLSAgICAgICAgaW50IG1fY2FwYWNpdHk7Ci0gICAgfTsKLSAgICBM
UlVJbWFnZUJ1ZmZlckNhY2hlIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZTsKLQotICAgIEdDM0RpbnQg
bV9tYXhUZXh0dXJlU2l6ZTsKLSAgICBHQzNEaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOwot
ICAgIEdDM0RpbnQgbV9tYXhSZW5kZXJidWZmZXJTaXplOwotICAgIEdDM0RpbnQgbV9tYXhWaWV3
cG9ydERpbXNbMl07Ci0gICAgR0MzRGludCBtX21heFRleHR1cmVMZXZlbDsKLSAgICBHQzNEaW50
IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbDsKLQotICAgIEdDM0RpbnQgbV9tYXhEcmF3QnVmZmVy
czsKLSAgICBHQzNEaW50IG1fbWF4Q29sb3JBdHRhY2htZW50czsKLSAgICBHQzNEZW51bSBtX2Jh
Y2tEcmF3QnVmZmVyOwotICAgIGJvb2wgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hl
Y2tlZDsKLSAgICBib29sIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7Ci0KLSAgICBHQzNEaW50IG1f
cGFja0FsaWdubWVudDsKLSAgICBHQzNEaW50IG1fdW5wYWNrQWxpZ25tZW50OwotICAgIGJvb2wg
bV91bnBhY2tGbGlwWTsKLSAgICBib29sIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYTsKLSAgICBH
QzNEZW51bSBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uOwotICAgIGJvb2wgbV9jb250ZXh0
TG9zdDsKLSAgICBMb3N0Q29udGV4dE1vZGUgbV9jb250ZXh0TG9zdE1vZGU7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwotCi0gICAgYm9vbCBtX2xheWVy
Q2xlYXJlZDsKLSAgICBHQzNEZmxvYXQgbV9jbGVhckNvbG9yWzRdOwotICAgIGJvb2wgbV9zY2lz
c29yRW5hYmxlZDsKLSAgICBHQzNEZmxvYXQgbV9jbGVhckRlcHRoOwotICAgIEdDM0RpbnQgbV9j
bGVhclN0ZW5jaWw7Ci0gICAgR0MzRGJvb2xlYW4gbV9jb2xvck1hc2tbNF07Ci0gICAgR0MzRGJv
b2xlYW4gbV9kZXB0aE1hc2s7Ci0KLSAgICBib29sIG1fc3RlbmNpbEVuYWJsZWQ7Ci0gICAgR0Mz
RHVpbnQgbV9zdGVuY2lsTWFzaywgbV9zdGVuY2lsTWFza0JhY2s7Ci0gICAgR0MzRGludCBtX3N0
ZW5jaWxGdW5jUmVmLCBtX3N0ZW5jaWxGdW5jUmVmQmFjazsgLy8gTm90ZSB0aGF0IHRoZXNlIGFy
ZSB0aGUgdXNlciBzcGVjaWZpZWQgdmFsdWVzLCBub3QgdGhlIGludGVybmFsIGNsYW1wZWQgdmFs
dWUuCi0gICAgR0MzRHVpbnQgbV9zdGVuY2lsRnVuY01hc2ssIG1fc3RlbmNpbEZ1bmNNYXNrQmFj
azsKLQotICAgIGJvb2wgbV9pc0dMRVMyQ29tcGxpYW50OwotICAgIGJvb2wgbV9pc0dMRVMyTlBP
VFN0cmljdDsKLSAgICBib29sIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
czsKLSAgICBib29sIG1faXNSZXNvdXJjZVNhZmU7Ci0gICAgYm9vbCBtX2lzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkOwotICAgIGJvb2wgbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQ7Ci0KLSAgICBi
b29sIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGU7Ci0gICAgaW50IG1fbnVtR0xFcnJvcnNU
b0NvbnNvbGVBbGxvd2VkOwotCi0gICAgLy8gQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgY2FuIGJl
IGNyZWF0ZWQgaW4gYSBzdGF0ZSB3aGVyZSBpdCBhcHBlYXJzIGFzCi0gICAgLy8gYSB2YWxpZCBh
bmQgYWN0aXZlIGNvbnRleHQsIGJ1dCB3aWxsIG5vdCBleGVjdXRlIGFueSBpbXBvcnRhbnQgb3Bl
cmF0aW9ucwotICAgIC8vIHVudGlsIGl0cyBsb2FkIHBvbGljeSBpcyBjb21wbGV0ZWx5IHJlc29s
dmVkLgotICAgIGJvb2wgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uOwotICAgIGJvb2wgbV9o
YXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uOwotICAgIGJvb2wgaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpOwotCi0gICAgLy8gRW5hYmxlZCBleHRlbnNpb24gb2JqZWN0cy4KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8RVhURnJhZ0RlcHRoPiBtX2V4dEZyYWdEZXB0aDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8RVhUQmxlbmRNaW5NYXg+IG1fZXh0QmxlbmRNaW5NYXg7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEVYVHNSR0I+IG1fZXh0c1JHQjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljPiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8RVhUU2hhZGVyVGV4dHVyZUxPRD4gbV9leHRTaGFkZXJUZXh0dXJlTE9EOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlRmxvYXQ+IG1fb2VzVGV4dHVyZUZsb2F0OwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlRmxvYXRMaW5lYXI+IG1fb2VzVGV4dHVyZUZsb2F0
TGluZWFyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0PiBtX29lc1Rl
eHR1cmVIYWxmRmxvYXQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXI+IG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
T0VTU3RhbmRhcmREZXJpdmF0aXZlcz4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxPRVNWZXJ0ZXhBcnJheU9iamVjdD4gbV9vZXNWZXJ0ZXhBcnJheU9iamVj
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTRWxlbWVudEluZGV4VWludD4gbV9vZXNFbGVtZW50
SW5kZXhVaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTExvc2VDb250ZXh0PiBtX3dlYmds
TG9zZUNvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdSZW5kZXJlckluZm8+
IG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEZWJ1
Z1NoYWRlcnM+IG1fd2ViZ2xEZWJ1Z1NoYWRlcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVBVEM+IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPiBtX3dlYmdsQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEM+IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEM7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkdMRGVwdGhUZXh0dXJlPiBtX3dlYmdsRGVwdGhUZXh0dXJlOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJHTERyYXdCdWZmZXJzPiBtX3dlYmdsRHJhd0J1ZmZlcnM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEFOR0xFSW5zdGFuY2VkQXJyYXlzPiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzOwot
Ci0gICAgLy8gSGVscGVycyBmb3IgZ2V0UGFyYW1ldGVyIGFuZCBvdGhlcnMKLSAgICBXZWJHTEdl
dEluZm8gZ2V0Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdl
dEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEZs
b2F0UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0SW50UGFyYW1ldGVy
KEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdDM0Rl
bnVtKTsKLQotICAgIC8vIENsZWFyIHRoZSBiYWNrYnVmZmVyIGlmIGl0IHdhcyBjb21wb3NpdGVk
IHNpbmNlIHRoZSBsYXN0IG9wZXJhdGlvbi4KLSAgICAvLyBjbGVhck1hc2sgaXMgc2V0IHRvIHRo
ZSBiaXRmaWVsZCBvZiBhbnkgY2xlYXIgdGhhdCB3b3VsZCBoYXBwZW4gYW55d2F5IGF0IHRoaXMg
dGltZQotICAgIC8vIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoYXQgY2xlYXIg
aXMgbm93IHVubmVjZXNzYXJ5LgotICAgIGJvb2wgY2xlYXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZp
ZWxkIGNsZWFyTWFzayA9IDApOwotCi0gICAgLy8gSGVscGVyIHRvIHJlc3RvcmUgc3RhdGUgdGhh
dCBjbGVhcmluZyB0aGUgZnJhbWVidWZmZXIgbWF5IGRlc3Ryb3kuCi0gICAgdm9pZCByZXN0b3Jl
U3RhdGVBZnRlckNsZWFyKCk7Ci0KLSAgICB2b2lkIHRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCB0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFn
ZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERv
bVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2Rl
Jik7Ci0KLSAgICB2b2lkIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9v
bCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwotCi0gICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIGZvciBjb3B5VGV4e1N1Yn1JbWFnZSwgY2hlY2sgd2hldGhlciB0
aGUgaW50ZXJuYWxmb3JtYXQKLSAgICAvLyBhbmQgdGhlIGNvbG9yIGJ1ZmZlciBmb3JtYXQgb2Yg
dGhlIGN1cnJlbnQgYm91bmQgZnJhbWVidWZmZXIgY29tYmluYXRpb24KLSAgICAvLyBpcyB2YWxp
ZC4KLSAgICBib29sIGlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFs
aWQoR0MzRGVudW0gdGV4SW50ZXJuYWxGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0
KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVy
J3MgY29sb3IgYnVmZmVyIGZvcm1hdC4KLSAgICBHQzNEZW51bSBnZXRCb3VuZEZyYW1lYnVmZmVy
Q29sb3JGb3JtYXQoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5k
IGZyYW1lYnVmZmVyJ3Mgd2lkdGguCi0gICAgaW50IGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgp
OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIn
cyBoZWlnaHQuCi0gICAgaW50IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKTsKLQotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byB2ZXJpZnkgbGltaXRzIG9uIHRoZSBsZW5ndGggb2YgdW5pZm9y
bSBhbmQgYXR0cmlidXRlIGxvY2F0aW9ucy4KLSAgICBib29sIHZhbGlkYXRlTG9jYXRpb25MZW5n
dGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmKTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBzaXplIGlzIG5vbi1uZWdhdGl2ZS4KLSAgICAvLyBH
ZW5lcmF0ZSBHTCBlcnJvciBhbmQgcmV0dXJuIGZhbHNlIGZvciBuZWdhdGl2ZSBpbnB1dHM7IG90
aGVyd2lzZSwgcmV0dXJuIHRydWUuCi0gICAgYm9vbCB2YWxpZGF0ZVNpemUoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdG8gY2hlY2sgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBiZWxvbmcgdG8g
dGhlCi0gICAgLy8gQVNDSUkgc3Vic2V0IGFzIGRlZmluZWQgaW4gR0xTTCBFUyAxLjAgc3BlYyBz
ZWN0aW9uIDMuMS4KLSAgICBib29sIHZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sg
dGFyZ2V0IGFuZCB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQuCi0gICAgLy8gR2VuZXJhdGUg
R0wgZXJyb3JzIGFuZCByZXR1cm4gMCBpZiB0YXJnZXQgaXMgaW52YWxpZCBvciB0ZXh0dXJlIGJv
dW5kIGlzCi0gICAgLy8gbnVsbC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSB0ZXh0dXJlIGJvdW5k
IHRvIHRoZSB0YXJnZXQuCi0gICAgV2ViR0xUZXh0dXJlKiB2YWxpZGF0ZVRleHR1cmVCaW5kaW5n
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVu
dW1zRm9yQ3ViZU1hcCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQg
Zm9ybWF0L3R5cGUgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgotICAgIC8vIEdl
bmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZh
bGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZl
bCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgbGV2ZWwgZm9yIGZ1
bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgotICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBh
bmQgcmV0dXJucyBmYWxzZSBpZiBsZXZlbCBpcyBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVU
ZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwpOwotCi0gICAgZW51bSBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSB7
Ci0gICAgICAgIE5vdFRleFN1YkltYWdlMkQsCi0gICAgICAgIFRleFN1YkltYWdlMkQsCi0gICAg
fTsKLQotICAgIGVudW0gVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHsKLSAgICAgICAgU291
cmNlQXJyYXlCdWZmZXJWaWV3LAotICAgICAgICBTb3VyY2VJbWFnZURhdGEsCi0gICAgICAgIFNv
dXJjZUhUTUxJbWFnZUVsZW1lbnQsCi0gICAgICAgIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LAot
ICAgICAgICBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LAotICAgIH07Ci0KLSAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBjaGVjayBpZiB0aGUgaW5wdXQgZm9ybWF0
L3R5cGUvbGV2ZWwvdGFyZ2V0L3dpZHRoL2hlaWdodC9ib3JkZXIveG9mZnNldC95b2Zmc2V0IGFy
ZSB2YWxpZC4KLSAgICAvLyBPdGhlcndpc2UsIGl0IHdvdWxkIHJldHVybiBxdWlja2x5IHdpdGhv
dXQgZG9pbmcgb3RoZXIgd29yay4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuYyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFs
aWRhdGlvblNvdXJjZVR5cGUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKLSAgICAgICAgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUlt
YWdlLgotICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJh
bWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpOwotCi0gICAgZW51bSBOdWxsRGlzcG9z
aXRpb24gewotICAgICAgICBOdWxsQWxsb3dlZCwKLSAgICAgICAgTnVsbE5vdEFsbG93ZWQKLSAg
ICB9OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGdpdmVu
IEFycmF5QnVmZmVyVmlldwotICAgIC8vIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUgYW5kIGNvbnRh
aW5zIGVub3VnaCBkYXRhIGZvciB0aGUgdGV4SW1hZ2UgY2FsbC4KLSAgICAvLyBHZW5lcmF0ZXMg
R0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAg
ICBib29sIHZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
aW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJy
YXlCdWZmZXJWaWV3KiBwaXhlbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGxE
aXNwb3NpdGlvbik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBnaXZl
biB0ZXh0dXJlIGZvcm1hdCBpcyBzZXR0YWJsZSBhcyBpbgotICAgIC8vIHlvdSBjYW4gc3VwcGx5
IGRhdGEgdG8gdGV4SW1hZ2UyRCwgb3IgY2FsbCB0ZXhJbWFnZTJELCBjb3B5VGV4SW1hZ2UyRCBh
bmQKLSAgICAvLyBjb3B5VGV4U3ViSW1hZ2UyRC4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3Ig
YW5kIHJldHVybnMgZmFsc2UgaWYgdGhlIGZvcm1hdCBpcyBub3Qgc2V0dGFibGUuCi0gICAgYm9v
bCB2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gZm9ybWF0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21w
cmVzc2VkIHRleHR1cmUgZGF0YSBpcyBjb3JyZWN0IHNpemUKLSAgICAvLyBmb3IgdGhlIGdpdmVu
IGZvcm1hdCBhbmQgZGltZW5zaW9ucy4KLSAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1
bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlC
dWZmZXJWaWV3KiBwaXhlbHMpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB2YWxpZGF0
aW5nIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzLgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVz
c2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIHZhbGlkIGZvcgot
ICAgIC8vIHRoZSBnaXZlbiBmb3JtYXQuCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhE
aW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0
ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIHZhbGlkIGZvcgotICAgIC8vIHRoZSBnaXZlbiBmb3JtYXQu
Ci0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIFdlYkdMVGV4dHVyZSopOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlk
YXRlIG1vZGUgZm9yIGRyYXd7QXJyYXlzL0VsZW1lbnRzfS4KLSAgICBib29sIHZhbGlkYXRlRHJh
d01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7Ci0KLSAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaWYgZnJvbnQvYmFjayBzdGVuY2lsTWFzayBhbmQgc3Rl
bmNpbEZ1bmMgc2V0dGluZ3MgYXJlIHRoZSBzYW1lLgotICAgIGJvb2wgdmFsaWRhdGVTdGVuY2ls
U2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLQotICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byB2YWxpZGF0ZSBzdGVuY2lsIGZ1bmMuCi0gICAgYm9vbCB2YWxpZGF0ZVN0ZW5jaWxG
dW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIGZvciB0ZXhQYXJhbWV0ZXJmIGFuZCB0ZXhQYXJhbWV0ZXJpLgotICAgIHZvaWQg
dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBw
YXJhbWksIEdDM0RpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHByaW50IEdMIGVycm9ycyB0byBjb25zb2xlLgotICAgIHZvaWQgcHJpbnRHTEVy
cm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcHJpbnRHTFdhcm5pbmdUb0Nv
bnNvbGUoY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLSAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJpbnQgd2FybmluZ3MgdG8gY29uc29sZS4gQ3VycmVudGx5
Ci0gICAgLy8gdXNlZCBvbmx5IHRvIHdhcm4gYWJvdXQgdXNlIG9mIG9ic29sZXRlIGZ1bmN0aW9u
cy4KLSAgICB2b2lkIHByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmKTsKLQotICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmcmFt
ZWJ1ZmZlciBmdW5jdGlvbnMuCi0gICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgaWYgcGFyYW1ldGVy
cyBhcmUgaWxsZWdhbC4KLSAgICBib29sIHZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVy
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZXF1
YXRpb24gbW9kZS4KLSAgICBib29sIHZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxp
ZGF0ZSBibGVuZCBmdW5jIGZhY3RvcnMuCi0gICAgYm9vbCB2YWxpZGF0ZUJsZW5kRnVuY0ZhY3Rv
cnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCk7
Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBHTCBjYXBhYmlsaXR5Lgot
ICAgIGJvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFt
ZXRlcnMgZm9yIHVuaWZvcm0gZnVuY3Rpb25zLgotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qLCBJbnQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKLSAg
ICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqLCBHQzNEc2l6ZWks
IEdDM0RzaXplaSBtb2QpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHBh
cmFtZXRlcnMgZm9yIGJ1ZmZlckRhdGEuCi0gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGJvdW5k
IGJ1ZmZlciB0byB0YXJnZXQsIG9yIDAgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBX
ZWJHTEJ1ZmZlciogdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIGltYWdlIGlzIHJl
YWR5IGFuZCB3b3VsZG4ndCB0YWludCBPcmlnaW4uCi0gICAgYm9vbCB2YWxpZGF0ZUhUTUxJbWFn
ZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhj
ZXB0aW9uQ29kZSYpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdl
MkQgdG8gbWFrZSBzdXJlIGNhbnZhcyBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2lu
LgotICAgIGJvb2wgdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotCi0jaWYgRU5BQkxF
KFZJREVPKQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1h
a2Ugc3VyZSB2aWRlbyBpcyByZWFkeSB3b3VsZG4ndCB0YWludCBPcmlnaW4uCi0gICAgYm9vbCB2
YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MVmlk
ZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb25zIGZvciB2ZXJ0ZXhBdHRyaWJOZnt2fS4KLSAgICB2b2lkIHZlcnRleEF0dHJpYmZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBl
Y3RlZFNpemUsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCk7Ci0g
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Ci0gICAg
dm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0KiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsK
LQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgZGVsZXRlKiAoZGVsZXRlQnVmZmVyLCBkZWxl
dGVQcm9ncmFtLCBldGMpIGZ1bmN0aW9ucy4KLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVy
IHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCi0gICAgYm9vbCBkZWxl
dGVPYmplY3QoV2ViR0xPYmplY3QqKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgYmlu
ZCogKGJpbmRCdWZmZXIsIGJpbmRUZXh0dXJlLCBldGMpIGFuZCB1c2VQcm9ncmFtLgotICAgIC8v
IElmIHRoZSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBzZXQgZGVsZXRlZCB0byB0
cnVlIHVwb24gcmV0dXJuLgotICAgIC8vIFJldHVybiBmYWxzZSBpZiBjYWxsZXIgc2hvdWxkIHJl
dHVybiB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4KLSAgICBib29sIGNoZWNrT2JqZWN0VG9C
ZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqLCBib29sJiBkZWxl
dGVkKTsKLQotICAgIC8vIEhlbHBlcnMgZm9yIHNpbXVsYXRpbmcgdmVydGV4QXR0cmliMAotICAg
IHZvaWQgaW5pdFZlcnRleEF0dHJpYjAoKTsKLSAgICBib29sIHNpbXVsYXRlVmVydGV4QXR0cmli
MChHQzNEc2l6ZWkgbnVtVmVydGV4KTsKLSAgICB2b2lkIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRl
eEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0KLSAgICB2b2lkIGRpc3BhdGNoQ29udGV4dExvc3RFdmVu
dCgpOwotICAgIC8vIEhlbHBlciBmb3IgcmVzdG9yYXRpb24gYWZ0ZXIgY29udGV4dCBsb3N0Lgot
ICAgIHZvaWQgbWF5YmVSZXN0b3JlQ29udGV4dCgpOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHdl
IGFyZSBydW5uaW5nIHByaXZpbGVnZWQgY29kZSBpbiB0aGUgYnJvd3NlciwgZm9yIGV4YW1wbGUs
Ci0gICAgLy8gYSBTYWZhcmkgb3IgQ2hyb21lIGV4dGVuc2lvbi4KLSAgICBib29sIGFsbG93UHJp
dmlsZWdlZEV4dGVuc2lvbnMoKSBjb25zdDsKLQotICAgIGVudW0gQ29uc29sZURpc3BsYXlQcmVm
ZXJlbmNlIHsKLSAgICAgICAgRGlzcGxheUluQ29uc29sZSwKLSAgICAgICAgRG9udERpc3BsYXlJ
bkNvbnNvbGUKLSAgICB9OwotCi0gICAgLy8gV3JhcHBlciBmb3IgR3JhcGhpY3NDb250ZXh0M0Q6
OnN5bnRoZXNpemVHTEVycm9yIHRoYXQgc2VuZHMgYSBtZXNzYWdlCi0gICAgLy8gdG8gdGhlIEph
dmFTY3JpcHQgY29uc29sZS4KLSAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCBDb25zb2xl
RGlzcGxheVByZWZlcmVuY2UgPSBEaXNwbGF5SW5Db25zb2xlKTsKLQotICAgIFN0cmluZyBlbnN1
cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotCi0gICAgLy8gRW5hYmxlIG9yIGRpc2Fi
bGUgc3RlbmNpbCB0ZXN0IGJhc2VkIG9uIHVzZXIgc2V0dGluZyBhbmQKLSAgICAvLyB3aGV0aGVy
IHRoZSBjdXJyZW50IEZCTyBoYXMgYSBzdGVuY2lsIGJ1ZmZlci4KLSAgICB2b2lkIGFwcGx5U3Rl
bmNpbFRlc3QoKTsKLQotICAgIC8vIEhlbHBlciBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEg
Y2FwYWJpbGl0eS4KLSAgICB2b2lkIGVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5
LCBib29sIGVuYWJsZSk7Ci0KLSAgICAvLyBDbGFtcCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byBH
TF9NQVhfVklFV1BPUlRfRElNUy4KLSAgICBJbnRTaXplIGNsYW1wZWRDYW52YXNTaXplKCk7Ci0K
LSAgICAvLyBGaXJzdCB0aW1lIGNhbGxlZCwgaWYgRVhUX2RyYXdfYnVmZmVycyBpcyBzdXBwb3J0
ZWQsIHF1ZXJ5IHRoZSB2YWx1ZTsgb3RoZXJ3aXNlIHJldHVybiAwLgotICAgIC8vIExhdGVyLCBy
ZXR1cm4gdGhlIGNhY2hlZCB2YWx1ZS4KLSAgICBHQzNEaW50IGdldE1heERyYXdCdWZmZXJzKCk7
Ci0gICAgR0MzRGludCBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCk7Ci0KLSAgICB2b2lkIHNldEJh
Y2tEcmF3QnVmZmVyKEdDM0RlbnVtKTsKLQotICAgIHZvaWQgcmVzdG9yZUN1cnJlbnRGcmFtZWJ1
ZmZlcigpOwotICAgIHZvaWQgcmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQoKTsKLQotICAgIC8vIENo
ZWNrIGlmIEVYVF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCBhbmQgaWYgaXQg
c2F0aXNmaWVzIHRoZSBXZWJHTCByZXF1aXJlbWVudHMuCi0gICAgYm9vbCBzdXBwb3J0c0RyYXdC
dWZmZXJzKCk7CisgICAgdmlydHVhbCBib29sIGlzV2ViR0wxKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogfTsKLQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmlkbAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsNjU1ICsyMyw5IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMZW51bTsKLXR5cGVk
ZWYgYm9vbGVhbiAgICAgICAgR0xib29sZWFuOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGJp
dGZpZWxkOwotdHlwZWRlZiBieXRlICAgICAgICAgICBHTGJ5dGU7ICAgICAgICAgLyogJ2J5dGUn
IHNob3VsZCBiZSBhIHNpZ25lZCA4IGJpdCB0eXBlLiAqLwotdHlwZWRlZiBzaG9ydCAgICAgICAg
ICBHTHNob3J0OwotdHlwZWRlZiBsb25nICAgICAgICAgICBHTGludDsKLXR5cGVkZWYgbG9uZyAg
ICAgICAgICAgR0xzaXplaTsKLXR5cGVkZWYgbG9uZyBsb25nICAgICAgR0xpbnRwdHI7Ci10eXBl
ZGVmIGxvbmcgbG9uZyAgICAgIEdMc2l6ZWlwdHI7Ci10eXBlZGVmIG9jdGV0ICAgICAgICAgIEdM
dWJ5dGU7ICAgICAgICAvKiAnb2N0ZXQnIHNob3VsZCBiZSBhbiB1bnNpZ25lZCA4IGJpdCB0eXBl
LiAqLwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBHTHVzaG9ydDsKLXR5cGVkZWYgdW5zaWduZWQg
bG9uZyAgR0x1aW50OwotdHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xmbG9hdDsKLXR5cGVk
ZWYgdW5yZXN0cmljdGVkIGZsb2F0IEdMY2xhbXBmOwotCiBbCiAgICAgQ29uZGl0aW9uYWw9V0VC
R0wsCiAgICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCiAgICAgRG9Ob3RDaGVja0NvbnN0YW50cywK
LV0gaW50ZXJmYWNlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCA6IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQgewotCi0gICAgLyogQ2xlYXJCdWZmZXJNYXNrICovCi0gICAgY29uc3QgR0xlbnVtIERFUFRI
X0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7Ci0gICAgY29uc3QgR0xlbnVt
IFNURU5DSUxfQlVGRkVSX0JJVCAgICAgICAgICAgICA9IDB4MDAwMDA0MDA7Ci0gICAgY29uc3Qg
R0xlbnVtIENPTE9SX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7Ci0KLSAg
ICAvKiBCZWdpbk1vZGUgKi8KLSAgICBjb25zdCBHTGVudW0gUE9JTlRTICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgwMDAwOwotICAgIGNvbnN0IEdMZW51bSBMSU5FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDAwMDE7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MDAwMjsKLSAgICBjb25zdCBHTGVudW0gTElORV9TVFJJUCAgICAg
ICAgICAgICAgICAgICAgID0gMHgwMDAzOwotICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRVMgICAg
ICAgICAgICAgICAgICAgICAgPSAweDAwMDQ7Ci0gICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NU
UklQICAgICAgICAgICAgICAgICA9IDB4MDAwNTsKLSAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVf
RkFOICAgICAgICAgICAgICAgICAgID0gMHgwMDA2OwotCi0gICAgLyogQWxwaGFGdW5jdGlvbiAo
bm90IHN1cHBvcnRlZCBpbiBFUzIwKSAqLwotICAgIC8qICAgICAgTkVWRVIgKi8KLSAgICAvKiAg
ICAgIExFU1MgKi8KLSAgICAvKiAgICAgIEVRVUFMICovCi0gICAgLyogICAgICBMRVFVQUwgKi8K
LSAgICAvKiAgICAgIEdSRUFURVIgKi8KLSAgICAvKiAgICAgIE5PVEVRVUFMICovCi0gICAgLyog
ICAgICBHRVFVQUwgKi8KLSAgICAvKiAgICAgIEFMV0FZUyAqLwotCi0gICAgLyogQmxlbmRpbmdG
YWN0b3JEZXN0ICovCi0gICAgY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDA7Ci0gICAgY29uc3QgR0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDE7Ci0gICAgY29uc3QgR0xlbnVtIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9
IDB4MDMwMDsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAg
ID0gMHgwMzAxOwotICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAzMDI7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAg
ICAgICA9IDB4MDMwMzsKLSAgICBjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwMzA0OwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAg
ICAgICAgICAgPSAweDAzMDU7Ci0KLSAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLwotICAgIC8q
ICAgICAgWkVSTyAqLwotICAgIC8qICAgICAgT05FICovCi0gICAgY29uc3QgR0xlbnVtIERTVF9D
T0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwNjsKLSAgICBjb25zdCBHTGVudW0gT05F
X01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgID0gMHgwMzA3OwotICAgIGNvbnN0IEdMZW51bSBT
UkNfQUxQSEFfU0FUVVJBVEUgICAgICAgICAgICAgPSAweDAzMDg7Ci0gICAgLyogICAgICBTUkNf
QUxQSEEgKi8KLSAgICAvKiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KLSAgICAvKiAgICAg
IERTVF9BTFBIQSAqLwotICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLwotCi0gICAg
LyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovCi0gICAgY29uc3QgR0xlbnVtIEZVTkNfQUREICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODAwNjsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFV
QVRJT04gICAgICAgICAgICAgICAgID0gMHg4MDA5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9F
UVVBVElPTl9SR0IgICAgICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVB
VElPTiAqLwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAg
PSAweDg4M0Q7Ci0KLSAgICAvKiBCbGVuZFN1YnRyYWN0ICovCi0gICAgY29uc3QgR0xlbnVtIEZV
TkNfU1VCVFJBQ1QgICAgICAgICAgICAgICAgICA9IDB4ODAwQTsKLSAgICBjb25zdCBHTGVudW0g
RlVOQ19SRVZFUlNFX1NVQlRSQUNUICAgICAgICAgID0gMHg4MDBCOwotCi0gICAgLyogU2VwYXJh
dGUgQmxlbmQgRnVuY3Rpb25zICovCi0gICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAg
ICAgICAgICAgICAgICA9IDB4ODBDODsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX1JHQiAg
ICAgICAgICAgICAgICAgID0gMHg4MEM5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfQUxQ
SEEgICAgICAgICAgICAgICAgPSAweDgwQ0E7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19B
TFBIQSAgICAgICAgICAgICAgICA9IDB4ODBDQjsKLSAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRf
Q09MT1IgICAgICAgICAgICAgICAgID0gMHg4MDAxOwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlO
VVNfQ09OU1RBTlRfQ09MT1IgICAgICAgPSAweDgwMDI7Ci0gICAgY29uc3QgR0xlbnVtIENPTlNU
QU5UX0FMUEhBICAgICAgICAgICAgICAgICA9IDB4ODAwMzsKLSAgICBjb25zdCBHTGVudW0gT05F
X01JTlVTX0NPTlNUQU5UX0FMUEhBICAgICAgID0gMHg4MDA0OwotICAgIGNvbnN0IEdMZW51bSBC
TEVORF9DT0xPUiAgICAgICAgICAgICAgICAgICAgPSAweDgwMDU7Ci0KLSAgICAvKiBCdWZmZXIg
T2JqZWN0cyAqLwotICAgIGNvbnN0IEdMZW51bSBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAg
ICAgPSAweDg4OTI7Ci0gICAgY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAg
ICAgICA9IDB4ODg5MzsKLSAgICBjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAg
ICAgICAgID0gMHg4ODk0OwotICAgIGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUl9C
SU5ESU5HICAgPSAweDg4OTU7Ci0KLSAgICBjb25zdCBHTGVudW0gU1RSRUFNX0RSQVcgICAgICAg
ICAgICAgICAgICAgID0gMHg4OEUwOwotICAgIGNvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAg
ICAgICAgICAgICAgICAgPSAweDg4RTQ7Ci0gICAgY29uc3QgR0xlbnVtIERZTkFNSUNfRFJBVyAg
ICAgICAgICAgICAgICAgICA9IDB4ODhFODsKLQotICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfU0la
RSAgICAgICAgICAgICAgICAgICAgPSAweDg3NjQ7Ci0gICAgY29uc3QgR0xlbnVtIEJVRkZFUl9V
U0FHRSAgICAgICAgICAgICAgICAgICA9IDB4ODc2NTsKLQotICAgIGNvbnN0IEdMZW51bSBDVVJS
RU5UX1ZFUlRFWF9BVFRSSUIgICAgICAgICAgPSAweDg2MjY7Ci0KLSAgICAvKiBDdWxsRmFjZU1v
ZGUgKi8KLSAgICBjb25zdCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwNDA0OwotICAgIGNvbnN0IEdMZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDA0MDU7Ci0gICAgY29uc3QgR0xlbnVtIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAg
ICA9IDB4MDQwODsKLQotICAgIC8qIERlcHRoRnVuY3Rpb24gKi8KLSAgICAvKiAgICAgIE5FVkVS
ICovCi0gICAgLyogICAgICBMRVNTICovCi0gICAgLyogICAgICBFUVVBTCAqLwotICAgIC8qICAg
ICAgTEVRVUFMICovCi0gICAgLyogICAgICBHUkVBVEVSICovCi0gICAgLyogICAgICBOT1RFUVVB
TCAqLwotICAgIC8qICAgICAgR0VRVUFMICovCi0gICAgLyogICAgICBBTFdBWVMgKi8KLQotICAg
IC8qIEVuYWJsZUNhcCAqLwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAg
ICAgICAgICAgPSAweDBERTE7Ci0gICAgY29uc3QgR0xlbnVtIENVTExfRkFDRSAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEI0NDsKLSAgICBjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwQkUyOwotICAgIGNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDBCRDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVEVTVCAg
ICAgICAgICAgICAgICAgICA9IDB4MEI5MDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfVEVTVCAg
ICAgICAgICAgICAgICAgICAgID0gMHgwQjcxOwotICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX1RF
U1QgICAgICAgICAgICAgICAgICAgPSAweDBDMTE7Ci0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05f
T0ZGU0VUX0ZJTEwgICAgICAgICAgICA9IDB4ODAzNzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExF
X0FMUEhBX1RPX0NPVkVSQUdFICAgICAgID0gMHg4MDlFOwotICAgIGNvbnN0IEdMZW51bSBTQU1Q
TEVfQ09WRVJBR0UgICAgICAgICAgICAgICAgPSAweDgwQTA7Ci0KLSAgICAvKiBFcnJvckNvZGUg
Ki8KLSAgICBjb25zdCBHTGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsK
LSAgICBjb25zdCBHTGVudW0gSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAw
OwotICAgIGNvbnN0IEdMZW51bSBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1
MDE7Ci0gICAgY29uc3QgR0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4
MDUwMjsKLSAgICBjb25zdCBHTGVudW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0g
MHgwNTA1OwotCi0gICAgLyogRnJvbnRGYWNlRGlyZWN0aW9uICovCi0gICAgY29uc3QgR0xlbnVt
IENXICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKLSAgICBjb25zdCBHTGVu
dW0gQ0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwOTAxOwotCi0gICAgLyogR2V0
UE5hbWUgKi8KLSAgICBjb25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAg
ID0gMHgwQjIxOwotICAgIGNvbnN0IEdMZW51bSBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAg
ICAgPSAweDg0NkQ7Ci0gICAgY29uc3QgR0xlbnVtIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAg
ICAgICA9IDB4ODQ2RTsKLSAgICBjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAg
ICAgICAgID0gMHgwQjQ1OwotICAgIGNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAgICAgICAg
ICAgICAgICAgPSAweDBCNDY7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1JBTkdFICAgICAgICAg
ICAgICAgICAgICA9IDB4MEI3MDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAg
ICAgICAgICAgICAgID0gMHgwQjcyOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxV
RSAgICAgICAgICAgICAgPSAweDBCNzM7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX0ZVTkMgICAg
ICAgICAgICAgICAgICAgICA9IDB4MEI3NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVB
Ul9WQUxVRSAgICAgICAgICAgID0gMHgwQjkxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZV
TkMgICAgICAgICAgICAgICAgICAgPSAweDBCOTI7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxf
RkFJTCAgICAgICAgICAgICAgICAgICA9IDB4MEI5NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJ
TF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgID0gMHgwQjk1OwotICAgIGNvbnN0IEdMZW51bSBTVEVO
Q0lMX1BBU1NfREVQVEhfUEFTUyAgICAgICAgPSAweDBCOTY7Ci0gICAgY29uc3QgR0xlbnVtIFNU
RU5DSUxfUkVGICAgICAgICAgICAgICAgICAgICA9IDB4MEI5NzsKLSAgICBjb25zdCBHTGVudW0g
U1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAgICAgID0gMHgwQjkzOwotICAgIGNvbnN0IEdMZW51
bSBTVEVOQ0lMX1dSSVRFTUFTSyAgICAgICAgICAgICAgPSAweDBCOTg7Ci0gICAgY29uc3QgR0xl
bnVtIFNURU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICA9IDB4ODgwMDsKLSAgICBjb25zdCBH
TGVudW0gU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOwotICAgIGNvbnN0
IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7Ci0gICAgY29u
c3QgR0xlbnVtIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKLSAgICBj
b25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOwotICAg
IGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7Ci0g
ICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA9IDB4OENBNTsK
LSAgICBjb25zdCBHTGVudW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEy
OwotICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBD
MTA7Ci0gICAgLyogICAgICBTQ0lTU09SX1RFU1QgKi8KLSAgICBjb25zdCBHTGVudW0gQ09MT1Jf
Q0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQzIyOwotICAgIGNvbnN0IEdMZW51bSBDT0xP
Ul9XUklURU1BU0sgICAgICAgICAgICAgICAgPSAweDBDMjM7Ci0gICAgY29uc3QgR0xlbnVtIFVO
UEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICA9IDB4MENGNTsKLSAgICBjb25zdCBHTGVudW0g
UEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAgID0gMHgwRDA1OwotICAgIGNvbnN0IEdMZW51
bSBNQVhfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgPSAweDBEMzM7Ci0gICAgY29uc3QgR0xl
bnVtIE1BWF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAgICA9IDB4MEQzQTsKLSAgICBjb25zdCBH
TGVudW0gU1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOwotICAgIGNvbnN0
IEdMZW51bSBSRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgPSAweDBENTI7Ci0gICAgY29u
c3QgR0xlbnVtIEdSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKLSAgICBj
b25zdCBHTGVudW0gQkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OwotICAg
IGNvbnN0IEdMZW51bSBBTFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7Ci0g
ICAgY29uc3QgR0xlbnVtIERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsK
LSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3
OwotICAgIGNvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJB
MDA7Ci0gICAgLyogICAgICBQT0xZR09OX09GRlNFVF9GSUxMICovCi0gICAgY29uc3QgR0xlbnVt
IFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgID0gMHg4MDY5OwotICAgIGNvbnN0IEdM
ZW51bSBTQU1QTEVfQlVGRkVSUyAgICAgICAgICAgICAgICAgPSAweDgwQTg7Ci0gICAgY29uc3Qg
R0xlbnVtIFNBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKLSAgICBjb25z
dCBHTGVudW0gU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFBOwotICAgIGNv
bnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7Ci0KLSAg
ICAvKiBHZXRUZXh0dXJlUGFyYW1ldGVyICovCi0gICAgLyogICAgICBURVhUVVJFX01BR19GSUxU
RVIgKi8KLSAgICAvKiAgICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqLwotICAgIC8qICAgICAgVEVY
VFVSRV9XUkFQX1MgKi8KLSAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9UICovCi0KLSAgICBjb25z
dCBHTGVudW0gQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOwotCi0gICAg
LyogSGludE1vZGUgKi8KLSAgICBjb25zdCBHTGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxMTAwOwotICAgIGNvbnN0IEdMZW51bSBGQVNURVNUICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDExMDE7Ci0gICAgY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MTEwMjsKLQotICAgIC8qIEhpbnRUYXJnZXQgKi8KLSAgICBjb25zdCBH
TGVudW0gR0VORVJBVEVfTUlQTUFQX0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKLQotICAgIC8q
IERhdGFUeXBlICovCi0gICAgY29uc3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTQwMDsKLSAgICBjb25zdCBHTGVudW0gVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgID0gMHgxNDAxOwotICAgIGNvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDE0MDI7Ci0gICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAg
ICAgICAgICAgICA9IDB4MTQwMzsKLSAgICBjb25zdCBHTGVudW0gSU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgxNDA0OwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAg
ICAgICAgICAgICAgICAgPSAweDE0MDU7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MTQwNjsKLQotICAgIC8qIFBpeGVsRm9ybWF0ICovCi0gICAg
Y29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKLSAg
ICBjb25zdCBHTGVudW0gQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA2Owot
ICAgIGNvbnN0IEdMZW51bSBSR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7
Ci0gICAgY29uc3QgR0xlbnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkw
ODsKLSAgICBjb25zdCBHTGVudW0gTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgID0gMHgx
OTA5OwotICAgIGNvbnN0IEdMZW51bSBMVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAw
eDE5MEE7Ci0KLSAgICAvKiBQaXhlbFR5cGUgKi8KLSAgICAvKiAgICAgIFVOU0lHTkVEX0JZVEUg
Ki8KLSAgICBjb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4
MDMzOwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAw
eDgwMzQ7Ci0gICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9
IDB4ODM2MzsKLQotICAgIC8qIFNoYWRlcnMgKi8KLSAgICBjb25zdCBHTGVudW0gRlJBR01FTlRf
U0hBREVSICAgICAgICAgICAgICAgICAgPSAweDhCMzA7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRF
WF9TSEFERVIgICAgICAgICAgICAgICAgICAgID0gMHg4QjMxOwotICAgIGNvbnN0IEdMZW51bSBN
QVhfVkVSVEVYX0FUVFJJQlMgICAgICAgICAgICAgICA9IDB4ODg2OTsKLSAgICBjb25zdCBHTGVu
dW0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7Ci0gICAgY29uc3Qg
R0xlbnVtIE1BWF9WQVJZSU5HX1ZFQ1RPUlMgICAgICAgICAgICAgID0gMHg4REZDOwotICAgIGNv
bnN0IEdMZW51bSBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKLSAg
ICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7
Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgID0gMHg4
ODcyOwotICAgIGNvbnN0IEdMZW51bSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9
IDB4OERGRDsKLSAgICBjb25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAg
ICAgPSAweDhCNEY7Ci0gICAgY29uc3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAg
ICAgICAgID0gMHg4QjgwOwotICAgIGNvbnN0IEdMZW51bSBMSU5LX1NUQVRVUyAgICAgICAgICAg
ICAgICAgICAgICA9IDB4OEI4MjsKLSAgICBjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAg
ICAgICAgICAgICAgICAgPSAweDhCODM7Ci0gICAgY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURF
UlMgICAgICAgICAgICAgICAgID0gMHg4Qjg1OwotICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVU5J
Rk9STVMgICAgICAgICAgICAgICAgICA9IDB4OEI4NjsKLSAgICBjb25zdCBHTGVudW0gQUNUSVZF
X0FUVFJJQlVURVMgICAgICAgICAgICAgICAgPSAweDhCODk7Ci0gICAgY29uc3QgR0xlbnVtIFNI
QURJTkdfTEFOR1VBR0VfVkVSU0lPTiAgICAgICAgID0gMHg4QjhDOwotICAgIGNvbnN0IEdMZW51
bSBDVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICA9IDB4OEI4RDsKLQotICAgIC8qIFN0
ZW5jaWxGdW5jdGlvbiAqLwotICAgIGNvbnN0IEdMZW51bSBORVZFUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDAyMDA7Ci0gICAgY29uc3QgR0xlbnVtIExFU1MgICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDIwMTsKLSAgICBjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwMjAyOwotICAgIGNvbnN0IEdMZW51bSBMRVFVQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDAyMDM7Ci0gICAgY29uc3QgR0xlbnVtIEdSRUFURVIgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDIwNDsKLSAgICBjb25zdCBHTGVudW0gTk9URVFVQUwgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwMjA1OwotICAgIGNvbnN0IEdMZW51bSBHRVFVQUwgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDY7Ci0gICAgY29uc3QgR0xlbnVtIEFMV0FZUyAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNzsKLQotICAgIC8qIFN0ZW5jaWxPcCAqLwot
ICAgIC8qICAgICAgWkVSTyAqLwotICAgIGNvbnN0IEdMZW51bSBLRUVQICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDFFMDA7Ci0gICAgY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MUUwMTsKLSAgICBjb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgxRTAyOwotICAgIGNvbnN0IEdMZW51bSBERUNSICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDFFMDM7Ci0gICAgY29uc3QgR0xlbnVtIElOVkVSVCAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MTUwQTsKLSAgICBjb25zdCBHTGVudW0gSU5DUl9XUkFQ
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NTA3OwotICAgIGNvbnN0IEdMZW51bSBERUNSX1dS
QVAgICAgICAgICAgICAgICAgICAgICAgPSAweDg1MDg7Ci0KLSAgICAvKiBTdHJpbmdOYW1lICov
Ci0gICAgY29uc3QgR0xlbnVtIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYw
MDsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgx
RjAxOwotICAgIGNvbnN0IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDFGMDI7Ci0KLSAgICAvKiBUZXh0dXJlTWFnRmlsdGVyICovCi0gICAgY29uc3QgR0xlbnVtIE5F
QVJFU1QgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjYwMDsKLSAgICBjb25zdCBHTGVudW0g
TElORUFSICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNjAxOwotCi0gICAgLyogVGV4dHVy
ZU1pbkZpbHRlciAqLwotICAgIC8qICAgICAgTkVBUkVTVCAqLwotICAgIC8qICAgICAgTElORUFS
ICovCi0gICAgY29uc3QgR0xlbnVtIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4
MjcwMDsKLSAgICBjb25zdCBHTGVudW0gTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0g
MHgyNzAxOwotICAgIGNvbnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAg
PSAweDI3MDI7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAg
ICA9IDB4MjcwMzsKLQotICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCi0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRV9NSU5fRklMVEVSICAgICAgICAgICAgID0gMHgyODAxOwotICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7Ci0gICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKLQot
ICAgIC8qIFRleHR1cmVUYXJnZXQgKi8KLSAgICAvKiAgICAgIFRFWFRVUkVfMkQgKi8KLSAgICBj
b25zdCBHTGVudW0gVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOwotCi0g
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsK
LSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0
OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1
MTU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4
ODUxNjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0g
MHg4NTE3OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAg
PSAweDg1MTg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAg
ICA9IDB4ODUxOTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
ICAgID0gMHg4NTFBOwotICAgIGNvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpF
ICAgICAgPSAweDg1MUM7Ci0KLSAgICAvKiBUZXh0dXJlVW5pdCAqLwotICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzA7Ci0gICAgY29uc3QgR0xl
bnVtIFRFWFRVUkUxICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKLSAgICBjb25zdCBH
TGVudW0gVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMyOwotICAgIGNvbnN0
IEdMZW51bSBURVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzM7Ci0gICAgY29u
c3QgR0xlbnVtIFRFWFRVUkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKLSAgICBj
b25zdCBHTGVudW0gVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OwotICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzY7Ci0g
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsK
LSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4
OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
Qzk7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODRDQTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NENCOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0Q0M7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODRDRDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NENFOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTUgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0Q0Y7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAg
ICAgICAgICA9IDB4ODREMDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NEQxOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTggICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0RDI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODREMzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NEQ0OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjEgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0RDU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRENjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIz
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ3OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
MjQgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRV
UkUyNSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREOTsKLSAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTI2ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERBOwotICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REI7Ci0gICAgY29uc3QgR0xlbnVt
IFRFWFRVUkUyOCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREQzsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRTI5ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEREOwotICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REU7Ci0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKLSAgICBjb25z
dCBHTGVudW0gQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOwotCi0gICAg
LyogVGV4dHVyZVdyYXBNb2RlICovCi0gICAgY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MjkwMTsKLSAgICBjb25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAg
ICAgICAgICAgICAgICAgID0gMHg4MTJGOwotICAgIGNvbnN0IEdMZW51bSBNSVJST1JFRF9SRVBF
QVQgICAgICAgICAgICAgICAgPSAweDgzNzA7Ci0KLSAgICAvKiBVbmlmb3JtIFR5cGVzICovCi0g
ICAgY29uc3QgR0xlbnVtIEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MDsK
LSAgICBjb25zdCBHTGVudW0gRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUx
OwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhC
NTI7Ci0gICAgY29uc3QgR0xlbnVtIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI1MzsKLSAgICBjb25zdCBHTGVudW0gSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgID0g
MHg4QjU0OwotICAgIGNvbnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAg
PSAweDhCNTU7Ci0gICAgY29uc3QgR0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEI1NjsKLSAgICBjb25zdCBHTGVudW0gQk9PTF9WRUMyICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4QjU3OwotICAgIGNvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAg
ICAgICAgPSAweDhCNTg7Ci0gICAgY29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAg
ICAgICAgICA9IDB4OEI1OTsKLSAgICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMiAgICAgICAgICAg
ICAgICAgICAgID0gMHg4QjVBOwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAg
ICAgICAgICAgICAgPSAweDhCNUI7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDQgICAgICAg
ICAgICAgICAgICAgICA9IDB4OEI1QzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFUl8yRCAgICAg
ICAgICAgICAgICAgICAgID0gMHg4QjVFOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUg
ICAgICAgICAgICAgICAgICAgPSAweDhCNjA7Ci0KLSAgICAvKiBWZXJ0ZXggQXJyYXlzICovCi0g
ICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2
MjI7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAg
PSAweDg2MjM7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAg
ICAgICAgPSAweDg2MjQ7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQ
RSAgICAgICAgICAgPSAweDg2MjU7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRCAgICAgPSAweDg4NkE7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRS
SUJfQVJSQVlfUE9JTlRFUiAgICAgICAgPSAweDg2NDU7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRF
WF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgPSAweDg4OUY7Ci0KLSAgICAvKiBTaGFkZXIg
U291cmNlICovCi0gICAgY29uc3QgR0xlbnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAg
ICA9IDB4OEI4MTsKLQotICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICov
Ci0gICAgY29uc3QgR0xlbnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERG
MDsKLSAgICBjb25zdCBHTGVudW0gTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4
REYxOwotICAgIGNvbnN0IEdMZW51bSBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgPSAw
eDhERjI7Ci0gICAgY29uc3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4OERGMzsKLSAgICBjb25zdCBHTGVudW0gTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAg
ID0gMHg4REY0OwotICAgIGNvbnN0IEdMZW51bSBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDhERjU7Ci0KLSAgICAvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCi0gICAgY29uc3Qg
R0xlbnVtIEZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKLSAgICBjb25z
dCBHTGVudW0gUkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4RDQxOwotCi0gICAg
Y29uc3QgR0xlbnVtIFJHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKLSAg
ICBjb25zdCBHTGVudW0gUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3Owot
ICAgIGNvbnN0IEdMZW51bSBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhENjI7
Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFB
NTsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgx
OTAxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgPSAw
eDhENDg7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9
IDB4ODRGOTsKLQotICAgIGNvbnN0IEdMZW51bSBTUkdCX0VYVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4OEM0MDsKLSAgICBjb25zdCBHTGVudW0gU1JHQl9BTFBIQV9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhDNDI7Ci0gICAgY29uc3QgR0xl
bnVtIFNSR0I4X0FMUEhBOF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQz
OwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5H
X0VYVCAgICA9IDB4ODIxMDsKLQotICAgIGNvbnN0IEdMZW51bSBNSU5fRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDgwMDc7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9FWFQgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODAwODsKLQotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJf
V0lEVEggICAgICAgICAgICAgPSAweDhENDI7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZF
Ul9IRUlHSFQgICAgICAgICAgICA9IDB4OEQ0MzsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVG
RkVSX0lOVEVSTkFMX0ZPUk1BVCAgID0gMHg4RDQ0OwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJC
VUZGRVJfUkVEX1NJWkUgICAgICAgICAgPSAweDhENTA7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRF
UkJVRkZFUl9HUkVFTl9TSVpFICAgICAgICA9IDB4OEQ1MTsKLSAgICBjb25zdCBHTGVudW0gUkVO
REVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgID0gMHg4RDUyOwotICAgIGNvbnN0IEdMZW51bSBS
RU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAgPSAweDhENTM7Ci0gICAgY29uc3QgR0xlbnVt
IFJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFICAgICAgICA9IDB4OEQ1NDsKLSAgICBjb25zdCBHTGVu
dW0gUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAgID0gMHg4RDU1OwotCi0gICAgY29uc3Qg
R0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgID0gMHg4
Q0QwOwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1F
ICAgICAgICAgICA9IDB4OENEMTsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAweDhDRDI7Ci0gICAgY29uc3QgR0xlbnVtIEZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFID0gMHg4Q0QzOwotCi0g
ICAgY29uc3QgR0xlbnVtIENPTE9SX0FUVEFDSE1FTlQwICAgICAgICAgICAgICA9IDB4OENFMDsK
LSAgICBjb25zdCBHTGVudW0gREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4RDAw
OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgPSAweDhE
MjA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA9IDB4
ODIxQTsKLQotICAgIGNvbnN0IEdMZW51bSBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAwOwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4Q0Q1OwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQgICAgICAgICA9IDB4OENENjsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7Ci0gICAgY29uc3Qg
R0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgID0gMHg4Q0Q5
OwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAg
ICAgICA9IDB4OENERDsKLQotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAg
ICAgICAgICAgPSAweDhDQTY7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9CSU5ESU5H
ICAgICAgICAgICA9IDB4OENBNzsKLSAgICBjb25zdCBHTGVudW0gTUFYX1JFTkRFUkJVRkZFUl9T
SVpFICAgICAgICAgID0gMHg4NEU4OwotCi0gICAgY29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OICA9IDB4MDUwNjsKLQotICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1z
ICovCi0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19GTElQX1lfV0VCR0wgICAgICAgICAgICAgICAg
PSAweDkyNDA7Ci0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJH
TCAgICAgPSAweDkyNDE7Ci0gICAgY29uc3QgR0xlbnVtIENPTlRFWFRfTE9TVF9XRUJHTCAgICAg
ICAgICAgICAgICAgPSAweDkyNDI7Ci0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19DT0xPUlNQQUNF
X0NPTlZFUlNJT05fV0VCR0wgPSAweDkyNDM7Ci0gICAgY29uc3QgR0xlbnVtIEJST1dTRVJfREVG
QVVMVF9XRUJHTCAgICAgICAgICAgICAgPSAweDkyNDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1
dGUgR0xzaXplaSBkcmF3aW5nQnVmZmVyV2lkdGg7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEdM
c2l6ZWkgZHJhd2luZ0J1ZmZlckhlaWdodDsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xTaGFkZXIgc2hhZGVyKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBi
aW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCwgRE9N
U3RyaW5nIG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJpbmRCdWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVy
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICBiaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1
ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgYmluZFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciBy
ZW5kZXJidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdMZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0
dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRDb2xvcihH
TGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBo
YSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRXF1YXRpb24o
R0xlbnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVu
ZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEZ1bmMoR0xlbnVtIHNmYWN0
b3IsIEdMZW51bSBkZmFjdG9yKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgYmxlbmRGdW5jU2VwYXJhdGUoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVt
IHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJy
YXlCdWZmZXI/IGRhdGEsIEdMZW51bSB1c2FnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBB
cnJheUJ1ZmZlclZpZXc/IGRhdGEsIEdMZW51bSB1c2FnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFy
Z2V0LCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2FnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0g
dGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVyPyBkYXRhKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJTdWJEYXRh
KEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhKTsK
LQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSAgICAgICBjaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKEdMZW51bSB0YXJnZXQpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBjbGVhcihHTGJpdGZpZWxkIG1hc2spOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBjbGVhckNvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xh
bXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgY2xlYXJEZXB0aChHTGNsYW1wZiBkZXB0aCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNpbChHTGludCBzKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVh
biBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgY29tcGlsZVNoYWRlcihX
ZWJHTFNoYWRlciBzaGFkZXIpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGlu
dCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyBkYXRhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7
Ci0gICAgCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvcHlUZXhJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3Jk
ZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb3B5VGV4U3ViSW1h
Z2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xGcmFtZWJ1ZmZlciBjcmVhdGVGcmFtZWJ1ZmZl
cigpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMUHJvZ3JhbSBjcmVhdGVQcm9ncmFt
KCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVu
ZGVyYnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBX
ZWJHTFNoYWRlciBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIFdlYkdMVGV4dHVyZSBjcmVhdGVUZXh0dXJlKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2UoR0xlbnVtIG1vZGUpOwotCi0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciBidWZm
ZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVGcmFtZWJ1
ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihX
ZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUg
dGV4dHVyZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhG
dW5jKEdMZW51bSBmdW5jKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
ZGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgZGVwdGhSYW5nZShHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcik7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZGV0YWNo
U2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkaXNhYmxlKEdMZW51bSBjYXApOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUs
IEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdM
c2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBHTGludHB0ciBvZmZzZXQpOwotCi0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGVuYWJsZShHTGVudW0gY2FwKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBlbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBmaW5pc2goKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgZmx1c2goKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0g
YXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIg
cmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0g
YXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlIHRleHR1cmUsIEdMaW50
IGxldmVsKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNl
KEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZ2Vu
ZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCk7Ci0gICAgCi0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdM
UHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJbmZvIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQ
cm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQ
cm9ncmFtIHByb2dyYW0pOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAg
IGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIGFueSBnZXRCdWZmZXJQYXJhbWV0
ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSBnZXRFcnJvcigpOwotCi0gICAgLy8gb2JqZWN0
IGdldEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
Q3VzdG9tXSBhbnkgZ2V0RXh0ZW5zaW9uKERPTVN0cmluZyBuYW1lKTsKLQotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVu
dW0gcG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0
aW9uXSBhbnkgZ2V0UGFyYW1ldGVyKEdMZW51bSBwbmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRQcm9ncmFtUGFyYW1ldGVyKFdl
YkdMUHJvZ3JhbSBwcm9ncmFtLCBHTGVudW0gcG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01T
dHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRTaGFkZXJQYXJhbWV0
ZXIoV2ViR0xTaGFkZXIgc2hhZGVyLCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25d
IERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0KLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyUHJlY2lz
aW9uRm9ybWF0IGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xl
bnVtIHByZWNpc2lvbnR5cGUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1
cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRT
aGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55
IGdldFRleFBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRVbmlmb3Jt
KFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbik7Ci0K
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5n
IG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIGFueSBnZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOwotCi0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQo
R0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGhpbnQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0J1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0NvbnRleHRMb3N0KCk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0g
Y2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNGcmFtZWJ1ZmZl
cihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBHTGJvb2xlYW4gICAgaXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJi
dWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4g
ICAgaXNTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBHTGJvb2xlYW4gICAgaXNUZXh0dXJlKFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgbGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGxp
bmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgcGl4ZWxTdG9yZWkoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9h
dCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEFycmF5QnVmZmVyVmlldyBwaXhlbHMpOwotICAgIAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgcmVuZGVyYnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc2FtcGxlQ292ZXJhZ2UoR0xjbGFt
cGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBzY2lzc29yKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICBzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIgc2hhZGVyLCBET01TdHJpbmcgc3Ry
aW5nKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmMo
R0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVu
dW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrKEdMdWludCBtYXNrKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE1hc2tTZXBhcmF0ZShHTGVudW0gZmFjZSwg
R0x1aW50IG1hc2spOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVu
Y2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZh
Y2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7Ci0KLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICB0ZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
R0xpbnQgcGFyYW0pOwotCi0gICAgLy8gU3VwcG9ydGVkIGZvcm1zOgotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFy
cmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0
YT8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGlt
YWdlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMp
OwotI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/IHZpZGVvKTsKLSNlbmRpZgotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1h
Z2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudD8gY2FudmFzKTsKLSNpZiBkZWZpbmVk
KEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudD8gdmlkZW8pOwotI2VuZGlmCi0KLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFmKFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFpKFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBHTGludCB4KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0
aW9uLCBJbnQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCB1bmlmb3JtMmYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxv
YXQgeCwgR0xmbG9hdCB5KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9u
LCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkIHVuaWZvcm0yaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQg
eCwgR0xpbnQgeSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50
MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgdW5pZm9ybTNmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdM
ZmxvYXQgeSwgR0xmbG9hdCB6KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0
aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHVuaWZvcm0zaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgdW5pZm9ybTRmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBH
TGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2Vi
R0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpKFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1
bmlmb3JtNGl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybU1hdHJpeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFu
IHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkg
YXJyYXkpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSBhcnJheSk7Ci0KLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdM
UHJvZ3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgICAgICAgICB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjFmKEdM
dWludCBpbmR4LCBHTGZsb2F0IHgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0g
dm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIyZihHTHVp
bnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2
YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRy
aWIzZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjNmdihHTHVpbnQg
aW5keCwgRmxvYXQzMkFycmF5IHZhbHVlcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIHZlcnRleEF0dHJpYjRmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQg
eSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IHZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBl
LCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIEdMaW50cHRyIG9mZnNl
dCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmlld3BvcnQoR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworXSBpbnRlcmZh
Y2UgV2ViR0xSZW5kZXJpbmdDb250ZXh0IDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSB7CiB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYzNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1
ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKworI2luY2x1ZGUgIkFOR0xFSW5zdGFu
Y2VkQXJyYXlzLmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJET01XaW5k
b3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVYVEJsZW5kTWluTWF4Lmgi
CisjaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgiCisjaW5jbHVkZSAiRVhUU2hhZGVyVGV4dHVyZUxP
RC5oIgorI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2luY2x1ZGUg
IkVYVHNSR0IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXh0ZW5z
aW9uczNELmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFZpZGVvRWxl
bWVudC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJN
YWluRnJhbWUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9FU0Vs
ZW1lbnRJbmRleFVpbnQuaCIKKyNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCisj
aW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGlu
ZWFyLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIk9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJT
ZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIK
KyNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1
cmVBVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNs
dWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5oIgorI2luY2x1ZGUg
IldlYkdMQ29udGV4dEdyb3VwLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5o
IgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xEZXB0aFRl
eHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xG
cmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNpbmNsdWRlICJX
ZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUg
IldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCIK
KyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlv
bi5oIgorCisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMgPSAx
LjA7Citjb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2OworCituYW1l
c3BhY2UgeworICAgIAorY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciB7CitwdWJsaWM6
CisgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVm
ZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIDogbV9k
cmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCisgICAgICAgICwgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcoZnJhbWVidWZmZXJCaW5kaW5nKQorICAgIHsKKyAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdC
dWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgaWYgKCFt
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIH0KKyAgICAKKyAgICB+U2NvcGVkRHJhd2luZ0J1
ZmZlckJpbmRlcigpCisgICAgeworICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYg
bmVlZGVkCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7CisgICAgV2ViR0xG
cmFtZWJ1ZmZlciogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7Cit9OworCitQbGF0Zm9ybTNET2JqZWN0
IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQoreworICAgIHJldHVybiBvYmplY3Qg
PyBvYmplY3QtPm9iamVjdCgpIDogMDsKK30KKwordm9pZCBjbGlwMUQoR0MzRGludCBzdGFydCwg
R0MzRHNpemVpIHJhbmdlLCBHQzNEc2l6ZWkgc291cmNlUmFuZ2UsIEdDM0RpbnQqIGNsaXBwZWRT
dGFydCwgR0MzRHNpemVpKiBjbGlwcGVkUmFuZ2UpCit7CisgICAgQVNTRVJUKGNsaXBwZWRTdGFy
dCAmJiBjbGlwcGVkUmFuZ2UpOworICAgIGlmIChzdGFydCA8IDApIHsKKyAgICAgICAgcmFuZ2Ug
Kz0gc3RhcnQ7CisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICB9CisgICAgR0MzRGludCBlbmQgPSBz
dGFydCArIHJhbmdlOworICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkKKyAgICAgICAgcmFuZ2Ug
LT0gZW5kIC0gc291cmNlUmFuZ2U7CisgICAgKmNsaXBwZWRTdGFydCA9IHN0YXJ0OworICAgICpj
bGlwcGVkUmFuZ2UgPSByYW5nZTsKK30KKworLy8gUmV0dXJucyBmYWxzZSBpZiBubyBjbGlwcGlu
ZyBpcyBuZWNlc3NhcnksIGkuZS4sIHgsIHksIHdpZHRoLCBoZWlnaHQgc3RheSB0aGUgc2FtZS4K
K2Jvb2wgY2xpcDJEKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsCisgICAgICAgICAgICBHQzNEc2l6ZWkgc291cmNlV2lkdGgsIEdDM0RzaXpl
aSBzb3VyY2VIZWlnaHQsCisgICAgICAgICAgICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGludCog
Y2xpcHBlZFksIEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhlaWdo
dCkKK3sKKyAgICBBU1NFUlQoY2xpcHBlZFggJiYgY2xpcHBlZFkgJiYgY2xpcHBlZFdpZHRoICYm
IGNsaXBwZWRIZWlnaHQpOworICAgIGNsaXAxRCh4LCB3aWR0aCwgc291cmNlV2lkdGgsIGNsaXBw
ZWRYLCBjbGlwcGVkV2lkdGgpOworICAgIGNsaXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhlaWdodCwg
Y2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOworICAgIHJldHVybiAoKmNsaXBwZWRYICE9IHggfHwg
KmNsaXBwZWRZICE9IHkgfHwgKmNsaXBwZWRXaWR0aCAhPSB3aWR0aCB8fCAqY2xpcHBlZEhlaWdo
dCAhPSBoZWlnaHQpOworfQorCitHQzNEaW50IGNsYW1wKEdDM0RpbnQgdmFsdWUsIEdDM0RpbnQg
bWluLCBHQzNEaW50IG1heCkKK3sKKyAgICBpZiAodmFsdWUgPCBtaW4pCisgICAgICAgIHZhbHVl
ID0gbWluOworICAgIGlmICh2YWx1ZSA+IG1heCkKKyAgICAgICAgdmFsdWUgPSBtYXg7CisgICAg
cmV0dXJuIHZhbHVlOworfQorCisvLyBSZXR1cm4gdHJ1ZSBpZiBhIGNoYXJhY3RlciBiZWxvbmdz
IHRvIHRoZSBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbgorLy8gR0xTTCBFUyAxLjAgc3BlYyBz
ZWN0aW9uIDMuMS4KK2Jvb2wgdmFsaWRhdGVDaGFyYWN0ZXIodW5zaWduZWQgY2hhciBjKQorewor
ICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQgYCBAIFwgJyBE
RUwuCisgICAgaWYgKGMgPj0gMzIgJiYgYyA8PSAxMjYKKyAgICAgICAgJiYgYyAhPSAnIicgJiYg
YyAhPSAnJCcgJiYgYyAhPSAnYCcgJiYgYyAhPSAnQCcgJiYgYyAhPSAnXFwnICYmIGMgIT0gJ1wn
JykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gSG9yaXpvbnRhbCB0YWIsIGxpbmUgZmVl
ZCwgdmVydGljYWwgdGFiLCBmb3JtIGZlZWQsIGNhcnJpYWdlIHJldHVybgorICAgIC8vIGFyZSBh
bHNvIHZhbGlkLgorICAgIGlmIChjID49IDkgJiYgYyA8PSAxMykKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGlzUHJlZml4UmVzZXJ2ZWQoY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImdsXyIpIHx8IG5hbWUu
c3RhcnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJfd2ViZ2xfIikpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gU3RyaXBzIGNvbW1l
bnRzIGZyb20gc2hhZGVyIHRleHQuIFRoaXMgYWxsb3dzIG5vbi1BU0NJSSBjaGFyYWN0ZXJzCisv
LyB0byBiZSB1c2VkIGluIGNvbW1lbnRzIHdpdGhvdXQgcG90ZW50aWFsbHkgYnJlYWtpbmcgT3Bl
bkdMCisvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVjdGluZyBjaGFyYWN0ZXJzIG91dHNpZGUg
dGhlIEdMU0wgRVMgc2V0LgorY2xhc3MgU3RyaXBDb21tZW50cyB7CitwdWJsaWM6CisgICAgU3Ry
aXBDb21tZW50cyhjb25zdCBTdHJpbmcmIHN0cikKKyAgICAgICAgOiBtX3BhcnNlU3RhdGUoQmVn
aW5uaW5nT2ZMaW5lKQorICAgICAgICAsIG1fc291cmNlU3RyaW5nKHN0cikKKyAgICAgICAgLCBt
X2xlbmd0aChzdHIubGVuZ3RoKCkpCisgICAgICAgICwgbV9wb3NpdGlvbigwKQorICAgIHsKKyAg
ICAgICAgcGFyc2UoKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHJlc3VsdCgpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBib29sIGhhc01vcmVDaGFyYWN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAobV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwYXJz
ZSgpCisgICAgeworICAgICAgICB3aGlsZSAoaGFzTW9yZUNoYXJhY3RlcnMoKSkgeworICAgICAg
ICAgICAgcHJvY2VzcyhjdXJyZW50KCkpOworICAgICAgICAgICAgLy8gcHJvY2VzcygpIG1pZ2h0
IGFkdmFuY2UgdGhlIHBvc2l0aW9uLgorICAgICAgICAgICAgaWYgKGhhc01vcmVDaGFyYWN0ZXJz
KCkpCisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgcHJvY2VzcyhVQ2hhcik7CisgICAgCisgICAgYm9vbCBwZWVrKFVDaGFyJiBjaGFy
YWN0ZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9wb3NpdGlvbiArIDEgPj0gbV9sZW5n
dGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNoYXJhY3RlciA9IG1fc291
cmNlU3RyaW5nW21fcG9zaXRpb24gKyAxXTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICAgICAg
cmV0dXJuIG1fc291cmNlU3RyaW5nW21fcG9zaXRpb25dOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgKyttX3Bvc2l0aW9uOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzTmV3bGluZShVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0CisgICAgeworICAgICAgICAv
LyBEb24ndCBhdHRlbXB0IHRvIGNhbm9uaWNhbGl6ZSBuZXdsaW5lIHJlbGF0ZWQgY2hhcmFjdGVy
cy4KKyAgICAgICAgcmV0dXJuIChjaGFyYWN0ZXIgPT0gJ1xuJyB8fCBjaGFyYWN0ZXIgPT0gJ1xy
Jyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdChVQ2hhciBjaGFyYWN0ZXIpCisgICAgewor
ICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgfQorICAgIAorICAgIGVu
dW0gUGFyc2VTdGF0ZSB7CisgICAgICAgIC8vIEhhdmUgbm90IHNlZW4gYW4gQVNDSUkgbm9uLXdo
aXRlc3BhY2UgY2hhcmFjdGVyIHlldCBvbgorICAgICAgICAvLyB0aGlzIGxpbmUuIFBvc3NpYmxl
IHRoYXQgd2UgbWlnaHQgc2VlIGEgcHJlcHJvY2Vzc29yCisgICAgICAgIC8vIGRpcmVjdGl2ZS4K
KyAgICAgICAgQmVnaW5uaW5nT2ZMaW5lLAorICAgICAgICAKKyAgICAgICAgLy8gSGF2ZSBzZWVu
IGF0IGxlYXN0IG9uZSBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIKKyAgICAgICAgLy8g
b24gdGhpcyBsaW5lLgorICAgICAgICBNaWRkbGVPZkxpbmUsCisgICAgICAgIAorICAgICAgICAv
LyBIYW5kbGluZyBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFBhc3NlcyB0aHJvdWdoIGFsbAor
ICAgICAgICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIERpc2FibGVz
IGNvbW1lbnQKKyAgICAgICAgLy8gcHJvY2Vzc2luZy4KKyAgICAgICAgSW5QcmVwcm9jZXNzb3JE
aXJlY3RpdmUsCisgICAgICAgIAorICAgICAgICAvLyBIYW5kbGluZyBhIHNpbmdsZS1saW5lIGNv
bW1lbnQuIFRoZSBjb21tZW50IHRleHQgaXMKKyAgICAgICAgLy8gcmVwbGFjZWQgd2l0aCBhIHNp
bmdsZSBzcGFjZS4KKyAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVudCwKKyAgICAgICAgCisgICAg
ICAgIC8vIEhhbmRsaW5nIGEgbXVsdGktbGluZSBjb21tZW50LiBOZXdsaW5lcyBhcmUgcGFzc2Vk
CisgICAgICAgIC8vIHRocm91Z2ggdG8gcHJlc2VydmUgbGluZSBudW1iZXJzLgorICAgICAgICBJ
bk11bHRpTGluZUNvbW1lbnQKKyAgICB9OworICAgIAorICAgIFBhcnNlU3RhdGUgbV9wYXJzZVN0
YXRlOworICAgIFN0cmluZyBtX3NvdXJjZVN0cmluZzsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsK
KyAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uOworICAgIFN0cmluZ0J1aWxkZXIgbV9idWlsZGVyOwor
fTsKKwordm9pZCBTdHJpcENvbW1lbnRzOjpwcm9jZXNzKFVDaGFyIGMpCit7CisgICAgaWYgKGlz
TmV3bGluZShjKSkgeworICAgICAgICAvLyBObyBtYXR0ZXIgd2hhdCBzdGF0ZSB3ZSBhcmUgaW4s
IHBhc3MgdGhyb3VnaCBuZXdsaW5lcworICAgICAgICAvLyBzbyB3ZSBwcmVzZXJ2ZSBsaW5lIG51
bWJlcnMuCisgICAgICAgIGVtaXQoYyk7CisgICAgICAgIAorICAgICAgICBpZiAobV9wYXJzZVN0
YXRlICE9IEluTXVsdGlMaW5lQ29tbWVudCkKKyAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEJl
Z2lubmluZ09mTGluZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgVUNoYXIgdGVtcCA9IDA7CisgICAgc3dpdGNoIChtX3BhcnNlU3RhdGUpIHsKKyAgICBjYXNl
IEJlZ2lubmluZ09mTGluZToKKyAgICAgICAgaWYgKFdURjo6aXNBU0NJSVNwYWNlKGMpKSB7Cisg
ICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChjID09ICcjJykgeworICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0g
SW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7CisgICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRyYW5zaXRpb24gdG8g
bm9ybWFsIHN0YXRlIGFuZCByZS1oYW5kbGUgY2hhcmFjdGVyLgorICAgICAgICBtX3BhcnNlU3Rh
dGUgPSBNaWRkbGVPZkxpbmU7CisgICAgICAgIHByb2Nlc3MoYyk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBjYXNlIE1pZGRsZU9mTGluZToKKyAgICAgICAgaWYgKGMgPT0gJy8nICYm
IHBlZWsodGVtcCkpIHsKKyAgICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgeworICAgICAgICAg
ICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluU2luZ2xlTGluZUNvbW1lbnQ7CisgICAgICAgICAgICAg
ICAgZW1pdCgnICcpOworICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHRl
bXAgPT0gJyonKSB7CisgICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5NdWx0aUxpbmVD
b21tZW50OworICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNvbW1lbnQgc3RhcnQgaW4gY2Fz
ZSB0aGUgdXNlciBoYXMKKyAgICAgICAgICAgICAgICAvLyBhbiB1bmNsb3NlZCBjb21tZW50IGFu
ZCB3ZSB3YW50IHRvIGxhdGVyCisgICAgICAgICAgICAgICAgLy8gc2lnbmFsIGFuIGVycm9yLgor
ICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAgICAgICAgICAgICAgICBlbWl0KCcqJyk7Cisg
ICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBlbWl0KGMpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAg
ICAgLy8gTm8gbWF0dGVyIHdoYXQgdGhlIGNoYXJhY3RlciBpcywganVzdCBwYXNzIGl0CisgICAg
ICAgIC8vIHRocm91Z2guIERvIG5vdCBwYXJzZSBjb21tZW50cyBpbiB0aGlzIHN0YXRlLiBUaGlz
CisgICAgICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gbG9uZyB0ZXJt
LCBidXQgaXQKKyAgICAgICAgLy8gc2hvdWxkIGhhbmRsZSB0aGUgI2Vycm9yIHByZXByb2Nlc3Nv
ciBkaXJlY3RpdmUuCisgICAgICAgIGVtaXQoYyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBjYXNlIEluU2luZ2xlTGluZUNvbW1lbnQ6CisgICAgICAgIC8vIFRoZSBuZXdsaW5lIGNv
ZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUKKyAgICAgICAgLy8gb2Yg
cmVzZXR0aW5nIG91ciBzdGF0ZSB3aGVuIHdlIGdldCBvdXQgb2YgdGhlCisgICAgICAgIC8vIHNp
bmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuCisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEluTXVsdGlMaW5lQ29tbWVudDoKKyAgICAgICAg
aWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9PSAnLycpIHsKKyAgICAgICAgICAg
IGVtaXQoJyonKTsKKyAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAgICAgICAgICAgIG1fcGFyc2VT
dGF0ZSA9IE1pZGRsZU9mTGluZTsKKyAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBTd2FsbG93IGFsbCBvdGhl
ciBjaGFyYWN0ZXJzLiBVbmNsZWFyIHdoZXRoZXIgd2UgbWF5CisgICAgICAgIC8vIHdhbnQgb3Ig
bmVlZCB0byBqdXN0IGVtaXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQorICAgICAgICAv
LyB0byBwcmVzZXJ2ZSBjb2x1bW4gbnVtYmVycyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICAg
ICAgICBicmVhazsKKyAgICB9Cit9Cit9IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKKworY2xhc3Mg
V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrIDogcHVibGljIEdyYXBoaWNzQ29udGV4
dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2so
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY2IpIAorICAgIDogbV9jb250ZXh0KGNiKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0KCkgb3ZlcnJpZGUgCisgICAgeyAKKyAg
ICAgICAgbV9jb250ZXh0LT5mb3JjZUxvc3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OlJlYWxMb3N0Q29udGV4dCk7IAorICAgIH0KKyAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmlu
Z0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6CisgICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogbV9jb250ZXh0OworfTsKKworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0
RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0M0Q6OkVycm9yTWVz
c2FnZUNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjayhXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjYikgCisgICAgOiBtX2NvbnRleHQoY2IpIHsgfQorICAg
IAorICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IEdDM0RpbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9jb250ZXh0LT5tX3N5bnRo
ZXNpemVkRXJyb3JzVG9Db25zb2xlKQorICAgICAgICAgICAgbV9jb250ZXh0LT5wcmludEdMRXJy
b3JUb0NvbnNvbGUobWVzc2FnZSk7CisgICAgfQorICAgIHZpcnR1YWwgfldlYkdMUmVuZGVyaW5n
Q29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKCkgeyB9Citwcml2YXRlOgorICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKK307CisKK3N0ZDo6dW5pcXVlX3B0cjxXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUo
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogYXR0cnMs
IGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMt
PmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICAvLyBUaGUgRnJh
bWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3JlYXRpb24gb2YgYSBuZXcgV2ViR0wgY29udGV4
dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBpbgorICAgIC8vIHBhcnRpY3VsYXIsIGlmIFdl
YkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3IgbW9yZSB0aW1lcyB2aWEgdGhlIEdMX0FSQl9y
b2J1c3RuZXNzIGV4dGVuc2lvbi4KKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5h
bGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpKSkgeworICAgICAgICBj
YW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxzZSwgdHJ1ZSwgIldlYiBwYWdl
IHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbiA9IGZhbHNlOworICAgIERvY3VtZW50JiB0b3BEb2N1bWVudCA9IGRvY3VtZW50LnRv
cERvY3VtZW50KCk7CisgICAgUGFnZSogcGFnZSA9IHRvcERvY3VtZW50LnBhZ2UoKTsKKyAgICBp
ZiAocGFnZSAmJiAhdG9wRG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkgeworICAgICAgICBX
ZWJHTExvYWRQb2xpY3kgcG9saWN5ID0gcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50
KCkud2ViR0xQb2xpY3lGb3JVUkwodG9wRG9jdW1lbnQudXJsKCkpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExPRyhX
ZWJHTCwgIlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJMICglcykgaXMgdG8gYmxvY2sgV2ViR0wuIiwg
dG9wRG9jdW1lbnQudXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChwb2xpY3kgPT0g
V2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExPRyhXZWJHTCwgIldlYkdMIHBv
bGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRlci4iKTsKKyAgICAg
ICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBh
dHRycyA/IGF0dHJzLT5hdHRyaWJ1dGVzKCkgOiBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cygpOworICAgIAorICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICBpZiAo
IWZyYW1lLT5zZXR0aW5ncygpLm9wZW5HTE11bHRpc2FtcGxpbmdFbmFibGVkKCkpCisgICAgICAg
ICAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBhdHRy
aWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNl
cyA9IGZhbHNlOworICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB0cnVlOworICAg
IAorICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKS5mb3JjZVNvZnR3YXJlV2ViR0xSZW5kZXJpbmco
KSkKKyAgICAgICAgYXR0cmlidXRlcy5mb3JjZVNvZnR3YXJlUmVuZGVyZXIgPSB0cnVlOworICAg
IAorICAgIGlmIChwYWdlKQorICAgICAgICBhdHRyaWJ1dGVzLmRldmljZVBpeGVsUmF0aW8gPSBw
YWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIAorICAgIGlmIChpc1BlbmRpbmdQb2xpY3lS
ZXNvbHV0aW9uKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkNyZWF0ZSBhIFdlYkdMIGNvbnRleHQg
dGhhdCBsb29rcyByZWFsLCBidXQgd2lsbCByZXF1aXJlIGEgcG9saWN5IHJlc29sdXRpb24gaWYg
dXNlZC4iKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U+IHJlbmRlcmluZ0NvbnRleHQgPSBudWxscHRyOworICAgICAgICBpZiAodHlwZSA9PSAiZXhw
ZXJpbWVudGFsLXdlYmdsMiIpCisgICAgICAgICAgICByZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp1
bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KG5ldyBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZW5k
ZXJpbmdDb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4obmV3
IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKKyAgICB9CisgICAg
CisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50LnZpZXcoKS0+cm9vdCgpLT5o
b3N0V2luZG93KCk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRvdykpOworICAgIAorICAg
IGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICAg
ICAgY2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2UsIHRydWUsICJDb3Vs
ZCBub3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKyAgICAKKyAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCk7CisgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfZGVi
dWdfbWFya2VyIikpCisgICAgICAgIGV4dGVuc2lvbnMtPnB1c2hHcm91cE1hcmtlckVYVCgiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Iik7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U+IHJlbmRlcmluZ0NvbnRleHQgPSBudWxscHRyOworICAgIGlmICh0
eXBlID09ICJleHBlcmltZW50YWwtd2ViZ2wyIikKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dCA9
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihuZXcgV2ViR0wyUmVuZGVy
aW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQsIGF0dHJpYnV0ZXMpKTsKKyAgICBlbHNlCisgICAg
ICAgIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250
ZXh0PihuZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRl
cykpOworICAgIHJlbmRlcmluZ0NvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIAorICAg
IHJldHVybiByZW5kZXJpbmdDb250ZXh0OworfQorCitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52
YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKKyAgICAsIEFjdGl2ZURPTU9iamVjdCgm
cGFzc2VkQ2FudmFzLT5kb2N1bWVudCgpKQorICAgICwgbV9jb250ZXh0KDApCisgICAgLCBtX2Ry
YXdpbmdCdWZmZXIoMCkKKyAgICAsIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIoKnRo
aXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQp
CisgICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQorICAgICwgbV9yZXN0b3JlVGltZXIoKnRo
aXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXliZVJlc3RvcmVDb250ZXh0KQorICAg
ICwgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlKDApCisgICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQor
ICAgICwgbV9jb250ZXh0TG9zdE1vZGUoU3ludGhldGljTG9zdENvbnRleHQpCisgICAgLCBtX2F0
dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICAsIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUo
dHJ1ZSkKKyAgICAsIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKG1heEdMRXJyb3JzQWxs
b3dlZFRvQ29uc29sZSkKKyAgICAsIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbih0cnVlKQor
ICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQoreworfQorCitXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKEhUTUxDYW52
YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQsR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQorICAgICwgQWN0aXZlRE9NT2JqZWN0
KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAg
ICAsIG1fZHJhd2luZ0J1ZmZlcigwKQorICAgICwgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRU
aW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoQ29udGV4dExv
c3RFdmVudCkKKyAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCisgICAgLCBtX3Jlc3RvcmVU
aW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1heWJlUmVzdG9yZUNvbnRl
eHQpCisgICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoNCkKKyAgICAsIG1fY29udGV4dExvc3Qo
ZmFsc2UpCisgICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkKKyAg
ICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICwgbV9zeW50aGVzaXplZEVycm9yc1Rv
Q29uc29sZSh0cnVlKQorICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4R0xF
cnJvcnNBbGxvd2VkVG9Db25zb2xlKQorICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KGZhbHNlKQorICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQorewor
ICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250ZXh0
R3JvdXA6OmNyZWF0ZSgpOworICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMpOwor
ICAgIAorICAgIG1fbWF4Vmlld3BvcnREaW1zWzBdID0gbV9tYXhWaWV3cG9ydERpbXNbMV0gPSAw
OworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVX
UE9SVF9ESU1TLCBtX21heFZpZXdwb3J0RGltcyk7CisgICAgCisgICAgaWYgKG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgCisgICAgc2V0dXBG
bGFncygpOworICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQoreworICAgIEFTU0VSVCgh
bV9jb250ZXh0TG9zdCk7CisgICAgbV9uZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgbV9tYXJrZWRD
YW52YXNEaXJ0eSA9IGZhbHNlOworICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQgPSAwOworICAgIG1f
cGFja0FsaWdubWVudCA9IDQ7CisgICAgbV91bnBhY2tBbGlnbm1lbnQgPSA0OworICAgIG1fdW5w
YWNrRmxpcFkgPSBmYWxzZTsKKyAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsK
KyAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJS
T1dTRVJfREVGQVVMVF9XRUJHTDsKKyAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOworICAgIG1f
Y3VycmVudFByb2dyYW0gPSAwOworICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKKyAgICBt
X3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAwOworICAgIG1fZGVwdGhNYXNrID0gdHJ1ZTsKKyAgICBt
X3N0ZW5jaWxFbmFibGVkID0gZmFsc2U7CisgICAgbV9zdGVuY2lsTWFzayA9IDB4RkZGRkZGRkY7
CisgICAgbV9zdGVuY2lsTWFza0JhY2sgPSAweEZGRkZGRkZGOworICAgIG1fc3RlbmNpbEZ1bmNS
ZWYgPSAwOworICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gMDsKKyAgICBtX3N0ZW5jaWxGdW5j
TWFzayA9IDB4RkZGRkZGRkY7CisgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gMHhGRkZGRkZG
RjsKKyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOworICAgIG1fbnVtR0xFcnJvcnNUb0NvbnNv
bGVBbGxvd2VkID0gbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlOworICAgIAorICAgIG1fY2xl
YXJDb2xvclswXSA9IG1fY2xlYXJDb2xvclsxXSA9IG1fY2xlYXJDb2xvclsyXSA9IG1fY2xlYXJD
b2xvclszXSA9IDA7CisgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgIG1fY2xlYXJE
ZXB0aCA9IDE7CisgICAgbV9jbGVhclN0ZW5jaWwgPSAwOworICAgIG1fY29sb3JNYXNrWzBdID0g
bV9jb2xvck1hc2tbMV0gPSBtX2NvbG9yTWFza1syXSA9IG1fY29sb3JNYXNrWzNdID0gdHJ1ZTsK
KyAgICAKKyAgICBHQzNEaW50IG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOworICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTLCAmbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAg
bV90ZXh0dXJlVW5pdHMuY2xlYXIoKTsKKyAgICBtX3RleHR1cmVVbml0cy5yZXNpemUobnVtQ29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgCisgICAgR0MzRGludCBudW1WZXJ0ZXhBdHRy
aWJzID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVkVSVEVYX0FUVFJJQlMsICZudW1WZXJ0ZXhBdHRyaWJzKTsKKyAgICBtX21heFZlcnRleEF0
dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJzOworICAgIAorICAgIG1fbWF4VGV4dHVyZVNpemUgPSAw
OworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhU
VVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKTsKKyAgICBtX21heFRleHR1cmVMZXZlbCA9IFdl
YkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVsQ291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0
dXJlU2l6ZSk7CisgICAgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUgPSAwOworICAgIG1fY29udGV4
dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJ
WkUsICZtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxl
dmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZSwgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUpOworICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6
ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1JFTkRFUkJVRkZFUl9TSVpFLCAmbV9tYXhSZW5kZXJidWZmZXJTaXplKTsKKyAgICAKKyAgICAv
LyBUaGVzZSB0d28gdmFsdWVzIGZyb20gRVhUX2RyYXdfYnVmZmVycyBhcmUgbGF6aWx5IHF1ZXJp
ZWQuCisgICAgbV9tYXhEcmF3QnVmZmVycyA9IDA7CisgICAgbV9tYXhDb2xvckF0dGFjaG1lbnRz
ID0gMDsKKyAgICAKKyAgICBtX2JhY2tEcmF3QnVmZmVyID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJB
Q0s7CisgICAgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCA9IGZhbHNlOwor
ICAgIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAKKyAgICBtX2RlZmF1bHRW
ZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZSh0aGlz
LCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9UeXBlRGVmYXVsdCk7CisgICAgYWRkQ29u
dGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKSk7CisgICAgbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CisgICAgCisg
ICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9tYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICAK
KyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNyZWF0ZUZhbGxiYWNrQmxh
Y2tUZXh0dXJlczF4MSgpOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICBp
bml0VmVydGV4QXR0cmliMCgpOworICAgIAorICAgIEludFNpemUgY2FudmFzU2l6ZSA9IGNsYW1w
ZWRDYW52YXNTaXplKCk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5yZXNldChjYW52YXNTaXplKTsKKyAgICAKKyAgICBtX2NvbnRleHQtPnJlc2hh
cGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRl
eHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQo
KSk7CisgICAgbV9jb250ZXh0LT5zY2lzc29yKDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2Fu
dmFzU2l6ZS5oZWlnaHQoKSk7CisgICAgCisgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENh
bGxiYWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNr
Pih0aGlzKSk7CisgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhzdGQ6Om1h
a2VfdW5pcXVlPFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrPih0aGlz
KSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2V0dXBGbGFncygpCit7
CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52
YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0Nv
bnNvbGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwor
ICAgIAorICAgIG1faXNHTEVTMkNvbXBsaWFudCA9IG1fY29udGV4dC0+aXNHTEVTMkNvbXBsaWFu
dCgpOworICAgIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcyA9IG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3N0cmljdF9hdHRy
aWJzIik7CisgICAgbV9pc1Jlc291cmNlU2FmZSA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUiKTsKKyAgICBpZiAobV9pc0dM
RVMyQ29tcGxpYW50KSB7CisgICAgICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfbnBvdCIpOworICAg
ICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmlzRW5hYmxlZCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIik7CisgICAg
ICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+aXNFbmFibGVkKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyAgICB9CisgICAg
bV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
aXNFbmFibGVkKCJHTF9FWFRfcm9idXN0bmVzcyIpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmFsbG93UHJpdmlsZWdlZEV4dGVuc2lvbnMoKSBjb25zdAoreworICAgIGlm
IChQYWdlKiBwYWdlID0gY2FudmFzKCktPmRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICByZXR1
cm4gcGFnZS0+c2V0dGluZ3MoKS5wcml2aWxlZ2VkV2ViR0xFeHRlbnNpb25zRW5hYmxlZCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
ZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYgKCFt
X2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQorICAgICAgICBtX2Nv
bXByZXNzZWRUZXh0dXJlRm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKK30KKworV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6fldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoKQoreworICAgIC8vIFJl
bW92ZSBhbGwgcmVmZXJlbmNlcyB0byBXZWJHTE9iamVjdHMgc28gaWYgdGhleSBhcmUgdGhlIGxh
c3QgcmVmZXJlbmNlCisgICAgLy8gdGhleSB3aWxsIGJlIGZyZWVkIGJlZm9yZSB0aGUgbGFzdCBj
b250ZXh0IGlzIHJlbW92ZWQgZnJvbSB0aGUgY29udGV4dCBncm91cC4KKyAgICBtX2JvdW5kQXJy
YXlCdWZmZXIgPSBudWxscHRyOworICAgIG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0ID0gbnVs
bHB0cjsKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBudWxscHRyOworICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9jdXJyZW50UHJvZ3JhbSA9IG51bGxw
dHI7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOworICAgIG1fcmVuZGVyYnVm
ZmVyQmluZGluZyA9IG51bGxwdHI7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkgeworICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50
ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4
dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgbV9ibGFja1Rl
eHR1cmUyRCA9IG51bGxwdHI7CisgICAgbV9ibGFja1RleHR1cmVDdWJlTWFwID0gbnVsbHB0cjsK
KyAgICAKKyAgICBpZiAoIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgeworICAgICAgICBk
ZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisgICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRl
eHQzRCgpOworICAgICAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlQ29udGV4dCh0aGlzKTsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVzdHJveUdyYXBoaWNz
Q29udGV4dDNEKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgLy8gVGhlIGRyYXdpbmcgYnVmZmVyIGhvbGRzIGEgY29u
dGV4dCByZWZlcmVuY2UuIEl0IG11c3QgYWxzbyBiZSBkZXN0cm95ZWQKKyAgICAvLyBpbiBvcmRl
ciBmb3IgdGhlIGNvbnRleHQgdG8gYmUgcmVsZWFzZWQuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLmNsZWFyKCk7CisgICAgCisgICAgaWYgKG1fY29u
dGV4dCkgeworICAgICAgICBtX2NvbnRleHQtPnNldENvbnRleHRMb3N0Q2FsbGJhY2sobnVsbHB0
cik7CisgICAgICAgIG1fY29udGV4dC0+c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2sobnVsbHB0cik7
CisgICAgICAgIG1fY29udGV4dC5jbGVhcigpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjptYXJrQ29udGV4dENoYW5nZWQoKQoreworICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+bWFy
a0NvbnRleHRDaGFuZ2VkKCk7CisgICAgCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5tYXJrQ29udGVudHNDaGFuZ2VkKCk7CisgICAgCisgICAgbV9s
YXllckNsZWFyZWQgPSBmYWxzZTsKKyAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygp
LT5yZW5kZXJCb3goKTsKKyAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiBy
ZW5kZXJCb3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgeworICAgICAgICBtX21hcmtl
ZENhbnZhc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2Uo
KTsKKyAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKKyAgICAgICAg
ICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICAgICAgY2FudmFzKCktPmRp
ZERyYXcoRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpj
bGVhcklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFt
X2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpIHx8IG1fbGF5ZXJDbGVhcmVkCisgICAgICAgIHx8
IG1fYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgfHwgKG1hc2sgJiYgbV9mcmFtZWJ1
ZmZlckJpbmRpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUmVmUHRyPFdl
YkdMQ29udGV4dEF0dHJpYnV0ZXM+IGNvbnRleHRBdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJp
YnV0ZXMoKTsKKyAgICAKKyAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21i
aW5lIHRoZSBjbGVhciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCisgICAgYm9v
bCBjb21iaW5lZENsZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKKyAgICAKKyAgICBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAg
aWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBd
ID8gbV9jbGVhckNvbG9yWzBdIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y29sb3JNYXNrWzFdID8gbV9jbGVhckNvbG9yWzFdIDogMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY29sb3JNYXNrWzJdID8gbV9jbGVhckNvbG9yWzJdIDogMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzNdID8gbV9jbGVhckNvbG9yWzNdIDog
MCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAw
KTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAg
ICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZF
Ul9CSVQ7CisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzLT5kZXB0aCgpKSB7CisgICAgICAgIGlm
ICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0aE1hc2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQorICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRl
cHRoKDEuMGYpOworICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0JVRkZFUl9CSVQ7CisgICAgICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKHRydWUpOworICAgIH0K
KyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPnN0ZW5jaWwoKSkgeworICAgICAgICBpZiAoY29t
YmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9C
SVQpKQorICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwg
JiBtX3N0ZW5jaWxNYXNrKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5j
bGVhclN0ZW5jaWwoMCk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CVUZGRVJfQklUOworICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJh
dGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCAweEZGRkZGRkZGKTsKKyAgICB9CisgICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVm
ZmVycyhjbGVhck1hc2spOworICAgIGVsc2UgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFy
TWFzayk7CisgICAgfQorICAgIAorICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKKyAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVi
dWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgbV9sYXllckNsZWFyZWQgPSB0cnVlOworICAgIAor
ICAgIHJldHVybiBjb21iaW5lZENsZWFyOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQoreworICAgIC8vIFJlc3RvcmUgdGhlIHN0
YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgorICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQorICAg
ICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsK
KyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNvbG9yWzBdLCBtX2NsZWFyQ29sb3Jb
MV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJDb2xvclsyXSwgbV9jbGVhckNv
bG9yWzNdKTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhtX2NvbG9yTWFza1swXSwgbV9jb2xv
ck1hc2tbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0sIG1fY29s
b3JNYXNrWzNdKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgobV9jbGVhckRlcHRoKTsKKyAg
ICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCk7CisgICAgbV9jb250ZXh0
LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgbV9zdGVuY2ls
TWFzayk7CisgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0aE1hc2spOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Nv
bnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChj
YW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICAgICBjYW52YXMoKS0+Y2xlYXJQ
cmVzZW50YXRpb25Db3B5KCk7CisgICAgCisgICAgLy8gVW50aWwgdGhlIGNhbnZhcyBpcyB3cml0
dGVuIHRvIGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhlIGNsZWFyIHRoYXQKKyAgICAvLyBoYXBwZW5l
ZCBhZnRlciBpdCB3YXMgY29tcG9zaXRlZCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgY29tcG9z
aXRvci4KKyAgICBpZiAobV9jb250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAmJiAhbV9hdHRyaWJ1
dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPnBhaW50Q29t
cG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhjYW52YXMoKS0+YnVmZmVyKCkpOworICAgICAgICAKKyAg
ICAgICAgY2FudmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7CisgICAgfSBlbHNlCisgICAg
ICAgIGNhbnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOworICAgIAorICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNs
ZWFyZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjYW52YXMoKS0+Y2xlYXJDb3BpZWRJ
bWFnZSgpOworICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAg
IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZl
cigpLCBtX2RyYXdpbmdCdWZmZXIuZ2V0KCkpOworICAgIAorICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBv
YmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfQorfQorCitQYXNzUmVm
UHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsK
KyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBtX2NvbnRleHQtPnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgCisgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcp
CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
VGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
IGxldmVsIHdlIGRvbid0CisgICAgLy8ga25vdyBpZiB0aGUgdW5kZXJseWluZyBGQk8gdXNlcyB0
ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgorICAgIEdDM0RpbnQgbWF4U2l6ZSA9IHN0ZDo6bWlu
KG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7CisgICAgLy8gTGltaXQg
ZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkgZXhoYXVzdGlvbi4KKyAg
ICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OworICAgIG1heFNpemUgPSBzdGQ6Om1p
bihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7CisgICAgR0MzRGludCBtYXhXaWR0aCA9IHN0ZDo6
bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKKyAgICBHQzNEaW50IG1heEhlaWdo
dCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFdKTsKKyAgICB3aWR0aCA9
IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7CisgICAgaGVpZ2h0ID0gY2xhbXAoaGVpZ2h0LCAx
LCBtYXhIZWlnaHQpOworICAgIAorICAgIGlmIChtX25lZWRzVXBkYXRlKSB7CisgICAgICAgIFJl
bmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOworICAgICAgICBpZiAo
cmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAg
ICAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKKyAgICAg
ICAgbV9uZWVkc1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBkb24ndCBo
YXZlIHRvIG1hcmsgdGhlIGNhbnZhcyBhcyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQg
aW1hZ2UgYnVmZmVyIHdpbGwgYWxzbyBzdGFydCBvZmYKKyAgICAvLyBjbGVhciAoYW5kIHRoaXMg
bWF0Y2hlcyB3aGF0IHJlc2hhcGUgd2lsbCBkbykuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikg
eworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgsIGhlaWdodCkp
OworICAgICAgICByZXN0b3JlU3RhdGVBZnRlckNsZWFyKCk7CisgICAgfSBlbHNlCisgICAgICAg
IG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAKKyAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8o
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQo
KSkpOworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKSk7
CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyht
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworfQorCitpbnQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsK
KyAgICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgp
LndpZHRoKCk7Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVm
ZmVySGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7CisgICAgCisgICAgcmV0dXJu
IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKK30KKwor
dW5zaWduZWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2l6ZUluQnl0ZXMoR0MzRGVudW0g
dHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpCWVRFOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1
Ynl0ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgICAgIHJldHVy
biBzaXplb2YoR0MzRHNob3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9TSE9SVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpJTlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4g
c2l6ZW9mKEdDM0R1aW50KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihHQzNEZmxvYXQpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwID49IG1fdGV4dHVyZVVuaXRzLnNpemUoKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIs
ICJ0ZXh0dXJlIHVuaXQgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTA7CisgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOworICAgIAorICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0QWN0aXZl
VGV4dHVyZVVuaXQodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRl
ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hT
aGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwg
c2hhZGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVy
KHNoYWRlcikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNoU2hhZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFs
cmVhZHkgaGFzIHNoYWRlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4
dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRl
cikpOworICAgIHNoYWRlci0+b25BdHRhY2hlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdD
M0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImJpbmRBdHRy
aWJMb2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVN0
cmluZygiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQXR0cmliTG9jYXRpb24i
LCAicmVzZXJ2ZWQgcHJlZml4Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlu
ZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJp
bmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRl
eHQtPmJpbmRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1l
KTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja09iamVjdFRvQmVC
b3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QsIGJvb2wm
IGRlbGV0ZWQpCit7CisgICAgZGVsZXRlZCA9IGZhbHNlOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0KSB7Cisg
ICAgICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZWQgPSAh
b2JqZWN0LT5vYmplY3QoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdM
QnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJp
bmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRl
bGV0ZWQpCisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmdl
dFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJp
bmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB0YXJnZXRz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBidWZm
ZXI7CisgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUikKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRFbGVtZW50
QXJyYXlCdWZmZXIoYnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRCdWZmZXIiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVyKSk7CisgICAgaWYgKGJ1ZmZl
cikKKyAgICAgICAgYnVmZmVyLT5zZXRUYXJnZXQodGFyZ2V0KTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJH
TEZyYW1lYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91
bmQoImJpbmRGcmFtZWJ1ZmZlciIsIGJ1ZmZlciwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgYnVmZmVyID0gMDsKKyAgICBpZiAodGFyZ2V0ICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEZyYW1lYnVmZmVyIiwg
ImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgPSBidWZmZXI7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcob2JqZWN0T3JaZXJvKG1fZnJh
bWVidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAm
JiBtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gSW5zdGVhZCBvZiBiaW5kaW5nIGZiIDAs
IGJpbmQgdGhlIGRyYXdpbmcgYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQo
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0
LCBvYmplY3RPclplcm8oYnVmZmVyKSk7CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgYnVmZmVy
LT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAo
IWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVmZmVyLCBk
ZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAgICByZW5k
ZXJCdWZmZXIgPSAwOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJlbmRlckJ1
ZmZlcjsKKyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmplY3RPclpl
cm8ocmVuZGVyQnVmZmVyKSk7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICAgICAgcmVuZGVy
QnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRl
eHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
Ym9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRUZXh0dXJl
IiwgdGV4dHVyZSwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkK
KyAgICAgICAgdGV4dHVyZSA9IDA7CisgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0VGFy
Z2V0KCkgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRU
ZXh0dXJlIiwgInRleHR1cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHQzNEaW50IG1heExldmVsID0gMDsKKyAg
ICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7CisgICAgICAg
IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcgPSB0
ZXh0dXJlOworICAgICAgICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOworICAgICAgICAK
KyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKKyAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclpl
cm8odGV4dHVyZSkpOworICAgICAgICAKKyAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgeworICAgICAgICBtX3RleHR1cmVVbml0c1tt
X2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSB0ZXh0dXJlOworICAg
ICAgICBtYXhMZXZlbCA9IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiYmluZFRleHR1cmUiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgb2JqZWN0T3JaZXJvKHRleHR1
cmUpKTsKKyAgICBpZiAodGV4dHVyZSkKKyAgICAgICAgdGV4dHVyZS0+c2V0VGFyZ2V0KHRhcmdl
dCwgbWF4TGV2ZWwpOworICAgIAorICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBh
dXRvbWF0aWNhbGx5IHNldCB0aGUgVEVYVFVSRV9XUkFQX1IKKyAgICAvLyByZXBlYXQgbW9kZSB0
byBDTEFNUF9UT19FREdFIGZvciBjdWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKKyAg
ICAvLyBFUyAyLjAgZG9lc24ndCBleHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lm
aWNhdGlvbikgYW5kCisgICAgLy8gb3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29u
dHJvbCBvdmVyIHRoZSBzZWFtcyBpbiB0aGlzCisgICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBp
dCBhcHBlYXJzIHRoYXQgc3VwcG9ydGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAorICAgIC8vIHBs
YXRmb3JtcyBpcyBmYWlybHkgaW52b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0
ZXh0dXJlIElECisgICAgLy8gaW4gYWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkg
Y29tcGxhaW50cywgc28gdGhlIGxvZ2ljIGhhcworICAgIC8vIGJlZW4gcmVtb3ZlZC4KK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZENvbG9yKEdDM0RmbG9hdCByZWQs
IEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSkKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9j
b250ZXh0LT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0
aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRl
eHQtPmJsZW5kRXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1v
ZGVBbHBoYSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVu
ZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZUFscGhhKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7
Cit9CisKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEZ1bmMoR0MzRGVu
dW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5kRnVuYyIsIHNmYWN0
b3IsIGRmYWN0b3IpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMo
c2ZhY3RvciwgZGZhY3Rvcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0Rl
bnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKK3sKKyAgICAvLyBOb3RlOiBBbHBoYSBk
b2VzIG5vdCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBhcyBSR0IuCisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1
bmMiLCBzcmNSR0IsIGRzdFJHQikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJs
ZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1
ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZm
ZXJEYXRhIiwgInNpemUgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFz
aXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkg
eworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShzdGF0aWNfY2FzdDxH
QzNEc2l6ZWlwdHI+KHNpemUpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVm
ZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
bV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX2NvbnRl
eHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpLCB1
c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRo
ZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgorICAg
ICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFy
cmF5QnVmZmVyKiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKKyAgICBpZiAoIWJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZGF0YSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEi
LCAibm8gZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghaXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5h
c3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxp
ZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1f
Y29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0
YSgpLCB1c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBU
ZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2Vz
LgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJn
ZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxp
ZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7Cisg
ICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJi
dWZmZXJEYXRhIiwgIm5vIGRhdGEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
IWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAo
IWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgImludmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3Qo
KTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3RoKCks
IGRhdGEtPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBm
dW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEg
aXQgdGhpbmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0
YSgpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJT
dWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRh
dGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVm
ZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRh
IiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIGlmICghYnVm
ZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJT
dWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
IWRhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9m
Qm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVy
U3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJn
ZXQsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwg
ZGF0YS0+ZGF0YSgpKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyU3ViRGF0YSBmdW5jdGlvbiBmYWls
ZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0
IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAgIH0K
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVm
ZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRhcmdl
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIs
ICJvZmZzZXQgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFkYXRhKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0Fj
Y2Vzc2VzKCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEo
c3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YSkpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVy
U3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0
aWNFcnJvckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJh
c2VBZGRyZXNzKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxl
ZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQg
ZG9lcy4KKyAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQor
fQorCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQ
UE9SVEVEOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7CisgICAgY29uc3QgY2hhciogcmVhc29uID0g
ImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIEdDM0RlbnVtIHJlc3VsdCA9IG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5jaGVja1N0YXR1cygmcmVhc29uKTsKKyAgICBpZiAocmVzdWx0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICBwcmludEdM
V2FybmluZ1RvQ29uc29sZSgiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIsIHJlYXNvbik7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJlc3VsdCA9IG1fY29udGV4dC0+Y2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChtYXNrICYgfihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
QlVGRkVSX0JJVCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJjbGVhciIsICJpbnZhbGlkIG1hc2siKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21w
bGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZy
ZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNsZWFyIiwgcmVhc29uKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoIWNsZWFySWZDb21wb3NpdGVkKG1hc2spKQorICAgICAg
ICBtX2NvbnRleHQtPmNsZWFyKG1hc2spOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIs
IEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MzRGZsb2F0IGEpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzdGQ6OmlzbmFu
KHIpKQorICAgICAgICByID0gMDsKKyAgICBpZiAoc3RkOjppc25hbihnKSkKKyAgICAgICAgZyA9
IDA7CisgICAgaWYgKHN0ZDo6aXNuYW4oYikpCisgICAgICAgIGIgPSAwOworICAgIGlmIChzdGQ6
OmlzbmFuKGEpKQorICAgICAgICBhID0gMTsKKyAgICBtX2NsZWFyQ29sb3JbMF0gPSByOworICAg
IG1fY2xlYXJDb2xvclsxXSA9IGc7CisgICAgbV9jbGVhckNvbG9yWzJdID0gYjsKKyAgICBtX2Ns
ZWFyQ29sb3JbM10gPSBhOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhckRlcHRoKEdDM0RmbG9h
dCBkZXB0aCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9jbGVhckRlcHRoID0gZGVwdGg7CisgICAgbV9jb250ZXh0LT5jbGVhckRl
cHRoKGRlcHRoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhclN0
ZW5jaWwoR0MzRGludCBzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IHM7CisgICAgbV9jb250ZXh0LT5j
bGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29s
b3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJs
dWUsIEdDM0Rib29sZWFuIGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbG9yTWFza1swXSA9IHJlZDsKKyAgICBtX2Nv
bG9yTWFza1sxXSA9IGdyZWVuOworICAgIG1fY29sb3JNYXNrWzJdID0gYmx1ZTsKKyAgICBtX2Nv
bG9yTWFza1szXSA9IGFscGhhOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21w
aWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiY29tcGlsZVNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIob2JqZWN0T3JaZXJvKHNoYWRlcikp
OworICAgIEdDM0RpbnQgdmFsdWU7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RP
clplcm8oc2hhZGVyKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTLCAmdmFsdWUp
OworICAgIHNoYWRlci0+c2V0VmFsaWQodmFsdWUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2
YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVs
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4
Rm9ybWF0KGludGVybmFsZm9ybWF0KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAiaW52
YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChi
b3JkZXIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJib3JkZXIgbm90IDAiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVu
c2lvbnMoImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZUNv
bXByZXNzZWRUZXhGdW5jRGF0YSgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0
LCBpbnRlcm5hbGZvcm1hdCwgZGF0YSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvbXByZXNzZWRUZXhJbWFn
ZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkgeworICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xU
ZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleElt
YWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9yZGVyLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VB
ZGRyZXNzKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9y
TGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBjb21wcmVzc2VkVGV4SW1hZ2UyRCBmdW5jdGlvbiBm
YWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgZm9y
IHRoaXMgbGV2ZWwuCisgICAgICAgIHRleC0+bWFya0ludmFsaWQodGFyZ2V0LCBsZXZlbCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKTsKKyAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJy
YXlCdWZmZXJWaWV3KiBkYXRhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoZm9ybWF0KSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmco
ImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChmb3JtYXQgIT0gdGV4LT5nZXRJbnRlcm5h
bEZvcm1hdCh0YXJnZXQsIGxldmVsKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2Uy
RCIsICJmb3JtYXQgZG9lcyBub3QgbWF0Y2ggdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVu
c2lvbnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgZ3JhcGhpY3NDb250ZXh0M0QoKS0+Y29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRhdGEtPmJ5dGVM
ZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7CisgICAgdGV4LT5zZXRDb21wcmVzc2VkKCk7
Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTZXR0YWJsZVRl
eEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAg
ICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0c0J5Rm9ybWF0KGZvcm1hdCkgJiAo
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CVUZGRVJfQklUKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBjYW4g
bm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0byIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVu
Y1BhcmFtZXRlcnMoImNvcHlUZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3Jt
YXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRl
cm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZh
bGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAg
ICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1h
dENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFt
ZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1l
YnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjpp
c05QT1Qod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAg
bm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBjaGFy
KiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250
ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiwgImNvcHlUZXhJbWFnZTJEIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAg
ICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQo
KSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJC
aW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcu
Z2V0KCkpOworICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKKyAgICAgICAgR0Mz
RHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKKyAgICAgICAgaWYgKGNsaXAyRCh4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRG
cmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwg
JmNsaXBwZWRIZWlnaHQpKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNv
dXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJv
cmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRl
cm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxp
Z25tZW50KTsKKyAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWln
aHQgPiAwKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBjbGlwcGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBl
ZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIH0KKyAgICAvLyBG
SVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVs
b3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgorICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29weVRl
eFN1YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdM
VGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleFN1YkltYWdlMkQi
LCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgaWYg
KCF2YWxpZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkgfHwg
IXZhbGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAg
ICAgcmV0dXJuOworICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2Us
IGNoZWNrIGlmIG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0
aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIs
ICJiYWQgZGltZW5zaW9ucyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh4b2Zm
c2V0ICsgd2lkdGggPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBo
ZWlnaHQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJ
bWFnZTJEIiwgInJlY3RhbmdsZSBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQo
dGFyZ2V0LCBsZXZlbCk7CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5
VGV4U3ViSW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5h
bGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNv
cHlUZXhTdWJJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVi
dWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3Vy
Y2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFn
ZTJEIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAgICAgIFNjb3BlZERyYXdp
bmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAg
IH0gZWxzZSB7CisgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOworICAgICAgICBH
QzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OworICAgICAgICBpZiAoY2xpcDJE
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3Vu
ZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRo
LCAmY2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleC0+
Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICBHQzNEZW51bSB0
eXBlID0gdGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPHVuc2lnbmVkIGNoYXJbXT4gemVybzsKKyAgICAgICAgICAgIGlmICh3aWR0aCAmJiBo
ZWlnaHQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplOworICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3Jt
YXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikg
eworICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhT
dWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91
bmlxdWU8dW5zaWduZWQgY2hhcltdPihzaXplKTsKKyAgICAgICAgICAgICAgICBpZiAoIXplcm8p
IHsKKyAgICAgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7CisgICAg
ICAgICAgICBpZiAoY2xpcHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgeworICAg
ICAgICAgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1
ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgICAg
IG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNs
aXBwZWRYIC0geCwgeW9mZnNldCArIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRo
LCBjbGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5n
ZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgbV9jb250ZXh0
LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworUGFzc1JlZlB0cjxXZWJH
TEJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG8gPSBXZWJHTEJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwor
ICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1Jl
ZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJH
TEZyYW1lYnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkQ29udGV4dE9iamVjdChvLmdldCgp
KTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJH
TFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRP
YmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xQcm9n
cmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBvID0gV2ViR0xQcm9ncmFtOjpjcmVhdGUodGhpcyk7Cisg
ICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVm
UHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVS
ZW5kZXJidWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdl
YkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0
KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAodHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRlciIsICJpbnZhbGlkIHNoYWRl
ciB0eXBlIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBSZWZQ
dHI8V2ViR0xTaGFkZXI+IG8gPSBXZWJHTFNoYWRlcjo6Y3JlYXRlKHRoaXMsIHR5cGUpOworICAg
IGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRl
eHQtPmN1bGxGYWNlKG1vZGUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVs
ZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG9iamVjdC0+b2JqZWN0KCkpIHsKKyAgICAg
ICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIGNvbnRleHQgaGVyZSBiZWNhdXNlIHdlIHdhbnQKKyAg
ICAgICAgLy8gdGhpbmdzIGluIHRoaXMgY29udGV4dCB1bmJvdW5kLgorICAgICAgICBvYmplY3Qt
PmRlbGV0ZU9iamVjdChncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlQnVmZmVyKFdl
YkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCFkZWxldGVPYmplY3QoYnVmZmVyKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChtX2JvdW5kQXJyYXlCdWZmZXIgPT0gYnVmZmVyKQorICAg
ICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOworICAgIAorICAgIG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+dW5iaW5kQnVmZmVyKGJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZm
ZXIpCit7CisgICAgaWYgKCFkZWxldGVPYmplY3QoZnJhbWVidWZmZXIpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKGZyYW1lYnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CisgICAg
ICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikgeworICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmco
MCk7CisgICAgICAgICAgICAvLyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8g
YmluZCBiYWNrIHRvIGludGVybmFsIGZiby4KKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
YmluZCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgfQorfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtKQoreworICAgIGRlbGV0ZU9iamVjdChwcm9ncmFtKTsKKyAgICAvLyBXZSBkb24n
dCByZXNldCBtX2N1cnJlbnRQcm9ncmFtIHRvIDAgaGVyZSBiZWNhdXNlIHRoZSBkZWxldGlvbiBv
ZiB0aGUKKyAgICAvLyBjdXJyZW50IHByb2dyYW0gaXMgZGVsYXllZC4KK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZm
ZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChyZW5kZXJidWZmZXIp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmcpCisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7CisgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3Zl
QXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFk
ZXIpCit7CisgICAgZGVsZXRlT2JqZWN0KHNoYWRlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6ZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCit7Cisg
ICAgaWYgKCFkZWxldGVPYmplY3QodGV4dHVyZSkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmICh0ZXh0dXJlID09IG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcpCisgICAg
ICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsKKyAg
ICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5k
aW5nKQorICAgICAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5n
ID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAg
ICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVm
ZmVyKHRleHR1cmUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlcHRo
RnVuYyhHQzNEZW51bSBmdW5jKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmRlcHRoRnVuYyhmdW5jKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxh
ZykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgbV9kZXB0aE1hc2sgPSBmbGFnOworICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKGZsYWcp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlcHRoUmFuZ2UoR0MzRGZs
b2F0IHpOZWFyLCBHQzNEZmxvYXQgekZhcikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHpOZWFyID4gekZhcikgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJkZXB0aFJhbmdlIiwgInpOZWFyID4gekZhciIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
V2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVj
dCgiZGV0YWNoU2hhZGVyIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghcHJv
Z3JhbS0+ZGV0YWNoU2hhZGVyKHNoYWRlcikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGV0YWNoU2hhZGVyIiwgInNo
YWRlciBub3QgYXR0YWNoZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRl
eHQtPmRldGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFk
ZXIpKTsKKyAgICBzaGFkZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzYWJsZShHQzNEZW51bSBjYXApCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5
KCJkaXNhYmxlIiwgY2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjYXAgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgeworICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0g
ZmFsc2U7CisgICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKKyAg
ICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3Nj
aXNzb3JFbmFibGVkKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0
YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3Rh
dGUoaW5kZXgpOworICAgIHN0YXRlLmVuYWJsZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoaW5k
ZXggPiAwIHx8IGlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQoreworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxl
bWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJy
YXlCdWZmZXIoKTsKKyAgICAKKyAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChvZmZzZXQgPCAwKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVCkgeworICAgICAgICAvLyBGb3IgYW4gdW5zaWduZWQgYXJyYXksIG9mZnNldCBtdXN0IGJl
IGRpdmlzaWJsZSBieSA0IGZvciBhbGlnbm1lbnQgcmVhc29ucy4KKyAgICAgICAgaWYgKG9mZnNl
dCAlIDQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBN
YWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIG9mZnNldCAvPSA0OworICAg
ICAgICAKKyAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVM
ZW5ndGgoKSAvIDQ7CisgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNl
dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUKSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNp
Z25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdu
bWVudCByZWFzb25zLgorICAgICAgICBpZiAob2Zmc2V0ICUgMikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9m
ZnNldC4KKyAgICAgICAgb2Zmc2V0IC89IDI7CisgICAgICAgIAorICAgICAgICBHQzNEc2l6ZWlw
dHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gMjsKKyAgICAgICAgaWYg
KG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSkgeworICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpOworICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNl
cnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKK3sK
KyAgICAvLyBQZXJmb3JtcyBjb25zZXJ2YXRpdmUgdmFsaWRhdGlvbiBieSBjYWNoaW5nIGEgbWF4
aW11bSBpbmRleCBvZgorICAgIC8vIHRoZSBnaXZlbiB0eXBlIHBlciBlbGVtZW50IGFycmF5IGJ1
ZmZlci4gSWYgYWxsIG9mIHRoZSBib3VuZAorICAgIC8vIGFycmF5IGJ1ZmZlcnMgaGF2ZSBlbm91
Z2ggZWxlbWVudHMgdG8gc2F0aXNmeSB0aGF0IG1heGltdW0KKyAgICAvLyBpbmRleCwgc2tpcHMg
dGhlIGV4cGVuc2l2ZSBwZXItZHJhdy1jYWxsIGl0ZXJhdGlvbiBpbgorICAgIC8vIHZhbGlkYXRl
SW5kZXhBcnJheVByZWNpc2UuCisgICAgCisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50
QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1
ZmZlcigpOworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgR0MzRHNpemVpcHRyIG51bUVsZW1lbnRzID0gZWxlbWVudEFy
cmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CisgICAgLy8gVGhlIGNhc2UgY291bnQ9PTAgaXMgYWxy
ZWFkeSBkZWFsdCB3aXRoIGluIGRyYXdFbGVtZW50cyBiZWZvcmUgdmFsaWRhdGVJbmRleEFycmF5
Q29uc2VydmF0aXZlLgorICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBjb25zdCBBcnJheUJ1ZmZlciogYnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVyLT5l
bGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICBBU1NFUlQoYnVmZmVyKTsKKyAgICAKKyAgICBpbnQg
bWF4SW5kZXggPSBlbGVtZW50QXJyYXlCdWZmZXItPmdldENhY2hlZE1heEluZGV4KHR5cGUpOwor
ICAgIGlmIChtYXhJbmRleCA8IDApIHsKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBp
bmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5kZXguCisg
ICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFOiB7CisgICAgICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNf
Y2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXItPmRhdGEoKSk7CisgICAgICAgICAgICBmb3Ig
KEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCisgICAgICAgICAgICAg
ICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVDogeworICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6
ZW9mKEdDM0R1c2hvcnQpOworICAgICAgICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZmZXItPmRhdGEoKSk7CisgICAgICAgICAgICBm
b3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCisgICAgICAgICAg
ICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ld
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9JTlQ6IHsKKyAgICAgICAgICAgIGlmICghbV9vZXNFbGVtZW50
SW5kZXhVaW50KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG51
bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdWludCk7CisgICAgICAgICAgICBjb25zdCBHQzNEdWlu
dCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oYnVmZmVyLT5kYXRhKCkpOworICAg
ICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQor
ICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0
PGludD4ocFtpXSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbGVt
ZW50QXJyYXlCdWZmZXItPnNldENhY2hlZE1heEluZGV4KHR5cGUsIG1heEluZGV4KTsKKyAgICB9
CisgICAgCisgICAgaWYgKG1heEluZGV4ID49IDApIHsKKyAgICAgICAgLy8gVGhlIG51bWJlciBv
ZiByZXF1aXJlZCBlbGVtZW50cyBpcyBvbmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtCisgICAgICAg
IC8vIGluZGV4IHRoYXQgd2lsbCBiZSBhY2Nlc3NlZC4KKyAgICAgICAgbnVtRWxlbWVudHNSZXF1
aXJlZCA9IG1heEluZGV4ICsgMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwg
R0MzRGludHB0ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQoreworICAg
IEFTU0VSVChjb3VudCA+PSAwICYmIG9mZnNldCA+PSAwKTsKKyAgICB1bnNpZ25lZCBsYXN0SW5k
ZXggPSAwOworICAgIAorICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVy
ID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAg
ICAKKyAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGlmICghY291bnQpIHsKKyAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IDA7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoIWVsZW1lbnRBcnJh
eUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBsb25nIHVvZmZzZXQgPSBvZmZzZXQ7CisgICAgdW5zaWduZWQgbG9u
ZyBuID0gY291bnQ7CisgICAgCisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0lOVCkgeworICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQu
CisgICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgY29uc3QgR0Mz
RHVpbnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGVsZW1lbnRBcnJheUJ1ZmZl
ci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0OworICAgICAgICB3aGls
ZSAobi0tID4gMCkgeworICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4KQorICAgICAgICAg
ICAgICAgIGxhc3RJbmRleCA9ICpwOworICAgICAgICAgICAgKytwOworICAgICAgICB9CisgICAg
fSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCkgewor
ICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIHVvZmZz
ZXQgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBwID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVu
dEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0OworICAgICAgICB3aGlsZSAobi0tID4g
MCkgeworICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4KQorICAgICAgICAgICAgICAgIGxh
c3RJbmRleCA9ICpwOworICAgICAgICAgICAgKytwOworICAgICAgICB9CisgICAgfSBlbHNlIGlm
ICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIGNv
bnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGVsZW1lbnRB
cnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0OworICAg
ICAgICB3aGlsZSAobi0tID4gMCkgeworICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4KQor
ICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOworICAgICAgICAgICAgKytwOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZW4gc2V0IHRoZSBsYXN0IGluZGV4IGluIHRoZSBp
bmRleCBhcnJheSBhbmQgbWFrZSBzdXJlIGl0IGlzIHZhbGlkLgorICAgIG51bUVsZW1lbnRzUmVx
dWlyZWQgPSBsYXN0SW5kZXggKyAxOworICAgIHJldHVybiBudW1FbGVtZW50c1JlcXVpcmVkID4g
MDsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVZlcnRleEF0
dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmltaXRpdmVDb3VudCkK
K3sKKyAgICBpZiAoIW1fY3VycmVudFByb2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICAvLyBMb29rIGluIGVhY2ggZW5hYmxlZCB2ZXJ0ZXggYXR0cmliIGFuZCBjaGVjayBp
ZiB0aGV5J3ZlIGJlZW4gYm91bmQgdG8gYSBidWZmZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fbWF4VmVydGV4QXR0cmliczsgKytpKSB7CisgICAgICAgIGlmICghbV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpKS52YWxpZGF0ZUJpbmRpbmco
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKGVsZW1l
bnRDb3VudCA8PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAKKyAgICAvLyBM
b29rIGluIGVhY2ggY29uc3VtZWQgdmVydGV4IGF0dHJpYiAoYnkgdGhlIGN1cnJlbnQgcHJvZ3Jh
bSkuCisgICAgYm9vbCBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSBmYWxzZTsKKyAgICBib29sIHNh
d0VuYWJsZWRBdHRyaWIgPSBmYWxzZTsKKyAgICBpbnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25z
ID0gbV9jdXJyZW50UHJvZ3JhbS0+bnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnM7ICsraSkgeworICAgICAg
ICBpbnQgbG9jID0gbV9jdXJyZW50UHJvZ3JhbS0+Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24oaSk7
CisgICAgICAgIGlmIChsb2MgPj0gMCAmJiBsb2MgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fbWF4VmVy
dGV4QXR0cmlicykpIHsKKyAgICAgICAgICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+
Z2V0VmVydGV4QXR0cmliU3RhdGUobG9jKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVk
KSB7CisgICAgICAgICAgICAgICAgc2F3RW5hYmxlZEF0dHJpYiA9IHRydWU7CisgICAgICAgICAg
ICAgICAgLy8gQXZvaWQgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gbnVtRWxlbWVudHMgY29tcHV0YXRp
b24uCisgICAgICAgICAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGVsZW1lbnQsIHdlIHdpbGwgb25s
eSB0b3VjaCB0aGUgZGF0YSBmb3IgdGhlCisgICAgICAgICAgICAgICAgLy8gZWxlbWVudCBhbmQg
bm90aGluZyBiZXlvbmQgaXQuCisgICAgICAgICAgICAgICAgaW50IGJ5dGVzUmVtYWluaW5nID0g
c3RhdGljX2Nhc3Q8aW50PihzdGF0ZS5idWZmZXJCaW5kaW5nLT5ieXRlTGVuZ3RoKCkgLSBzdGF0
ZS5vZmZzZXQpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoc3RhdGUuc3RyaWRlID4gMCk7CisgICAgICAgICAgICAgICAg
aWYgKGJ5dGVzUmVtYWluaW5nID49IHN0YXRlLmJ5dGVzUGVyRWxlbWVudCkKKyAgICAgICAgICAg
ICAgICAgICAgbnVtRWxlbWVudHMgPSAxICsgKGJ5dGVzUmVtYWluaW5nIC0gc3RhdGUuYnl0ZXNQ
ZXJFbGVtZW50KSAvIHN0YXRlLnN0cmlkZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnN0
YW5jZXNSZXF1aXJlZCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmRpdmlzb3IpIHsK
KyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzUmVxdWlyZWQgPSBjZWlsKHN0YXRpY19jYXN0
PGZsb2F0PihwcmltaXRpdmVDb3VudCkgLyBzdGF0ZS5kaXZpc29yKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGluc3RhbmNlc1JlcXVpcmVkID4gbnVtRWxlbWVudHMpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2F3Tm9uSW5zdGFuY2VkQXR0cmliID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGVsZW1lbnRDb3VudCA+IG51bUVsZW1lbnRzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIXNhd05vbkluc3RhbmNlZEF0dHJpYiAm
JiBzYXdFbmFibGVkQXR0cmliKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVX
ZWJHTE9iamVjdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgIm5vIG9iamVjdCBvciBvYmplY3QgZGVsZXRlZCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhp
cykpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRo
aXMgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0Fy
cmF5cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25O
YW1lLCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghdmFsaWRh
dGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25OYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGlmIChmaXJzdCA8IDAgfHwgY291bnQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJmaXJzdCBvciBjb3VudCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIWNvdW50KSB7CisgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChwcmltaXRpdmVDb3VudCA8
IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91
bmRzQWNjZXNzZXMoKSkgeworICAgICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRl
cmluZyBzdGF0ZQorICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVj
a2VkRmlyc3QoZmlyc3QpOworICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93
PiBjaGVja2VkQ291bnQoY291bnQpOworICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92
ZXJmbG93PiBjaGVja2VkU3VtID0gY2hlY2tlZEZpcnN0ICsgY2hlY2tlZENvdW50OworICAgICAg
ICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQo
cHJpbWl0aXZlQ291bnQpOworICAgICAgICBpZiAoY2hlY2tlZFN1bS5oYXNPdmVyZmxvd2VkKCkg
fHwgY2hlY2tlZFByaW1pdGl2ZUNvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCAhdmFsaWRhdGVWZXJ0
ZXhBdHRyaWJ1dGVzKGNoZWNrZWRTdW0udW5zYWZlR2V0KCksIGNoZWNrZWRQcmltaXRpdmVDb3Vu
dC51bnNhZmVHZXQoKSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBh
Y2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdmFsaWRhdGVWZXJ0ZXhBdHRy
aWJ1dGVzKDApKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dHJpYnMgbm90IHNldHVw
IGNvcnJlY3RseSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRl
IjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNv
bikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNE
aW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdB
cnJheXMiLCBtb2RlLCBmaXJzdCwgY291bnQsIDApKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICAKKyAgICBib29sIHZlcnRleEF0dHJpYjBTaW11
bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50
IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1
cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCB0cnVlKTsKKyAgICAKKyAgICBtX2NvbnRleHQt
PmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICAKKyAgICBpZiAoIWlzR0xFUzJD
b21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3Rh
dGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RT
dHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwg
ZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25n
IGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHMsIEdDM0RzaXplaSBwcmltaXRpdmVD
b3VudCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZURy
YXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGZ1bmN0aW9uTmFtZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgICAgIGlmIChtX29lc0VsZW1lbnRJbmRleFVpbnQpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoY291
bnQgPCAwIHx8IG9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImNvdW50IG9yIG9mZnNl
dCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIWNv
dW50KSB7CisgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIGlmIChwcmltaXRpdmVDb3VudCA8IDApIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyBFTEVNRU5UX0FSUkFZX0JVRkZF
UiBib3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICgh
aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVu
c3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIGlmICghdmFsaWRh
dGVFbGVtZW50QXJyYXlTaXplKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3Vu
ZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJBWV9CVUZGRVIiKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWNvdW50KQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVy
Zmxvdz4gY2hlY2tlZENvdW50KGNvdW50KTsKKyAgICAgICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNv
cmRPdmVyZmxvdz4gY2hlY2tlZFByaW1pdGl2ZUNvdW50KHByaW1pdGl2ZUNvdW50KTsKKyAgICAg
ICAgaWYgKGNoZWNrZWRDb3VudC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZFByaW1pdGl2ZUNv
dW50Lmhhc092ZXJmbG93ZWQoKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0
IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJh
eUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmli
dXRlcyhudW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewor
ICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNoZWNrZWRDb3VudC51
bnNhZmVHZXQoKSwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxl
bWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQ
cmltaXRpdmVDb3VudC51bnNhZmVHZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgY29uc3QgY2hh
ciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29u
dGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVT
RURfUEFSQU0oZWMpOworICAgIAorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKKyAgICBp
ZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHMiLCBtb2RlLCBjb3VudCwgdHlw
ZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgMCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBj
bGVhcklmQ29tcG9zaXRlZCgpOworICAgIAorICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRl
ZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGlmICgh
bnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50
LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cyk7Cisg
ICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVt
RWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAg
IGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzIiwgdHJ1ZSk7CisgICAgCisg
ICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0
PEdDM0RpbnRwdHI+KG9mZnNldCkpOworICAgIAorICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
ICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZl
cnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQor
ICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIGZhbHNlKTsK
KyAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjplbmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwgY2FwKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkg
eworICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgYXBwbHlTdGVuY2ls
VGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgeworICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gdHJ1
ZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1
ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7CisgICAgfQorICAgIG1f
Y29udGV4dC0+ZW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0
dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFu
Z2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlP
YmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKyAgICBzdGF0ZS5lbmFibGVkID0g
dHJ1ZTsKKyAgICAKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmaW5pc2goKQoreworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Nv
bnRleHQtPmZpbmlzaCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZs
dXNoKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1
ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZm
ZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFj
aG1lbnQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
IChidWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90
IGZyb20gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRG9u
J3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJl
bnQKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNl
IG9mIHRoZSBkZWZhdWx0CisgICAgLy8gRkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3Ja
ZXJvKGJ1ZmZlcik7CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICAgICAg
bV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgYnVmZmVyT2JqZWN0KTsKKyAgICB9CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0
dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7CisgICAgYXBw
bHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwg
R0MzRGVudW0gdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIEdDM0RpbnQgbGV2ZWws
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0
ZXJzKCJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsIHRhcmdldCwgYXR0YWNobWVudCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAobGV2ZWwpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJs
ZXZlbCBub3QgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0ZXh0dXJlICYm
ICF0ZXh0dXJlLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJh
bWVidWZmZXJUZXh0dXJlMkQiLCAibm8gdGV4dHVyZSBvciB0ZXh0dXJlIG5vdCBmcm9tIHRoaXMg
Y29udGV4dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIERvbid0IGFsbG93IHRo
ZSBkZWZhdWx0IGZyYW1lYnVmZmVyIHRvIGJlIG11dGF0ZWQ7IGFsbCBjdXJyZW50CisgICAgLy8g
aW1wbGVtZW50YXRpb25zIHVzZSBhbiBGQk8gaW50ZXJuYWxseSBpbiBwbGFjZSBvZiB0aGUgZGVm
YXVsdAorICAgIC8vIEZCTy4KKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJUZXh0dXJl
MkQiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVPYmplY3QgPSBvYmplY3RPclplcm8odGV4dHVyZSk7
CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVy
VGV4dHVyZTJEKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIHRl
eHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBtX2NvbnRleHQtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNI
TUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJn
ZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBtX2NvbnRleHQtPmZy
YW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJl
T2JqZWN0LCBsZXZlbCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJn
ZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICB9CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIHRleHRhcmdl
dCwgdGV4dHVyZSwgbGV2ZWwpOworICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9j
b250ZXh0LT5mcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRl
eCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdlbmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxz
ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXRleC0+Y2FuR2Vu
ZXJhdGVNaXBtYXBzKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3Qg
cG93ZXIgb2YgMiBvciBub3QgYWxsIHRoZSBzYW1lIHNpemUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyMzkxNi4gQ29tcHJlc3NlZCB0ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJH
TCAyOgorICAgIGlmICh0ZXgtPmlzQ29tcHJlc3NlZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlw
bWFwIiwgInRyeWluZyB0byBnZW5lcmF0ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4
Rm9ybWF0KCJnZW5lcmF0ZU1pcG1hcCIsIHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAw
KSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBnZW5lcmF0ZU1pcG1hcCB3b24ndCB3
b3JrIHByb3Blcmx5IGlmIG1pbkZpbHRlciBpcyBub3QgTkVBUkVTVF9NSVBNQVBfTElORUFSCisg
ICAgLy8gb24gTWFjLiBSZW1vdmUgdGhlIGhhY2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4
ZWQuCisjaWYgT1MoREFSV0lOKQorICAgIGJvb2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxz
ZTsKKyAgICBpZiAodGV4LT5nZXRNaW5GaWx0ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVB
UkVTVF9NSVBNQVBfTElORUFSKSB7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0
YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpOworICAgICAgICBuZWVkVG9SZXNldE1pbkZp
bHRlciA9IHRydWU7CisgICAgfQorI2VuZGlmCisgICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1h
cCh0YXJnZXQpOworI2lmIE9TKERBUldJTikKKyAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIp
CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHRleC0+Z2V0TWluRmlsdGVyKCkpOworI2VuZGlmCisg
ICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExldmVsSW5mbygpOworfQorCitQYXNzUmVmUHRyPFdlYkdM
QWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlQXR0cmliKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QWN0aXZlQXR0cmliIiwgcHJvZ3JhbSkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAgICBpZiAoIW1f
Y29udGV4dC0+Z2V0QWN0aXZlQXR0cmliKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGlu
Zm8pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBMT0coV2ViR0wsICJSZXR1
cm5pbmcgYWN0aXZlIGF0dHJpYnV0ZSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5k
YXRhKCkpOworICAgIAorICAgIHJldHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5h
bWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKK30KKworUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUlu
Zm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVVbmlmb3JtIiwgcHJvZ3JhbSkpCisgICAgICAg
IHJldHVybiAwOworICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAgICBpZiAoIW1fY29udGV4dC0+Z2V0
QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAg
ICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0aCgiWzBdIikpCisgICAg
ICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKKyAgICB9CisgICAgCisgICAgTE9HKFdl
YkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSB1bmlmb3JtICVkOiAlcyIsIGluZGV4LCBpbmZvLm5hbWUu
dXRmOCgpLmRhdGEoKSk7CisgICAgCisgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRl
KGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hhZGVycyhXZWJHTFByb2dyYW0qIHByb2dyYW0s
IFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiYgc2hhZGVyT2JqZWN0cywgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBzaGFkZXJPYmplY3RzLmNsZWFy
KCk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdCgiZ2V0QXR0YWNoZWRTaGFkZXJzIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBjb25zdCBHQzNEZW51bSBzaGFkZXJUeXBlW10gPSB7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSLAorICAgICAgICBHcmFwaGljc0NvbnRleHQz
RDo6RlJBR01FTlRfU0hBREVSCisgICAgfTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZW9mKHNoYWRlclR5cGUpIC8gc2l6ZW9mKEdDM0RlbnVtKTsgKytpKSB7CisgICAgICAgIFdl
YkdMU2hhZGVyKiBzaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihzaGFkZXJUeXBl
W2ldKTsKKyAgICAgICAgaWYgKHNoYWRlcikKKyAgICAgICAgICAgIHNoYWRlck9iamVjdHMuYXBw
ZW5kKHNoYWRlcik7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitHQzNEaW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3Jh
bSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgo
ImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAo
IXZhbGlkYXRlU3RyaW5nKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1
cm4gLTE7CisgICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCisgICAgICAgIHJldHVybiAt
MTsKKyAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRy
aWJMb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH0KKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclpl
cm8ocHJvZ3JhbSksIG5hbWUpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0QnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiAmJiB0
YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOworICAgIH0KKyAgICAKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkJVRkZFUl9TSVpFICYmIHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJf
VVNBR0UpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgCisgICAgR0Mz
RGludCB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJn
ZXQsIHBuYW1lLCAmdmFsdWUpOworICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
QlVGRkVSX1NJWkUpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKSk7Cit9CisKK1Bh
c3NSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRv
IHJldHVybiBhIG5ldyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIG9iamVjdCB0bworICAgIC8vIHBy
ZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRhdGluZyBhbnkgY2FjaGVkIHZlcnNpb24uCisgICAgCisg
ICAgLy8gQWxzbywgd2UgbmVlZCB0byBlbmZvcmNlIHJlcXVlc3RlZCB2YWx1ZXMgb2YgImZhbHNl
IiBmb3IgZGVwdGgKKyAgICAvLyBhbmQgc3RlbmNpbCwgcmVnYXJkbGVzcyBvZiB0aGUgcHJvcGVy
dGllcyBvZiB0aGUgdW5kZXJseWluZworICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEIG9yIERyYXdp
bmdCdWZmZXIuCisgICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJpYnV0ZXMg
PSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUobV9jb250ZXh0LT5nZXRDb250ZXh0QXR0
cmlidXRlcygpKTsKKyAgICBpZiAoIW1fYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgYXR0cmli
dXRlcy0+c2V0RGVwdGgoZmFsc2UpOworICAgIGlmICghbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCisg
ICAgICAgIGF0dHJpYnV0ZXMtPnNldFN0ZW5jaWwoZmFsc2UpOworICAgIGlmIChtX2RyYXdpbmdC
dWZmZXIpIHsKKyAgICAgICAgLy8gVGhlIERyYXdpbmdCdWZmZXIgb2J0YWlucyBpdHMgcGFyYW1l
dGVycyBmcm9tIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcygpLAorICAg
ICAgICAvLyBidXQgaXQgbWFrZXMgaXRzIG93biBkZXRlcm1pbmF0aW9uIG9mIHdoZXRoZXIgbXVs
dGlzYW1wbGluZyBpcyBzdXBwb3J0ZWQuCisgICAgICAgIGF0dHJpYnV0ZXMtPnNldEFudGlhbGlh
cyhtX2RyYXdpbmdCdWZmZXItPm11bHRpc2FtcGxlKCkpOworICAgIH0KKyAgICByZXR1cm4gYXR0
cmlidXRlcy5yZWxlYXNlKCk7Cit9CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldEVycm9yKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworICAgIHJldHVybiBt
X2NvbnRleHQtPmdldEVycm9yKCk7Cit9CisKK1dlYkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IAorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiRVhUX2JsZW5kX21pbm1heCIpCisg
ICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX2Js
ZW5kX21pbm1heCIpKSB7CisgICAgICAgIGlmICghbV9leHRCbGVuZE1pbk1heCkgeworICAgICAg
ICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9i
bGVuZF9taW5tYXgiKTsKKyAgICAgICAgICAgIG1fZXh0QmxlbmRNaW5NYXggPSBzdGQ6Om1ha2Vf
dW5pcXVlPEVYVEJsZW5kTWluTWF4Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bV9leHRCbGVuZE1pbk1heC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJFWFRfc1JHQiIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfRVhUX3NSR0IiKSkgeworICAgICAgICBpZiAoIW1fZXh0c1JHQikgewor
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdM
X0VYVF9zUkdCIik7CisgICAgICAgICAgICBtX2V4dHNSR0IgPSBzdGQ6Om1ha2VfdW5pcXVlPEVY
VHNSR0I+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2V4dHNSR0IuZ2V0KCk7
CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiRVhUX2ZyYWdfZGVwdGgi
KQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VY
VF9mcmFnX2RlcHRoIikpIHsKKyAgICAgICAgaWYgKCFtX2V4dEZyYWdEZXB0aCkgeworICAgICAg
ICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9m
cmFnX2RlcHRoIik7CisgICAgICAgICAgICBtX2V4dEZyYWdEZXB0aCA9IHN0ZDo6bWFrZV91bmlx
dWU8RVhURnJhZ0RlcHRoPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9leHRG
cmFnRGVwdGguZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpCisgICAgICAgICYmIChtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB8fCBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FSQl9zaGFkZXJfdGV4dHVyZV9sb2Qi
KSkpIHsKKyAgICAgICAgaWYgKCFtX2V4dFNoYWRlclRleHR1cmVMT0QpIHsKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfc2hhZGVy
X3RleHR1cmVfbG9kIik7CisgICAgICAgICAgICBtX2V4dFNoYWRlclRleHR1cmVMT0QgPSBzdGQ6
Om1ha2VfdW5pcXVlPEVYVFNoYWRlclRleHR1cmVMT0Q+KHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX2V4dFNoYWRlclRleHR1cmVMT0QuZ2V0KCk7CisgICAgfQorICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ry
b3BpYyIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygi
R0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikpIHsKKyAgICAgICAgaWYgKCFtX2V4
dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ry
b3BpYyIpOworICAgICAgICAgICAgbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMgPSBzdGQ6
Om1ha2VfdW5pcXVlPEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4odGhpcyk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmdldCgpOwor
ICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0
cygiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikpIHsKKyAgICAgICAgaWYgKCFtX29lc1N0
YW5kYXJkRGVyaXZhdGl2ZXMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAg
ICAgICAgIG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcyA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTU3Rh
bmRhcmREZXJpdmF0aXZlcz4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2Vz
U3RhbmRhcmREZXJpdmF0aXZlcy5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsICJPRVNfdGV4dHVyZV9mbG9hdCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXQiKSkgeworICAgICAg
ICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfZmxvYXQiKTsKKyAgICAg
ICAgICAgIG1fb2VzVGV4dHVyZUZsb2F0ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNUZXh0dXJlRmxv
YXQ+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29lc1RleHR1cmVGbG9hdC5n
ZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVy
ZV9mbG9hdF9saW5lYXIiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKSB7CisgICAgICAgIGlmICgh
bV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTsK
KyAgICAgICAgICAgIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyID0gc3RkOjptYWtlX3VuaXF1ZTxP
RVNUZXh0dXJlRmxvYXRMaW5lYXI+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBt
X29lc1RleHR1cmVGbG9hdExpbmVhci5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikKKyAgICAgICAgJiYgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
IikpIHsKKyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVIYWxmRmxvYXQpIHsKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVy
ZV9oYWxmX2Zsb2F0Iik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXQgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXQ+KHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXQuZ2V0KCk7CisgICAgfQorICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKQor
ICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190
ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpIHsKKyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVI
YWxmRmxvYXRMaW5lYXIpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpOworICAg
ICAgICAgICAgbV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyID0gc3RkOjptYWtlX3VuaXF1ZTxP
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikKKyAgICAgICAg
JiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2Fy
cmF5X29iamVjdCIpKSB7CisgICAgICAgIGlmICghbV9vZXNWZXJ0ZXhBcnJheU9iamVjdCkgewor
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdM
X09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisgICAgICAgICAgICBtX29lc1ZlcnRleEFycmF5
T2JqZWN0ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNWZXJ0ZXhBcnJheU9iamVjdD4odGhpcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzVmVydGV4QXJyYXlPYmplY3QuZ2V0KCk7Cisg
ICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX2VsZW1lbnRfaW5kZXhf
dWludCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygi
R0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpKSB7CisgICAgICAgIGlmICghbV9vZXNFbGVtZW50
SW5kZXhVaW50KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOworICAgICAgICAgICAgbV9v
ZXNFbGVtZW50SW5kZXhVaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNFbGVtZW50SW5kZXhVaW50
Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNFbGVtZW50SW5kZXhVaW50
LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2xv
c2VfY29udGV4dCIpKSB7CisgICAgICAgIGlmICghbV93ZWJnbExvc2VDb250ZXh0KQorICAgICAg
ICAgICAgbV93ZWJnbExvc2VDb250ZXh0ID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTExvc2VDb250
ZXh0Pih0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fd2ViZ2xMb3NlQ29udGV4dC5nZXQoKTsKKyAg
ICB9CisgICAgaWYgKChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCS0lUX1dFQkdMX2NvbXBy
ZXNzZWRfdGV4dHVyZV9hdGMiKSkKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qzo6c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRUZXh0
dXJlQVRDKQorICAgICAgICAgICAgbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDID0gc3RkOjpt
YWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDPih0aGlzKTsKKyAgICAgICAgcmV0
dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQy5nZXQoKTsKKyAgICB9CisgICAgaWYgKChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9w
dnJ0YyIpKQorICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRl
ZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKQor
ICAgICAgICAgICAgbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMgPSBzdGQ6Om1ha2VfdW5p
cXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQz4odGhpcyk7CisgICAgICAgIHJldHVybiBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpCisgICAg
ICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAg
ICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDKQorICAgICAgICAgICAgbV93
ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVz
c2VkVGV4dHVyZVMzVEM+KHRoaXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlUzNUQy5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJHTF9kZXB0aF90ZXh0dXJlIikKKyAgICAgICAgJiYgV2ViR0xEZXB0aFRleHR1cmU6OnN1
cHBvcnRlZChncmFwaGljc0NvbnRleHQzRCgpKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0
aFRleHR1cmUpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1
cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9kZXB0aF90ZXh0dXJlIik7CisgICAgICAgICAgICBtX3dl
YmdsRGVwdGhUZXh0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTERlcHRoVGV4dHVyZT4odGhp
cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZXB0aFRleHR1cmUuZ2V0KCk7
CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZHJhd19idWZm
ZXJzIikgJiYgc3VwcG9ydHNEcmF3QnVmZmVycygpKSB7CisgICAgICAgIGlmICghbV93ZWJnbERy
YXdCdWZmZXJzKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfRVhUX2RyYXdfYnVmZmVycyIpOworICAgICAgICAgICAgbV93ZWJnbERy
YXdCdWZmZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTERyYXdCdWZmZXJzPih0aGlzKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbV93ZWJnbERyYXdCdWZmZXJzLmdldCgpOworICAgIH0K
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkFOR0xFX2luc3RhbmNlZF9hcnJheXMi
KSAmJiBBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIGlm
ICghbV9hbmdsZUluc3RhbmNlZEFycmF5cykgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsK
KyAgICAgICAgICAgIG1fYW5nbGVJbnN0YW5jZWRBcnJheXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEFO
R0xFSW5zdGFuY2VkQXJyYXlzPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9h
bmdsZUluc3RhbmNlZEFycmF5cy5nZXQoKTsKKyAgICB9CisgICAgaWYgKGFsbG93UHJpdmlsZWdl
ZEV4dGVuc2lvbnMoKSkgeworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldF
QkdMX2RlYnVnX3JlbmRlcmVyX2luZm8iKSkgeworICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVi
dWdSZW5kZXJlckluZm8pCisgICAgICAgICAgICAgICAgbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZv
ID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPih0aGlzKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdSZW5kZXJlckluZm8uZ2V0KCk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kZWJ1Z19zaGFkZXJz
IikKKyAgICAgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygi
R0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIikpIHsKKyAgICAgICAgICAgIGlmICgh
bV93ZWJnbERlYnVnU2hhZGVycykKKyAgICAgICAgICAgICAgICBtX3dlYmdsRGVidWdTaGFkZXJz
ID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTERlYnVnU2hhZGVycz4odGhpcyk7CisgICAgICAgICAg
ICByZXR1cm4gbV93ZWJnbERlYnVnU2hhZGVycy5nZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZ2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIAorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICAKKyAgICBXZWJHTFNoYXJl
ZE9iamVjdCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEF0dGFjaG1lbnRPYmpl
Y3QoYXR0YWNobWVudCk7CisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKHBuYW1lID09
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKQor
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7
CisgICAgICAgIC8vIE9wZW5HTCBFUyAyLjAgc3BlY2lmaWVzIElOVkFMSURfRU5VTSBpbiB0aGlz
IGNhc2UsIHdoaWxlIGRlc2t0b3AgR0wKKyAgICAgICAgLy8gc3BlY2lmaWVzIElOVkFMSURfT1BF
UkFUSU9OLgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
KyAgICAKKyAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBvYmplY3QtPmlzUmVuZGVy
YnVmZmVyKCkpOworICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7CisgICAgICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4ocmVpbnRlcnByZXRfY2Fz
dDxXZWJHTFRleHR1cmUqPihvYmplY3QpKSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQ
X0ZBQ0U6CisgICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0NPTE9SX0VOQ09ESU5HX0VYVDogeworICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAocG5hbWUp
IHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUik7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7CisgICAgICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogeworICAgICAg
ICAgICAgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpOworICAgICAgICAgICAgR0MzRGVudW0gcmVuZGVy
QnVmZmVyRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAg
ICAgICAgQVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhU
ICYmIHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKTsK
KyAgICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdC
OF9BTFBIQThfRVhUKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRXh0ZW5z
aW9uczNEOjpTUkdCX0VYVCk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CisgICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNv
bnN0IGludCBpbnRaZXJvID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QUNUSVZFX1RFWFRVUkU6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25l
ZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNF
RF9MSU5FX1dJRFRIX1JBTkdFOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIo
cG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBX0JJVFM6CisgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBh
c3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fYm91bmRBcnJheUJ1ZmZlcikpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfQ09MT1I6CisgICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORF9EU1RfUkdCOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0VRVUFUSU9OX0FMUEhBOgor
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0VRVUFUSU9OX1JHQjoKKyAgICAgICAgcmV0dXJuIGdl
dFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORF9TUkNfQUxQSEE6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfU1JDX1JHQjoKKyAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCTFVFX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVF
OgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklURU1BU0s6CisgICAgICAgIHJldHVy
biBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgorICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKFVpbnQzMkFycmF5OjpjcmVhdGUobV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuZGF0
YSgpLCBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5zaXplKCkpKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0VfTU9ERToK
KyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpDVVJSRU5UX1BST0dSQU06CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+KG1fY3VycmVudFByb2dyYW0pKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CSVRTOgorICAgICAgICBpZiAoIW1fZnJh
bWVidWZmZXJCaW5kaW5nICYmICFtX2F0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKGludFplcm8pOworICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRToK
KyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9GVU5DOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdF
OgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUOgorICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfV1JJVEVNQVNLOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSOgorICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RUxF
TUVOVF9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMQnVmZmVyPihtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVJfQklORElORzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdM
RnJhbWVidWZmZXI+KG1fZnJhbWVidWZmZXJCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJPTlRfRkFDRToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBf
SElOVDoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHUkVFTl9CSVRTOgorICAgICAgICByZXR1cm4gZ2V0
SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX1dJ
RFRIOgorICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgorICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01F
TlRfVU5JRk9STV9WRUNUT1JTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkU6Cisg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVS
RV9TSVpFOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTOgorICAgICAgICByZXR1cm4g
Z2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
VkVSVEVYX0FUVFJJQlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
UzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9WSUVXUE9SVF9ESU1TOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TlVNX1NIQURFUl9CSU5BUllf
Rk9STUFUUzoKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBhbHdheXMgcmV0dXJuIDAgZm9y
IHRoaXM/CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UOgorICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09G
RlNFVF9GQUNUT1I6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKKyAgICAgICAg
cmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX1VOSVRTOgorICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9CSVRTOgorICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVJfQklORElORzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPihtX3JlbmRlcmJ1ZmZlckJpbmRpbmcpKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUjoKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhTdHJpbmcoIldlYktpdCBXZWJHTCIpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTQU1QTEVfQlVGRkVSUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX0lOVkVS
VDoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9DT1ZFUkFHRV9WQUxVRToKKyAgICAgICAgcmV0dXJu
IGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
QU1QTEVTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWDoKKyAgICAgICAgcmV0dXJuIGdldFdlYkdM
SW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVDoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygiV2ViR0wgR0xTTCBFUyAxLjAgKCIgKyBtX2NvbnRl
eHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9O
KSArICIpIik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX0ZBSUw6
CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX0ZVTkM6CisgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFD
S19SRUY6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19WQUxVRV9NQVNLOgorICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQkFDS19XUklURU1BU0s6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25l
ZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9CSVRTOgorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2F0dHJpYnV0
ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oaW50WmVybyk7Cisg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQ0xFQVJfVkFMVUU6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRkFJTDoK
KyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0ZVTkM6CisgICAgICAgIHJldHVybiBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9QQVNTX0RFUFRIX0ZBSUw6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9QQVNTX0RF
UFRIX1BBU1M6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9SRUY6CisgICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfVEVTVDoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVkFMVUVfTUFTSzoKKyAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVUJQSVhF
TF9CSVRTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0JJTkRJTkdfMkQ6CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+KG1fdGV4dHVyZVVuaXRzW21fYWN0
aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+KG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4
dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZykpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQ6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19GTElQX1lfV0VCR0w6
CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tGbGlwWSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOgorICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9u
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRU5ET1I6CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oU3RyaW5nKCJXZWJLaXQiKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VkVSU0lPTjoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygiV2ViR0wgMS4wICgiICsg
bV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlNJT04pICsgIikiKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVDoKKyAgICAgICAgcmV0dXJuIGdl
dFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpG
UkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzCisgICAgICAgIGlmIChtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMpCisgICAgICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoRXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9T
SEFERVJfREVSSVZBVElWRV9ISU5UX09FUyk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgbmFtZSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIG5vdCBlbmFibGVkIik7Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIFdlYkdMRGVidWdSZW5kZXJl
ckluZm86OlVOTUFTS0VEX1JFTkRFUkVSX1dFQkdMOgorICAgICAgICBpZiAobV93ZWJnbERlYnVn
UmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRleHQt
PmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVIpKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5v
dCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIFdl
YkdMRGVidWdSZW5kZXJlckluZm86OlVOTUFTS0VEX1ZFTkRPUl9XRUJHTDoKKyAgICAgICAgaWYg
KG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8obV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUikpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRl
cmVyX2luZm8gbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpWRVJURVhfQVJSQVlfQklORElOR19PRVM6IC8vIE9FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgICAgIGlmIChtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7
CisgICAgICAgICAgICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+aXNEZWZhdWx0T2Jq
ZWN0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCkpOworICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qgbm90
IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpNQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJl
X2ZpbHRlcl9hbmlzb3Ryb3BpYworICAgICAgICBpZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMpCisgICAgICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoRXh0ZW5z
aW9uczNEOjpNQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3Bp
YyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQ6IC8vIEVYVF9kcmF3X2J1
ZmZlcnMgQkVHSU4KKyAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycykKKyAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90
IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEcmF3
QnVmZmVycykKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oZ2V0TWF4RHJhd0J1ZmZl
cnMoKSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xf
ZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzCisgICAgICAg
ICAgICAmJiBwbmFtZSA+PSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQKKyAgICAgICAg
ICAgICYmIHBuYW1lIDwgc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEV4dGVuc2lvbnMzRDo6RFJBV19C
VUZGRVIwX0VYVCArIGdldE1heERyYXdCdWZmZXJzKCkpKSB7CisgICAgICAgICAgICBHQzNEaW50
IHZhbHVlID0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkU7CisgICAgICAgICAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+Z2V0RHJhd0J1ZmZlcihwbmFtZSk7CisgICAgICAgICAgICBlbHNlIC8vIGVtdWxhdGVk
IGJhY2tidWZmZXIKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fYmFja0RyYXdCdWZmZXI7Cisg
ICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOworICAgIH0KK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNE
ZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICAKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1l
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQoKSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VkFMSURBVEVfU1RBVFVTOgorICAgICAgICBtX2NvbnRleHQtPmdldFBy
b2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVM6CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8ocHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpBVFRBQ0hFRF9TSEFERVJTOgorICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKHZhbHVlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklC
VVRFUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6CisgICAg
ICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
K30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFByb2dyYW1JbmZvTG9n
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRQcm9ncmFt
SW5mb0xvZyIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gIiI7CisgICAgcmV0dXJuIGVuc3Vy
ZU5vdE51bGwobV9jb250ZXh0LT5nZXRQcm9ncmFtSW5mb0xvZyhvYmplY3RPclplcm8ocHJvZ3Jh
bSkpKTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBp
ZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8
ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlciIsICJubyByZW5kZXJidWZmZXIgYm91bmQiKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5k
aW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMCisgICAgICAgICYmICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkgeworICAg
ICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpOworICAgICAgICBpbnQgdmFs
dWUgPSAwOworICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKKyAgICAgICAgICAgIHZhbHVlID0gbV9yZW5k
ZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgICAgICAg
ICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JF
RF9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JF
RU5fU0laRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JM
VUVfU0laRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FM
UEhBX1NJWkU6CisgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6Cisg
ICAgICAgICAgICB2YWx1ZSA9IDI0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6CisgICAgICAgICAg
ICB2YWx1ZSA9IDg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKKyAgICAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgp
KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAg
IH0KKyAgICAKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1dJRFRIOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUl9CTFVFX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSX0RFUFRIX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSX1NURU5DSUxfU0laRToKKyAgICAgICAgbV9jb250ZXh0LT5nZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKHZhbHVlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJf
SU5URVJOQUxfRk9STUFUOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fcmVuZGVyYnVm
ZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRl
ciwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdCgiZ2V0U2hhZGVyUGFyYW1ldGVyIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIHN3aXRjaCAocG5hbWUp
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHNoYWRlci0+aXNEZWxldGVkKCkpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTOgorICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRl
cml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFOgorICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2
KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0U2hhZGVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworU3RyaW5nIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJJbmZvTG9nIiwgc2hhZGVyKSkKKyAgICAgICAg
cmV0dXJuICIiOworICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0U2hhZGVy
SW5mb0xvZyhvYmplY3RPclplcm8oc2hhZGVyKSkpOworfQorCitQYXNzUmVmUHRyPFdlYkdMU2hh
ZGVyUHJlY2lzaW9uRm9ybWF0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlw
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBz
d2l0Y2ggKHNoYWRlclR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
U0hBREVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclByZWNpc2lvbkZvcm1hdCIs
ICJpbnZhbGlkIHNoYWRlciB0eXBlIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMT1dfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0ZMT0FUOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TE9XX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1f
SU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5UOgorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQg
cHJlY2lzaW9uIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAor
ICAgIEdDM0RpbnQgcmFuZ2VbMl0gPSB7MCwgMH07CisgICAgR0MzRGludCBwcmVjaXNpb24gPSAw
OworICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUsIHBy
ZWNpc2lvblR5cGUsIHJhbmdlLCAmcHJlY2lzaW9uKTsKKyAgICByZXR1cm4gV2ViR0xTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQ6OmNyZWF0ZShyYW5nZVswXSwgcmFuZ2VbMV0sIHByZWNpc2lvbik7Cit9
CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJTb3VyY2UoV2Vi
R0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJTb3VyY2Ui
LCBzaGFkZXIpKQorICAgICAgICByZXR1cm4gIiI7CisgICAgcmV0dXJuIGVuc3VyZU5vdE51bGwo
c2hhZGVyLT5nZXRTb3VyY2UoKSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQoreworICAgIFZlY3RvcjxTdHJp
bmc+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9ibGVuZF9taW5tYXgiKSkKKyAgICAgICAgcmVzdWx0
LmFwcGVuZCgiRVhUX2JsZW5kX21pbm1heCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zUkdCIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQo
IkVYVF9zUkdCIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0
cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX2ZyYWdf
ZGVwdGgiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9PRVNfdGV4dHVyZV9mbG9hdCIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVy
ZV9mbG9hdCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJP
RVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikpCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICBpZiAobV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xp
bmVhciIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xp
bmVhciIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIikpCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICBpZiAo
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0
ZXJfYW5pc290cm9waWMiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX0VYVF90ZXh0
dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisgICAgaWYgKG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIp
KQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik7CisgICAg
cmVzdWx0LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7CisgICAgaWYgKFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgi
V0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiKTsKKyAgICBpZiAoV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTsKKyAgICBpZiAoV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAgICAgcmVzdWx0
LmFwcGVuZCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTsKKyAgICBpZiAoV2ViR0xE
ZXB0aFRleHR1cmU6OnN1cHBvcnRlZChncmFwaGljc0NvbnRleHQzRCgpKSkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpOworICAgIGlmIChzdXBwb3J0c0RyYXdC
dWZmZXJzKCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RyYXdfYnVmZmVycyIpOwor
ICAgIGlmIChBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7CisgICAgCisgICAgaWYgKGFs
bG93UHJpdmlsZWdlZEV4dGVuc2lvbnMoKSkgeworICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2Ui
KSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2V0
VGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBmYWxzZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBzd2l0Y2gg
KHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVS
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJh
bWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOworICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljCisgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykgeworICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odmFsdWUpKTsKKyAgICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIp
OworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRl
eFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIHVuaWZvcm1Mb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBpZiAoIXVuaWZvcm1Mb2NhdGlvbiB8fCB1bmlmb3Jt
TG9jYXRpb24tPnByb2dyYW0oKSAhPSBwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm0iLCAi
bm8gdW5pZm9ybWxvY2F0aW9uIG9yIG5vdCB2YWxpZCBmb3IgdGhpcyBwcm9ncmFtIik7CisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgR0MzRGludCBsb2NhdGlvbiA9
IHVuaWZvcm1Mb2NhdGlvbi0+bG9jYXRpb24oKTsKKyAgICAKKyAgICBHQzNEZW51bSBiYXNlVHlw
ZTsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgc3dpdGNoICh1bmlmb3JtTG9jYXRpb24tPnR5
cGUoKSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6CisgICAgICAgIGJhc2VU
eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoKKyAgICAg
ICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0g
MjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUMz
OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAgICAgICBs
ZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpC
T09MX1ZFQzQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7Cisg
ICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OklOVDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwor
ICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlRfVkVDMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UOworICAgICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpJTlRfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6CisgICAgICAgIGJhc2VU
eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSAyOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMzOgorICAg
ICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3Ro
ID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRf
VkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAg
ICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUX01BVDI6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUOworICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVF9NQVQzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gOTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUNDoKKyAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDE2OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRToKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFw
aGljc0NvbnRleHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0
VW5pZm9ybSIsICJ1bmhhbmRsZWQgdHlwZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7CisgICAgfQorICAgIHN3aXRjaCAoYmFzZVR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDogeworICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9OworICAg
ICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8ocHJvZ3Jh
bSksIGxvY2F0aW9uLCAxNiAqIHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9yWmVybyhwcm9n
cmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQorICAgICAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZVswXSk7CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworICAgIH0KKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6IHsKKyAgICAgICAgR0MzRGludCB2YWx1ZVs0
XSA9IHswfTsKKyAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQorICAgICAg
ICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RP
clplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChsZW5ndGggPT0g
MSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOworICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cisg
ICAgfQorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKKyAgICAgICAgR0MzRGlu
dCB2YWx1ZVs0XSA9IHswfTsKKyAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVk
KQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZF
WFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwg
dmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1p
dihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChs
ZW5ndGggPiAxKSB7CisgICAgICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCisgICAgICAgICAg
ICAgICAgYm9vbFZhbHVlW2pdID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbal0pOworICAgICAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29sVmFsdWUsIGxlbmd0aCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZVswXSkp
OworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0K
KyAgICAKKyAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3Vy
IHVuZm9ydHVuYXRlbHkgY29tcGxleCBsb2dpYyBhYm92ZQorICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3du
IGVycm9yIik7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworfQorCitQYXNzUmVmUHRyPFdl
YkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3Jt
TG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9ybUxvY2F0
aW9uIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghdmFsaWRh
dGVMb2NhdGlvbkxlbmd0aCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldFVuaWZvcm1Mb2NhdGlv
biIsIG5hbWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXNQcmVmaXhSZXNl
cnZlZChuYW1lKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFwcm9ncmFtLT5n
ZXRMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgInByb2dyYW0g
bm90IGxpbmtlZCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgR0MzRGlu
dCB1bmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RP
clplcm8ocHJvZ3JhbSksIG5hbWUpOworICAgIGlmICh1bmlmb3JtTG9jYXRpb24gPT0gLTEpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMg
PSAwOworICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFj
dGl2ZVVuaWZvcm1zKTsKKyAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3Jt
czsgaSsrKSB7CisgICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAgICAgICAgaWYgKCFtX2NvbnRl
eHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRo
ZSBuYW1lIGlmIGl0J3MgYW4gYXJyYXkuCisgICAgICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgo
IlswXSIpKQorICAgICAgICAgICAgaW5mby5uYW1lID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1l
Lmxlbmd0aCgpIC0gMyk7CisgICAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8g
aXRlcmF0ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCwgYXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUg
bmFtZS4KKyAgICAgICAgZm9yIChHQzNEaW50IGluZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7
ICsraW5kZXgpIHsKKyAgICAgICAgICAgIFN0cmluZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSAr
ICJbIiArIFN0cmluZzo6bnVtYmVyKGluZGV4KSArICJdIjsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKG5hbWUgPT0gdW5pZm9ybU5hbWUgfHwgbmFtZSA9PSBpbmZvLm5hbWUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUocHJvZ3JhbSwg
dW5pZm9ybUxvY2F0aW9uLCBpbmZvLnR5cGUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBudWxscHRyOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICAKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAg
CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFZlcnRleEF0
dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOworICAgIH0KKyAgICAKKyAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpW
ZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZl
cnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKyAgICAKKyAgICBpZiAobV9hbmdsZUluc3RhbmNlZEFy
cmF5cyAmJiBwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9E
SVZJU09SX0FOR0xFKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLmRpdmlzb3Ip
OworICAgIAorICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICBpZiAoKCFpc0dM
RVMyQ29tcGxpYW50KCkgJiYgIWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0
VmVydGV4QXR0cmliU3RhdGUoMCkuYnVmZmVyQmluZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXIpCisgICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZworICAgICAgICAgICAgfHwg
IXN0YXRlLmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xC
dWZmZXI+KHN0YXRlLmJ1ZmZlckJpbmRpbmcpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oc3RhdGUuZW5hYmxlZCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FU
VFJJQl9BUlJBWV9OT1JNQUxJWkVEOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRl
Lm5vcm1hbGl6ZWQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJf
QVJSQVlfU0laRToKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5zaXplKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5vcmlnaW5hbFN0cmlkZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLnR5cGUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhG
bG9hdDMyQXJyYXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCkp
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitsb25n
IGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdD
M0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0g
bV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihyZXN1bHQpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBi
b29sIGlzVmFsaWQgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgorICAgICAgICBpc1ZhbGlkID0g
dHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NI
QURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKKyAg
ICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKKyAgICAgICAgICAgIGlzVmFsaWQg
PSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCFpc1ZhbGlkKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJo
aW50IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9j
b250ZXh0LT5oaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYg
KCFidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICAKKyAgICBpZiAoIWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0J1ZmZlcihidWZmZXItPm9iamVj
dCgpKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0NvbnRleHRMb3N0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0TG9zdDsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjppc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkKK3sKKyAgICBpZiAo
bV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uICYmICFtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29s
dXRpb24pIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiQ29udGV4dCBpcyBiZWluZyB1c2VkLiBBdHRl
bXB0IHRvIHJlc29sdmUgdGhlIHBvbGljeS4iKTsKKyAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gY2FudmFzKCktPmRvY3VtZW50KCkudG9wRG9jdW1lbnQoKTsKKyAgICAgICAgUGFnZSogcGFn
ZSA9IGRvY3VtZW50LnBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2UgJiYgIWRvY3VtZW50LnVybCgp
LmlzTG9jYWxGaWxlKCkpCisgICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5j
bGllbnQoKS5yZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwoZG9jdW1lbnQudXJsKCkpOworICAgICAg
ICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5IGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3Vs
dCBmcm9tIHJlc29sdXRpb24uIEEgbW9yZQorICAgICAgICAvLyBjb21wbGV0ZSBpbXBsZW1lbnRh
dGlvbiBtaWdodCB0cnkgdG8gY29uc3RydWN0IGEgcmVhbCBjb250ZXh0LCBldGMgYW5kIHByb2Nl
ZWQKKyAgICAgICAgLy8gd2l0aCBub3JtYWwgb3BlcmF0aW9uLgorICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MTIyCisgICAgICAgIG1faGFzUmVx
dWVzdGVkUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBt
X2NvbnRleHRMb3N0IHx8IG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKK30KKworR0MzRGJv
b2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxp
dHkoImlzRW5hYmxlZCIsIGNhcCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChjYXAgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkKKyAgICAgICAgcmV0dXJuIG1fc3RlbmNp
bEVuYWJsZWQ7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7Cit9CisKK0dD
M0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzRnJhbWVidWZmZXIoV2ViR0xG
cmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCBpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmICgh
ZnJhbWVidWZmZXItPmhhc0V2ZXJCZWVuQm91bmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0
KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1Byb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBt
X2NvbnRleHQtPmlzUHJvZ3JhbShwcm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFu
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVm
ZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBpZiAoIXJlbmRl
cmJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICByZXR1cm4gbV9jb250ZXh0LT5pc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXItPm9iamVjdCgp
KTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNTaGFkZXIo
V2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRl
eHQtPmlzU2hhZGVyKHNoYWRlci0+b2JqZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjppc1RleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQorewor
ICAgIGlmICghdGV4dHVyZSB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIGlmICghdGV4dHVyZS0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc1RleHR1cmUodGV4
dHVyZS0+b2JqZWN0KCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omxp
bmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+bGluZVdpZHRoKHdpZHRoKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsaW5rUHJvZ3JhbShXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdCgibGlua1Byb2dyYW0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIFdlYkdMU2hhZGVyKiB2ZXJ0ZXhTaGFkZXIg
PSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NI
QURFUik7CisgICAgICAgIFdlYkdMU2hhZGVyKiBmcmFnbWVudFNoYWRlciA9IHByb2dyYW0tPmdl
dEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAg
ICAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIWZy
YWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNWYWxpZCgpIHx8ICFtX2NvbnRleHQt
PnByZWNpc2lvbnNNYXRjaChvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJv
KGZyYWdtZW50U2hhZGVyKSkgfHwgIW1fY29udGV4dC0+Y2hlY2tWYXJ5aW5nc1BhY2tpbmcob2Jq
ZWN0T3JaZXJvKHZlcnRleFNoYWRlciksIG9iamVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpKSB7
CisgICAgICAgICAgICBwcm9ncmFtLT5zZXRMaW5rU3RhdHVzKGZhbHNlKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPmxpbmtQcm9n
cmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CisgICAgcHJvZ3JhbS0+aW5jcmVhc2VMaW5rQ291
bnQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwaXhlbFN0b3JlaShH
QzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19GTElQX1lfV0VCR0w6CisgICAgICAgIG1fdW5w
YWNrRmxpcFkgPSBwYXJhbTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOgorICAgICAgICBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEgPSBwYXJhbTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKKyAgICAgICAg
aWYgKHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wgfHwg
cGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpCisgICAgICAgICAgICBtX3VucGFja0Nv
bG9yc3BhY2VDb252ZXJzaW9uID0gc3RhdGljX2Nhc3Q8R0MzRGVudW0+KHBhcmFtKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBV
TlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UEFDS19BTElHTk1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdO
TUVOVDoKKyAgICAgICAgaWYgKHBhcmFtID09IDEgfHwgcGFyYW0gPT0gMiB8fCBwYXJhbSA9PSA0
IHx8IHBhcmFtID09IDgpIHsKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6UEFDS19BTElHTk1FTlQpCisgICAgICAgICAgICAgICAgbV9wYWNrQWxpZ25tZW50ID0g
cGFyYW07CisgICAgICAgICAgICBlbHNlIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5UOgorICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50ID0gcGFyYW07CisgICAg
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBhbGln
bm1lbnQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NvbnRleHQtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgLy8g
RHVlIHRvIFdlYkdMJ3Mgc2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9zc2li
bGUgdG8KKyAgICAvLyB0YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCisgICAg
QVNTRVJUKGNhbnZhcygpLT5vcmlnaW5DbGVhbigpKTsKKyAgICAvLyBWYWxpZGF0ZSBpbnB1dCBw
YXJhbWV0ZXJzLgorICAgIGlmICghcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVscyIsICJubyBkZXN0
aW5hdGlvbiBBcnJheUJ1ZmZlclZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBz
d2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJp
bnZhbGlkIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBp
eGVscyIsICJmb3JtYXQgbm90IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBw
aXhlbCB0eXBlLgorICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFt
ZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNv
dXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIs
IHJlYXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gQ2FsY3VsYXRlIGFycmF5
IHNpemUsIHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCisgICAg
dW5zaWduZWQgdG90YWxCeXRlc1JlcXVpcmVkID0gMDsKKyAgICB1bnNpZ25lZCBwYWRkaW5nID0g
MDsKKyAgICBpZiAoIW1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKSB7CisgICAgICAgIEdDM0Rl
bnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5
cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwg
JnBhZGRpbmcpOworICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VS
Uk9SKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgInJlYWRQaXhlbHMi
LCAiaW52YWxpZCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgbGFyZ2UgZW5v
dWdoIGZvciBkaW1lbnNpb25zIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICB2b2lkKiBkYXRhID0gcGl4
ZWxzLT5iYXNlQWRkcmVzcygpOworICAgIAorICAgIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1
ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy5nZXQoKSk7CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAg
ICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZWFkblBpeGVsc0VYVCh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBkYXRh
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgfQorICAgIAorI2lmIE9T
KERBUldJTikKKyAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIC8vIHdlIGhhdmVu
J3QgY29tcHV0ZWQgcGFkZGluZworICAgICAgICBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJ
bkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90
YWxCeXRlc1JlcXVpcmVkLCAmcGFkZGluZyk7CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNl
Y3Rpb24gd2hlbiBHTCBkcml2ZXIgYnVnIG9uIE1hYyBBTkQgdGhlIEdMRVMgZHJpdmVyIGJ1Zwor
ICAgIC8vIG9uIFFDIGlzIGZpeGVkLCBpLmUuLCB3aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVs
cyBzaG91bGQKKyAgICAvLyBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KKyAgICBpZiAo
IW1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVz
KCkuYWxwaGEpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSk7CisgICAgICAgIGZvciAoR0MzRHNpemVpIGl5ID0g
MDsgaXkgPCBoZWlnaHQ7ICsraXkpIHsKKyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpIGl4ID0g
MDsgaXggPCB3aWR0aDsgKytpeCkgeworICAgICAgICAgICAgICAgIHBpeGVsc1szXSA9IDI1NTsK
KyAgICAgICAgICAgICAgICBwaXhlbHMgKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHBpeGVscyArPSBwYWRkaW5nOworICAgICAgICB9CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9j
b250ZXh0LT5yZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5k
ZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKCFtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmlu
ZGluZy0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3Vu
ZCByZW5kZXJidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlk
YXRlU2l6ZSgicmVuZGVyYnVmZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICBy
ZXR1cm47CisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkE0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfSU5ERVg4OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUOgor
ICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThf
RVhUICYmICFtX2V4dHNSR0IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFs
aWQgaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50
ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRp
bmctPnNldElzVmFsaWQodHJ1ZSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9y
dGVkKCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0
LCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDgsIHdpZHRoLCBoZWlnaHQpOworICAgICAg
ICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgICAg
IG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3RlbmNpbFN1cHBvcnRl
ZCgpKTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChp
bnRlcm5hbGZvcm1hdCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJi
dWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVh
biBpbnZlcnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2Npc3NvcihHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlk
YXRlU2l6ZSgic2Npc3NvciIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAg
bV9jb250ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBj
b25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47CisgICAg
U3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9IFN0cmlwQ29tbWVudHMoc3RyaW5nKS5yZXN1
bHQoKTsKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJzaGFkZXJTb3VyY2UiLCBzdHJpbmdXaXRo
b3V0Q29tbWVudHMpKQorICAgICAgICByZXR1cm47CisgICAgc2hhZGVyLT5zZXRTb3VyY2Uoc3Ry
aW5nKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShvYmplY3RPclplcm8oc2hhZGVyKSwg
c3RyaW5nV2l0aG91dENvbW1lbnRzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFz
aykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICBtX3N0ZW5jaWxG
dW5jUmVmQmFjayA9IHJlZjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CisgICAgbV9z
dGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKGZ1
bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3Rl
bmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJl
ZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVu
Y1NlcGFyYXRlIiwgZnVuYykpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGZhY2UpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKKyAgICAgICAgbV9z
dGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7
CisgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKKyAgICAgICAgbV9zdGVuY2lsRnVu
Y01hc2tCYWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJPTlQ6CisgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7CisgICAgICAgIG1f
c3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7Cisg
ICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShm
YWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwor
ICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNr
KG1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxNYXNr
U2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChmYWNlKSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6CisgICAgICAgIG1f
c3RlbmNpbE1hc2sgPSBtYXNrOworICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UOgorICAgICAg
ICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAic3RlbmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZh
bGlkIGZhY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPnN0ZW5j
aWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51
bSB6cGFzcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9jb250ZXh0LT5zdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNE
ZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3Mp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY29udGV4dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNz
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEQmFzZShH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0
dXJuZWQuCisgICAgZWMgPSAwOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0
dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgQVNTRVJUKHZhbGlk
YXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQs
IHR5cGUpKTsKKyAgICBBU1NFUlQodGV4KTsKKyAgICBBU1NFUlQoIWxldmVsIHx8ICFXZWJHTFRl
eHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7CisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAg
ICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVtZW50YXRpb24gY2xlYXJzIHRleHR1
cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9yZSB0cnVlLgorICAgICAgICAvLyBG
b3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFyZSB1c2luZyBBTkdMRV9kZXB0aF90
ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcworICAgICAgICAvLyBjYW4gbm90IGJlIGNsZWFy
ZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJlIGNsZWFyZWQgYnkgYmluZGluZyB0byBhbiBm
Ym8gYW5kIGNhbGxpbmcKKyAgICAgICAgLy8gY2xlYXIuCisgICAgICAgIGlmIChpc1Jlc291cmNl
U2FmZSgpKQorICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbnVs
bHB0cik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYm9vbCBzdWNjZWVkID0gbV9jb250
ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtX3VucGFja0FsaWdu
bWVudCk7CisgICAgICAgICAgICBpZiAoIXN1Y2NlZWQpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFi
bGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpOworICAgICAgICBtX2Nv
bnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgICAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGZ1bmN0aW9uIGZhaWxl
ZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBmb3IgdGhp
cyBsZXZlbC4KKyAgICAgICAgICAgIHRleC0+bWFya0ludmFsaWQodGFyZ2V0LCBsZXZlbCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgdGV4LT5zZXRMZXZlbElu
Zm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkRJbXBsKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGRhdGE7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGlt
YWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
Q29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOworICAgIGlm
ICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIs
ICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5p
bWFnZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhh
T3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBjb25zdCB2b2lkKiBpbWFn
ZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7CisgICAgCisgICAg
Ym9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxp
cFkpCisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAg
IGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9y
bWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0
b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJh
Y3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJ
bWFnZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVk
Q29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwor
fQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuYyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0
aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHNvdXJjZVR5cGUsIEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQpCit7Cisg
ICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25U
eXBlLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBmb3JtYXQsIHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2ViR0xU
ZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyhmdW5jdGlvbk5hbWUsIHRh
cmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PSBOb3RUZXhTdWJJbWFnZTJEKSB7CisgICAgICAg
IGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1
ZmZlclZpZXcsIGZ1bmN0aW9uIHZhbGlkYXRlVGV4RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hl
dGhlciB0byB2YWxpZGF0ZSB0aGUgU2V0dGFibGVUZXhGb3JtYXQKKyAgICAgICAgLy8gYnkgY2hl
Y2tpbmcgaWYgdGhlIEFycmF5QnVmZmVyVmlldyBpcyBudWxsIG9yIG5vdC4KKyAgICAgICAgaWYg
KHNvdXJjZVR5cGUgIT0gU291cmNlQXJyYXlCdWZmZXJWaWV3KSB7CisgICAgICAgICAgICBpZiAo
IXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0
aW9uTmFtZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlm
IG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAw
IHx8IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRp
bWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkg
fHwgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkg
eworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmUtPmdl
dEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRU
eXBlKHRhcmdldCwgbGV2ZWwpICE9IHR5cGUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
dHlwZSBhbmQgZm9ybWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGludCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZp
ZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSgidGV4SW1hZ2UyRCIsIGxldmVsLCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscywgTnVsbEFsbG93ZWQpCisgICAgICAg
IHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3Vy
Y2VBcnJheUJ1ZmZlclZpZXcsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKyAg
ICB2b2lkKiBkYXRhID0gcGl4ZWxzID8gcGl4ZWxzLT5iYXNlQWRkcmVzcygpIDogMDsKKyAgICBW
ZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CisgICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQg
PSBmYWxzZTsKKyAgICBpZiAoZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEpKSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURh
dGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRhdGEg
PSB0ZW1wRGF0YS5kYXRhKCk7CisgICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9IHRydWU7
CisgICAgfQorICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwor
ICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLCBl
Yyk7CisgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKKyAgICAgICAgbV9jb250ZXh0LT5w
aXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tB
bGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
cGl4ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJE
LCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMt
PndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBib29sIG5lZWRDb252
ZXJzaW9uID0gdHJ1ZTsKKyAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMg
b2YgZm9ybWF0IFJHQkE4LgorICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3Rp
bmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxp
cCBvciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFtX3VucGFj
a0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgJiYgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpCisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAg
IGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgMSk7CisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVk
Q29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSwgZWMpOwor
ICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdu
bWVudCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UqIGltYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGludCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICBJbnRTaXplIHNpemUod2lkdGgsIGhlaWdo
dCk7CisgICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgSW1hZ2VCdWZmZXIq
IGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKKyAgICBpZiAo
IWJ1ZikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VU
X09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2lu
dCgpLCBpbWFnZS0+c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgp
LCBzaXplKTsKKyAgICBidWYtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdl
KEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VF
bGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgi
dGV4SW1hZ2UyRCIsIGltYWdlLCBlYykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9y
UmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNT
VkdJbWFnZSgpKQorICAgICAgICBpbWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIo
aW1hZ2VGb3JSZW5kZXIuZ2V0KCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEp
OworICAgIAorICAgIGlmICghaW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4
SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VG
b3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNE
OjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwg
ZWMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgY2FudmFzLCBlYykgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhU
TUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53
aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0
dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgLy8gSWYgcG9zc2li
bGUsIGNvcHkgZnJvbSB0aGUgY2FudmFzIGVsZW1lbnQgZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUK
KyAgICAvLyB2aWEgdGhlIEdQVSwgd2l0aG91dCBhIHJlYWQtYmFjayB0byBzeXN0ZW0gbWVtb3J5
LgorICAgIC8vCisgICAgLy8gRklYTUU6IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkvVU5T
SUdORURfQllURSBzaG91bGQgYmUgbGlmdGVkIHdoZW4KKyAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29w
eVRvUGxhdGZvcm1UZXh0dXJlIGltcGxlbWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4K
KyAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1
cmUgJiYgdHlwZSA9PSB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICYm
IChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpIHsKKyAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Cisg
ICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29u
dGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgo
KSwgY2FudmFzLT5oZWlnaHQoKSwgdHlwZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gY2FudmFz
LT5nZXRJbWFnZURhdGEoKTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICB0ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5n
ZXQoKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLCBH
cmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitQYXNzUmVmUHRy
PEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWRlb0ZyYW1lVG9JbWFnZShIVE1M
VmlkZW9FbGVtZW50KiB2aWRlbywgQmFja2luZ1N0b3JlQ29weSBiYWNraW5nU3RvcmVDb3B5LCBF
eGNlcHRpb25Db2RlJikKK3sKKyAgICBJbnRTaXplIHNpemUodmlkZW8tPnZpZGVvV2lkdGgoKSwg
dmlkZW8tPnZpZGVvSGVpZ2h0KCkpOworICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2dlbmVyYXRl
ZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFidWYpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlksICJ0ZXhJ
bWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIEludFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKyAgICAvLyBGSVhNRTogVHVybiB0aGlzIGludG8gYSBHUFUtR1BVIHRleHR1cmUgY29weSBp
bnN0ZWFkIG9mIENQVSByZWFkYmFjay4KKyAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoYnVmLT5jb250ZXh0KCksIGRlc3RSZWN0KTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1h
Z2UoYmFja2luZ1N0b3JlQ29weSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8s
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleEltYWdlMkQiLCB2
aWRlbywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RU
ZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBHbyB0
aHJvdWdoIHRoZSBmYXN0IHBhdGggZG9pbmcgYSBHUFUtR1BVIHRleHR1cmVzIGNvcHkgd2l0aG91
dCBhIHJlYWRiYWNrIHRvIHN5c3RlbSBtZW1vcnkgaWYgcG9zc2libGUuCisgICAgLy8gT3RoZXJ3
aXNlLCBpdCB3aWxsIGZhbGwgYmFjayB0byB0aGUgbm9ybWFsIFNXIHBhdGguCisgICAgLy8gRklY
TUU6IFRoZSBjdXJyZW50IHJlc3RyaWN0aW9ucyByZXF1aXJlIHRoYXQgZm9ybWF0IHNob3VkIGJl
IFJHQiBvciBSR0JBLAorICAgIC8vIHR5cGUgc2hvdWxkIGJlIFVOU0lHTkVEX0JZVEUgYW5kIGxl
dmVsIHNob3VsZCBiZSAwLiBJdCBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUuCisgICAgV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIs
IHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEID09
IHRhcmdldCAmJiB0ZXh0dXJlCisgICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpCisgICAgICAgICYm
IHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgJiYgKHRl
eHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpCisgICAgICAgICYm
ICFsZXZlbCkgeworICAgICAgICBpZiAodmlkZW8tPmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3Jt
VGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBsZXZlbCwgdHlwZSwg
aW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkp
IHsKKyAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIHR5
cGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8v
IE5vcm1hbCBwdXJlIFNXIHBhdGguCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJh
bWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwor
ICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVt
dWx0aXBseUFscGhhLCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp0ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGZsb2F0IHBhcmFtZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xUZXh0
dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQYXJhbWV0ZXIiLCB0YXJnZXQs
IGZhbHNlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAocG5h
bWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICAgICAgaWYgKChpc0Zs
b2F0ICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJh
bWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKKyAgICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJh
bWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpSRVBFQVQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4
dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKCFtX2V4dFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwg
RVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRl
eFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKGlzRmxvYXQpIHsKKyAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJmKHBu
YW1lLCBwYXJhbWYpOworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBw
bmFtZSwgcGFyYW1mKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmko
cG5hbWUsIHBhcmFtaSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQs
IHBuYW1lLCBwYXJhbWkpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rm
bG9hdCBwYXJhbSkKK3sKKyAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgcGFyYW0sIDAs
IHRydWUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFBhcmFtZXRl
cmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKK3sKKyAg
ICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFyYW0sIGZhbHNlKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAv
LyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIGVjID0g
MDsKKyAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CisgICAgQVNTRVJUKHZhbGlkYXRlVGV4
RnVuY1BhcmFtZXRlcnMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxl
dmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSkpOworICAgIEFTU0VS
VCh2YWxpZGF0ZVNpemUoInRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSk7CisgICAg
QVNTRVJUKHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQp
KTsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1
YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCgoeG9m
ZnNldCArIHdpZHRoKSA+PSAwKTsKKyAgICBBU1NFUlQoKHlvZmZzZXQgKyBoZWlnaHQpID49IDAp
OworICAgIEFTU0VSVCh0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpID49ICh4b2Zmc2V0ICsg
d2lkdGgpKTsKKyAgICBBU1NFUlQodGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkgPj0gKHlv
ZmZzZXQgKyBoZWlnaHQpKTsKKyAgICBBU1NFUlQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKSA9PSBmb3JtYXQpOworICAgIEFTU0VSVCh0ZXgtPmdldFR5cGUodGFyZ2V0LCBs
ZXZlbCkgPT0gdHlwZSk7CisgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxz
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJESW1w
bChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwg
R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMg
PSAwOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJ
bWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBs
eUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNE
OjpOT05FKTsgIAorICAgIGlmICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0g
aW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKKyAgICBHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7CisgICAg
Y29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVsRGF0
YSgpOworICAgIAorICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOworICAgIGlmICh0eXBl
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFE
b05vdGhpbmcgJiYgIWZsaXBZKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAg
IGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1h
Z2VQaXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3Jt
YXQsIGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWln
aHQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChtX3VucGFja0FsaWdubWVu
dCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCBm
b3JtYXQsIHR5cGUsICBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERh
dGEsIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250
ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91
bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0
YSgidGV4U3ViSW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBp
eGVscywgTnVsbE5vdEFsbG93ZWQpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1
YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRhcmdldCwg
bGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5
b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VB
ZGRyZXNzKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOworICAgIGJvb2wgY2hhbmdl
VW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7CisgICAgaWYgKGRhdGEgJiYgKG1fdW5wYWNrRmxpcFkg
fHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+
ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBt
X3VucGFja1ByZW11bHRpcGx5QWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wRGF0YSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tB
bGlnbm1lbnQgPSB0cnVlOworICAgIH0KKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQor
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5ULCAxKTsKKyAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKKyAg
ICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVu
dCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1
YkltYWdlMkQsIFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxz
LT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlv
ZmZzZXQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7
CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJ
bWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4KKyAgICAvLyBObyBjb252ZXJzaW9u
IGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lH
TkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVk
LgorICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiAhbV91bnBhY2tGbGlwWSAmJiAhbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwor
ICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhl
bHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
LCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxp
Z25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWln
aHQoKSwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxz
LT5kYXRhKCktPmRhdGEoKSwgZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQor
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0g
MDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFn
ZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFnZSwgZWMpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFn
ZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoaW1hZ2VG
b3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKKyAgICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1h
Z2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVyLmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2Ut
PmhlaWdodCgpLCAxKTsKKyAgICAKKyAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VF
bGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBp
bWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdl
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFz
RWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZhcywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFz
RWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+
aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdl
dEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAgIHRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEu
Z2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFn
ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgdmlkZW8sIGVjKQorICAg
ICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwg
U291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB2aWRlby0+dmlk
ZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0
LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VN
b2RlKCksIGVjKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4U3Vi
SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBl
LCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFs
b2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3Jh
bSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9u
IG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0
aW9uLCB2LCAxKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9y
bTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCksIHYtPmRhdGEoKSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9y
bTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9u
LT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMWkiLCAi
bG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FN
UExFUl9DVUJFKSAmJiB4ID49IChpbnQpbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5p
Zm9ybTFpIiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBs
b2NhdGlvbiwgdiwgMSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24t
PnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlw
ZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSX0NVQkUpIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHYtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2
LT5kYXRhKClbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7
CisgICAgICAgICAgICAgICAgTE9HKFdlYkdMLCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVk
XT0lZC4gTG9jYXRpb24gdHlwZSA9ICUwNFguIiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2
LT5kYXRhKClbaV0sIGxvY2F0aW9uLT50eXBlKCkpOworICAgICAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIs
ICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0x
aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpLCB2LT5kYXRhKCkpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2
IiwgbG9jYXRpb24sIHYsIHNpemUsIDEpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYg
KGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9j
YXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7
ICsraSkgeworICAgICAgICAgICAgaWYgKCgoR0MzRGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8
aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2Iiwg
ImludmFsaWQgdGV4dHVyZSB1bml0Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFp
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMmYiLCAibG9jYXRp
b24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2Iiwg
bG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51
bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDIsIHYtPmRhdGEo
KSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVp
IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6
ZSAvIDIsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0y
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0y
aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxvY2F0aW9uLCB2LCAyKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgdi0+bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMml2IiwgbG9jYXRpb24sIHYsIHNp
emUsIDIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMiwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlm
IChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5p
Zm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2YobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHgsIHksIHopOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMy
QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCAzKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVu
Z3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
ZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVT
RURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMykp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5w
cm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2kiLCAibG9j
YXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwg
eSwgeik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNp
diIsIGxvY2F0aW9uLCB2LCAzKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4
dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAzLCB2LT5k
YXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBz
aXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9y
bTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdD
M0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24t
PnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJs
b2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4
LCB5LCB6LCB3KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVu
aWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgNCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8g
NCwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2
LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gNCwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9u
LT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAi
bG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwg
eCwgeSwgeiwgdyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9y
bTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5p
Zm9ybTRpdiIsIGxvY2F0aW9uLCB2LCA0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1f
Y29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0
LCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZv
cm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCBzaXplIC8gNCwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYi
LCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkg
LyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0
ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB0cmFuc3Bvc2UsIHYpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSog
diwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0
ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgOSkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gOSwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51
bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gOSwgdHJhbnNwb3Nl
LCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4
NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYsIDE2KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAxNiwgdHJhbnNw
b3NlLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVu
aWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9y
bU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2KSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgc2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAg
ICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJ1c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRl
ZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgcHJvZ3JhbSA9
IDA7CisgICAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ1c2VQcm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKG1fY3VycmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBp
ZiAobV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0
YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBw
cm9ncmFtOworICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dy
YW0pKTsKKyAgICAgICAgaWYgKHByb2dyYW0pCisgICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFj
aGVkKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgidmFsaWRhdGVQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnZhbGlkYXRlUHJvZ3JhbShvYmplY3RPclplcm8o
cHJvZ3JhbSkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0
dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCit7CisgICAgdmVydGV4QXR0cmli
ZkltcGwoInZlcnRleEF0dHJpYjFmIiwgaW5kZXgsIDEsIHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYoR0Mz
RHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwo
InZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCAxKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRy
aWIxZnYiLCBpbmRleCwgdiwgc2l6ZSwgMSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0Mz
RGZsb2F0IHYxKQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIsIGlu
ZGV4LCAyLCB2MCwgdjEsIDAuMGYsIDEuMGYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2
KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYs
IDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJm
dihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICB2
ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjJmdiIsIGluZGV4LCB2LCBzaXplLCAyKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sK
KyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliM2YiLCBpbmRleCwgMywgdjAsIHYx
LCB2MiwgMS4wZik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4
QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCit7CisgICAgdmVydGV4
QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgMyk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1w
bCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYsIHNpemUsIDMpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7Cisg
ICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjRmIiwgaW5kZXgsIDQsIHYwLCB2MSwg
djIsIHYzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRy
aWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRy
aWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCA0KTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2
ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgdiwgc2l6ZSwgNCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0Mz
RGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6
ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwg
ImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpbmRleCA+
PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImluZGV4
IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzaXplIDwg
MSB8fCBzaXplID4gNCB8fCBzdHJpZGUgPCAwIHx8IHN0cmlkZSA+IDI1NSB8fCBvZmZzZXQgPCAw
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQgc2l6ZSwgc3RyaWRlIG9yIG9mZnNl
dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVy
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAibm8gYm91bmQgQVJSQVlfQlVGRkVS
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIg
b2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhlIG9mZnNldCwg
c2l6ZSwgdHlwZSBhbmQgc3RyaWRlCisgICAgdW5zaWduZWQgdHlwZVNpemUgPSBzaXplSW5CeXRl
cyh0eXBlKTsKKyAgICBpZiAoIXR5cGVTaXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwg
ImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgoc3RyaWRl
ICUgdHlwZVNpemUpIHx8IChzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpICUgdHlwZVNp
emUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAic3RyaWRlIG9yIG9mZnNldCBu
b3QgdmFsaWQgZm9yIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHQzNEc2l6
ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5cGVTaXplOworICAgIAorICAgIG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGJ5dGVzUGVyRWxl
bWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50
cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJyYXlCdWZmZXIpOworICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0
aCwgaGVpZ2h0KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwg
eSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1v
ZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
Imxvc2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgbV9jb250ZXh0R3JvdXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bG9zZUNvbnRleHRJbXBsKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHRM
b3N0ID0gdHJ1ZTsKKyAgICBtX2NvbnRleHRMb3N0TW9kZSA9IG1vZGU7CisgICAgCisgICAgaWYg
KG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSB7CisgICAgICAgIC8vIEluZm9ybSB0aGUgZW1iZWRk
ZXIgdGhhdCBhIGxvc3QgY29udGV4dCB3YXMgcmVjZWl2ZWQuIEluIHJlc3BvbnNlLCB0aGUgZW1i
ZWRkZXIgbWlnaHQKKyAgICAgICAgLy8gZGVjaWRlIHRvIHRha2UgYWN0aW9uIHN1Y2ggYXMgYXNr
aW5nIHRoZSB1c2VyIGZvciBwZXJtaXNzaW9uIHRvIHVzZSBXZWJHTCBhZ2Fpbi4KKyAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAg
ICAgICBmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuZGlkTG9zZVdlYkdMQ29udGV4dChtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpKTsKKyAgICB9
CisgICAgCisgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworICAgIAorICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gTWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UgZG8g
bm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRlZCB0ZXh0dXJlIG9yIGZyYW1lYnVmZmVyLgor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmcoMCk7CisgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOworICAgIH0KKyAgICAK
KyAgICAvLyBUaGVyZSBpcyBubyBkaXJlY3Qgd2F5IHRvIGNsZWFyIGVycm9ycyBmcm9tIGEgR0wg
aW1wbGVtZW50YXRpb24gYW5kCisgICAgLy8gbG9vcGluZyB1bnRpbCBnZXRFcnJvcigpIGJlY29t
ZXMgTk9fRVJST1IgbWlnaHQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBpZgorICAgIC8vIHRoZSBk
cml2ZXIgb3IgY29udGV4dCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBidWcuIFNvLCBsb29wIGEgcmVh
c29uYWJseQorICAgIC8vIGxhcmdlIG51bWJlciBvZiB0aW1lcyB0byBjbGVhciBhbnkgZXhpc3Rp
bmcgZXJyb3JzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAg
aWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1Ip
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNl
IGRpc3BsYXkgPSAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpID8gRGlzcGxheUluQ29uc29sZTog
RG9udERpc3BsYXlJbkNvbnNvbGU7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTCwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgbG9zdCIs
IGRpc3BsYXkpOworICAgIAorICAgIC8vIERvbid0IGFsbG93IHJlc3RvcmF0aW9uIHVubGVzcyB0
aGUgY29udGV4dCBsb3N0IGV2ZW50IGhhcyBib3RoIGJlZW4KKyAgICAvLyBkaXNwYXRjaGVkIGFu
ZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBwcmV2ZW50ZWQuCisgICAgbV9yZXN0b3JlQWxsb3dlZCA9
IGZhbHNlOworICAgIAorICAgIC8vIEFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGNv
bnRleHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50CisgICAgLy8gdGhlIHNwZWMgYmVoYXZpb3Ig
b2YgcXVldWVpbmcgYSB0YXNrLgorICAgIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIu
c3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZv
cmNlUmVzdG9yZUNvbnRleHQoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQgbm90IGxvc3QiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpIHsKKyAg
ICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFN5bnRoZXRpY0xvc3RDb250ZXh0KQorICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCByZXN0b3JhdGlvbiBub3QgYWxsb3dl
ZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghbV9yZXN0b3JlVGlt
ZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOwor
fQorCitQbGF0Zm9ybUxheWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikgPyBtX2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKSA6IDA7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdl
YkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dEdyb3VwLT5yZW1v
dmVPYmplY3Qob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
ZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAobV9p
c1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNT
RVJUKCFpc0NvbnRleHRMb3N0KCkpOworICAgIG1fY29udGV4dEdyb3VwLT5hZGRPYmplY3Qob2Jq
ZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZW1vdmVDb250ZXh0
T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0KQoreworICAgIGlmIChtX2lzUGVuZGlu
Z1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHRP
YmplY3RzLnJlbW92ZShvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmFkZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0KiBvYmplY3QpCit7CisgICAg
aWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2NvbnRleHRPYmplY3RzLmFkZChv
YmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRldGFjaEFuZFJl
bW92ZUFsbE9iamVjdHMoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24p
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB3aGlsZSAobV9jb250ZXh0T2JqZWN0cy5zaXpl
KCkgPiAwKSB7CisgICAgICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0T2JqZWN0Kj46Oml0ZXJhdG9y
IGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdpbigpOworICAgICAgICAoKml0KS0+ZGV0YWNoQ29u
dGV4dCgpOworICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpoYXNQ
ZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdG9wKCkKK3sKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7CisgICAgICAgIGZvcmNlTG9z
dENvbnRleHQoU3ludGhldGljTG9zdENvbnRleHQpOworICAgICAgICBkZXN0cm95R3JhcGhpY3ND
b250ZXh0M0QoKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0Ri
b29sZWFuIHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCAmdmFs
dWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsK
K30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJvb2xlYW5B
cnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSykgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKDAsIDApOworICAgIH0KKyAgICBHQzNEYm9v
bGVhbiB2YWx1ZVs0XSA9IHswfTsKKyAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2
YWx1ZSk7CisgICAgYm9vbCBib29sVmFsdWVbNF07CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8
IDQ7ICsraWkpCisgICAgICAgIGJvb2xWYWx1ZVtpaV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1
ZVtpaV0pOworICAgIHJldHVybiBXZWJHTEdldEluZm8oYm9vbFZhbHVlLCA0KTsKK30KKworV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEZsb2F0UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RmbG9hdCB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0
LT5nZXRGbG9hdHYocG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1
ZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRJbnRQ
YXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKHZhbHVlKTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0Rp
bnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7
CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpKTsK
K30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFdlYkdMRmxv
YXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEZmxvYXQgdmFsdWVb
NF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAgICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxVRToKKyAgICAgICAgbGVuZ3RoID0gNDsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICB9CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1
ZSwgbGVuZ3RoKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0Rp
bnQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFs
dWUpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVXUE9SVF9ESU1TOgorICAgICAgICBsZW5n
dGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX0JPWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVDoKKyAgICAgICAg
bGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhJbnQzMkFycmF5Ojpj
cmVhdGUodmFsdWUsIGxlbmd0aCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJv
b2wgcHJlcGFyZVRvRHJhdykKK3sKKyAgICBib29sIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwor
ICAgIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHN0YXRp
Y19jYXN0PFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsYWc+KChtX29lc1RleHR1cmVG
bG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFyRW5h
YmxlZCA6IDApIHwgKG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6
VGV4dHVyZUV4dGVuc2lvbkhhbGZGbG9hdExpbmVhckVuYWJsZWQgOiAwKSk7CisgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpOyArK2lpKSB7
CisgICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmcgJiYgbV90
ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShl
eHRlbnNpb25zKSkKKyAgICAgICAgICAgIHx8IChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1
YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmct
Pm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkpIHsKKyAgICAgICAgICAgIGlmIChp
aSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5h
Y3RpdmVUZXh0dXJlKGlpKTsKKyAgICAgICAgICAgICAgICByZXNldEFjdGl2ZVVuaXQgPSB0cnVl
OworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNldEFjdGl2ZVVuaXQpIHsKKyAgICAgICAgICAg
ICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOworICAgICAgICAgICAgICAgIHJlc2V0
QWN0aXZlVW5pdCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgV2ViR0xUZXh0
dXJlKiB0ZXgyRDsKKyAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4Q3ViZU1hcDsKKyAgICAg
ICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1zZyhT
dHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVyZSB1bml0ICIpICsgU3RyaW5nOjpudW1iZXIo
aWkpCisgICAgICAgICAgICAgICAgICAgICsgIiBpcyBub3QgcmVuZGVyYWJsZS4gSXQgbWF5YmUg
bm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21wYXRpYmxlIHRleHR1cmUgZmlsdGVyaW5nIG9y
IGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgorICAgICAgICAgICAgICAgICAgICArICIgb3Ig
aXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUgd2l0aCBsaW5lYXIgZmlsdGVyaW5nIGFuZCB3
aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxmLWZsb2F0IGxpbmVhciBleHRlbnNpb24gZW5h
YmxlZC4iKTsKKyAgICAgICAgICAgICAgICBwcmludEdMV2FybmluZ1RvQ29uc29sZShmdW5jdGlv
bk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICB0ZXgyRCA9IG1fYmxh
Y2tUZXh0dXJlMkQuZ2V0KCk7CisgICAgICAgICAgICAgICAgdGV4Q3ViZU1hcCA9IG1fYmxhY2tU
ZXh0dXJlQ3ViZU1hcC5nZXQoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy5nZXQoKTsKKyAg
ICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJl
TWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3RleHR1
cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVy
ZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKQorICAgICAgICAg
ICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOworICAgICAgICAgICAgaWYgKG1fdGV4dHVyZVVuaXRz
W2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVD
dWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKQorICAgICAg
ICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhDdWJlTWFwKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKKyAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0
dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpCit7CisgICAgdW5zaWduZWQg
Y2hhciBibGFja1tdID0gezAsIDAsIDAsIDI1NX07CisgICAgbV9ibGFja1RleHR1cmUyRCA9IGNy
ZWF0ZVRleHR1cmUoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBtX2JsYWNrVGV4dHVyZTJELT5vYmplY3QoKSk7CisgICAgbV9jb250
ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBi
bGFjayk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCk7CisgICAgbV9ibGFja1RleHR1cmVDdWJlTWFwID0gY3JlYXRlVGV4dHVyZSgp
OworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVAsIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC0+b2JqZWN0KCkpOworICAgIG1fY29udGV4
dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsK
KyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+dGV4SW1h
Z2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZLCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2Nv
bnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIDApOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0
aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGNvbG9yQnVmZmVy
Rm9ybWF0KQoreworICAgIHVuc2lnbmVkIG5lZWQgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2hh
bm5lbEJpdHNCeUZvcm1hdCh0ZXhJbnRlcm5hbEZvcm1hdCk7CisgICAgdW5zaWduZWQgaGF2ZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KGNvbG9yQnVmZmVyRm9y
bWF0KTsKKyAgICByZXR1cm4gKG5lZWQgJiBoYXZlKSA9PSBuZWVkOworfQorCitHQzNEZW51bSBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQo
KQoreworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGlu
Zy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29s
b3JCdWZmZXJGb3JtYXQoKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmFscGhhKQorICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0I7Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZy
YW1lYnVmZmVyV2lkdGgoKQoreworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgpOworICAgIHJldHVybiBtX2RyYXdpbmdCdWZm
ZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpIDogbV9jb250ZXh0LT5nZXRJbnRl
cm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKK3sKKyAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAg
ICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVySGVpZ2h0KCk7Cisg
ICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdo
dCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOwor
fQorCitXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4
dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJv
b2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQoreworICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9
IG51bGxwdHI7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEOgorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3Rp
dmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6CisgICAgICAgIGlmICghdXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3Rp
dmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQOgorICAgICAg
ICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgfQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAibm8gdGV4dHVyZSIpOworICAgIHJldHVybiB0ZXh0dXJlOworfQorCitib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBjb25zdCB1bnNp
Z25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2OworICAgIGlmIChzdHJpbmcubGVuZ3Ro
KCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsb2NhdGlv
biBsZW5ndGggPiAyNTYiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVNp
emUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkKK3sKKyAg
ICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInNpemUgPCAwIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghdmFsaWRhdGVDaGFy
YWN0ZXIoc3RyaW5nW2ldKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInN0cmluZyBub3QgQVND
SUkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQoreworICAgIHN3aXRjaCAoZm9y
bWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxV
TUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBu
b3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OlNSR0JfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKKyAg
ICBkZWZhdWx0OgorICAgICAgICBpZiAoKGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhU
IHx8IGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKQorICAgICAgICAgICAg
JiYgbV9leHRzUkdCKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGlm
IChtX29lc1RleHR1cmVGbG9hdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6CisgICAgICAgIGlmIChtX29lc1Rl
eHR1cmVIYWxmRmxvYXQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9JTlRfMjRfODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9TSE9SVDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRleHR1cmUpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4
dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgLy8g
VmVyaWZ5IHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9mIGZvcm1hdCBhbmQgdHlwZSBpcyBzdXBwb3J0
ZWQuCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpB
TFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICBpZiAodHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAgICAgJiYgdHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdHlwZSBmb3IgZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VYVDoKKyAgICAgICAgaWYgKHR5cGUgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81CisgICAgICAgICAgICAmJiB0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCB0eXBlIGZvciBSR0IgZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQToKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQ6CisgICAgICAg
IGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAg
ICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80Cisg
ICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81
XzVfNV8xCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAor
ICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0JBIGZvcm1h
dCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAg
aWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9JTlQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxldmVsID4gMCkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAgZm9yIERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgICAgICBpZiAoIW1f
d2ViZ2xEZXB0aFRleHR1cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0
LiBERVBUSF9TVEVOQ0lMIG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVF8yNF84KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBm
b3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhG
dW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsIDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2
ZWwgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgc3dpdGNoICh0YXJn
ZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBp
ZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJs
ZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1h
cFRleHR1cmVMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5n
ZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxl
Z2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQgZG9uJ3QKKyAgICAvLyBnZW5lcmF0ZSBJTlZBTElE
X0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVu
Y3Rpb25UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKK3sKKyAgICAvLyBX
ZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5h
dGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhUTUxJbWFn
ZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0aGlz
IGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgorICAgIGlmICghdmFsaWRhdGVUZXhG
dW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpIHx8ICF2
YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR0MzRGludCBtYXhUZXh0dXJlU2l6ZUZvckxldmVs
ID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwgLSAxIC0gbGV2ZWwpOworICAgIHN3aXRjaCAo
dGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAg
ICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCB8fCBoZWlnaHQgPiBtYXhUZXh0
dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0
IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBpZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1Yklt
YWdlMkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGgg
IT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgaGVpZ2h0IGhlcmUuIEZvciB0ZXhJ
bWFnZSB3aWR0aCA9PSBoZWlnaHQuCisgICAgICAgIC8vIEZvciB0ZXhTdWJJbWFnZSB0aGF0IHdp
bGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5nIHlvZmZzZXQgKyBoZWlnaHQgaXMgaW4gcmFuZ2Uu
CisgICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZv
cm1hdCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChib3JkZXIpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgImJvcmRlciAhPSAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24gZGlzcG9z
aXRpb24pCit7CisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09
IE51bGxBbGxvd2VkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJubyBwaXhlbHMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBp
ZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5
cGUsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmFsaWRhdGVTZXR0
YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpU
eXBlVWludDgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9CWVRF
IGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBK
U0M6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05F
RF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJheSIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAorICAgICAgICBpZiAo
cGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IEZsb2F0MzJBcnJh
eSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgIC8vIEFzIHBlciB0aGUgc3BlY2lmaWNhdGlvbiwgQXJy
YXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdoZW4KKyAgICAgICAgLy8gT0VTX3RleHR1cmVf
aGFsZl9mbG9hdCBpcyBlbmFibGVkLgorICAgICAgICBpZiAocGl4ZWxzKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9BVF9PRVMgYnV0IEFycmF5QnVmZmVyVmlldyBp
cyBub3QgTlVMTCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzUmVxdWlyZWQ7CisgICAgR0MzRGVu
dW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlw
ZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQs
IDApOworICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4
dHVyZSBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYg
KHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7CisgICAgICAgIGlm
IChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7CisgICAgICAgICAgICBlcnJvciA9IG1fY29udGV4
dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAx
LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKKyAgICAgICAgICAgIGlmIChwaXhlbHMtPmJ5dGVM
ZW5ndGgoKSA9PSB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCB3aXRoIFVO
UEFDS19BTElHTk1FTlQgPiAxIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJW
aWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAg
ICByZXR1cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KTsKK30K
KworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhG
dW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcq
IHBpeGVscykKK3sKKyAgICBpZiAoIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4
ZWxzIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdpZHRoIDwgMCB8
fCBoZWlnaHQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYnl0ZXNS
ZXF1aXJlZCA9IDA7CisgICAgCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfQVRDX1JHQl9BTUQ6CisgICAgICAgIHsKKyAgICAgICAgY29uc3QgaW50
IGtCbG9ja1NpemUgPSA4OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKKyAgICAgICAgaW50IG51bUJsb2Nrc0Fj
cm9zcyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAg
aW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tI
ZWlnaHQ7CisgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9j
a3NEb3duICoga0Jsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOgorICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FNRDoKKyAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBPTEFURURfQUxQSEFf
QU1EOgorICAgICAgICB7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gMTY7CisgICAg
ICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tI
ZWlnaHQgPSA0OworICAgICAgICBpbnQgbnVtQmxvY2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2Nr
V2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOworICAgICAgICBpbnQgbnVtQmxvY2tzRG93biA9ICho
ZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAvIGtCbG9ja0hlaWdodDsKKyAgICAgICAgYnl0ZXNS
ZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51bUJsb2Nrc0Rvd24gKiBrQmxvY2tTaXplOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAgICAgICAgeworICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrU2l6ZSA9IDg7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDg7CisgICAg
ICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA4OworICAgICAgICBieXRlc1JlcXVpcmVkID0g
KHN0ZDo6bWF4KHdpZHRoLCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hl
aWdodCkgKiA0ICsgNykgLyBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoK
KyAgICAgICAgeworICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CisgICAgICAgIGNv
bnN0IGludCBrQmxvY2tXaWR0aCA9IDE2OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0
ID0gODsKKyAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwga0Jsb2NrV2lk
dGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICogMiArIDcpIC8ga0Jsb2NrU2l6
ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIGZvcm1hdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSAhPSBieXRlc1JlcXVpcmVkKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZv
ciBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgorICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogeworICAgICAgICBjb25zdCBH
QzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0OworICAgICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2Nr
SGVpZ2h0ID0gNDsKKyAgICAgICAgY29uc3QgR0MzRGludCBtYXhUZXh0dXJlU2l6ZSA9IHRhcmdl
dCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKKyAgICAgICAg
Y29uc3QgR0MzRHNpemVpIG1heENvbXByZXNzZWREaW1lbnNpb24gPSBtYXhUZXh0dXJlU2l6ZSA+
PiBsZXZlbDsKKyAgICAgICAgYm9vbCB3aWR0aFZhbGlkID0gKGxldmVsICYmIHdpZHRoID09IDEp
IHx8IChsZXZlbCAmJiB3aWR0aCA9PSAyKSB8fCAoISh3aWR0aCAlIGtCbG9ja1dpZHRoKSAmJiB3
aWR0aCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKKyAgICAgICAgYm9vbCBoZWlnaHRWYWxp
ZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0gMSkgfHwgKGxldmVsICYmIGhlaWdodCA9PSAyKSB8fCAo
IShoZWlnaHQgJSBrQmxvY2tIZWlnaHQpICYmIGhlaWdodCA8PSBtYXhDb21wcmVzc2VkRGltZW5z
aW9uKTsKKyAgICAgICAgaWYgKCF3aWR0aFZhbGlkIHx8ICFoZWlnaHRWYWxpZCkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRC
UFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJC
UFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180
QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENf
MkJQUFYxX0lNRzoKKyAgICAgICAgLy8gSGVpZ2h0IGFuZCB3aWR0aCBtdXN0IGJlIHBvd2VycyBv
ZiAyLgorICAgICAgICBpZiAoKHdpZHRoICYgKHdpZHRoIC0gMSkpIHx8IChoZWlnaHQgJiAoaGVp
Z2h0IC0gMSkpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBp
bnZhbGlkIGZvciBsZXZlbCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVD
b21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51
bSBmb3JtYXQsIFdlYkdMVGV4dHVyZSogdGV4KQoreworICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5
b2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoZm9ybWF0
KSB7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAg
ICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgY29uc3QgaW50IGtCbG9j
a0hlaWdodCA9IDQ7CisgICAgICAgIGlmICgoeG9mZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9m
ZnNldCAlIGtCbG9ja0hlaWdodCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNl
dCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBsZSBvZiA0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdpZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lk
dGgodGFyZ2V0LCBsZXZlbCkKKyAgICAgICAgICAgIHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgt
PmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJk
aW1lbnNpb25zIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1
bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKKyAgICB9
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lN
RzogeworICAgICAgICBpZiAoeG9mZnNldCB8fCB5b2Zmc2V0KSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlvZmZzZXQgbXVzdCBiZSB6ZXJvIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0
V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAgICAgICAgICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhl
aWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNp
b25zIG11c3QgbWF0Y2ggZXhpc3RpbmcgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5z
aW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7
CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3TW9kZShjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9JTlRTOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVfU1RSSVA6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9M
T09QOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVTOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRSSUFOR0xFX0ZBTjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVM6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgZHJhdyBtb2RlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIGlmIChtX3N0ZW5jaWxNYXNrICE9IG1fc3RlbmNp
bE1hc2tCYWNrIHx8IG1fc3RlbmNpbEZ1bmNSZWYgIT0gbV9zdGVuY2lsRnVuY1JlZkJhY2sgfHwg
bV9zdGVuY2lsRnVuY01hc2sgIT0gbV9zdGVuY2lsRnVuY01hc2tCYWNrKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3RlbmNpbHMgc2V0dGluZ3MgZG8gbm90IG1hdGNo
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdGVuY2lsRnVuYyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZ1bmMpCit7CisgICAgc3dpdGNoIChmdW5j
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TkVWRVI6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TEVTUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMRVFVQUw6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFQVRFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpHRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RVFVQUw6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxXQVlTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cHJpbnRHTEVycm9yVG9D
b25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIW1fbnVtR0xFcnJvcnNU
b0NvbnNvbGVBbGxvd2VkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLS1tX251bUdMRXJy
b3JzVG9Db25zb2xlQWxsb3dlZDsKKyAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUobWVzc2FnZSk7
CisgICAgCisgICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkKKyAgICAgICAg
cHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDogdG9vIG1hbnkgZXJyb3JzLCBubyBtb3JlIGVy
cm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBjb25zb2xlIGZvciB0aGlzIGNvbnRleHQuIik7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cHJpbnRXYXJuaW5nVG9Db25z
b2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIWNhbnZhcygpKQorICAgICAg
ICByZXR1cm47CisgICAgY2FudmFzKCktPmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsIG1lc3NhZ2UpOwor
fQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRnJhbWVidWZmZXJG
dW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gYXR0YWNobWVudCkKK3sKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycworICAgICAgICAgICAgJiYgYXR0YWNobWVu
dCA+IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMAorICAgICAgICAgICAgJiYg
YXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVudCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RlVOQ19TVUJUUkFDVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVS
U0VfU1VCVFJBQ1Q6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQ6CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6Ok1BWF9FWFQ6CisgICAgICAgIGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6
Ok1JTl9FWFQgfHwgbW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5k
TWluTWF4KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpCit7CisgICAgaWYgKCgoc3JjID09IEdy
YXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xPUiB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKKyAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpP
TkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKQorICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfQ09OU1RBTlRfQ09MT1IpCisgICAgICAgICYmIChzcmMgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVT
X0NPTlNUQU5UX0FMUEhBKSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUg
c3JjIGFuZCBkc3QiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNhcGFi
aWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCit7CisgICAgc3dp
dGNoIChjYXApIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RF
U1Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgY2FwYWJpbGl0eSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sK
KyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3Ro
KCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgR0MzRHNp
emVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
Im5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFs
c2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7
CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1l
LCBsb2NhdGlvbiwgZmFsc2UsIHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVy
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXpl
aSByZXF1aXJlZE1pblNpemUpCit7CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBhcnJheSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIHRyYW5z
cG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0
ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqIHYsIEdDM0RzaXplaSBzaXpl
LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICghbG9jYXRpb24pCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJl
bnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24gaXMgbm90IGZyb20g
Y3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYg
KCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmICh0cmFuc3Bvc2UpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRyYW5z
cG9zZSBub3QgRkFMU0UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAo
c2l6ZSA8IHJlcXVpcmVkTWluU2l6ZSB8fCAoc2l6ZSAlIHJlcXVpcmVkTWluU2l6ZSkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitXZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpCit7CisgICAgV2ViR0xC
dWZmZXIqIGJ1ZmZlciA9IDA7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAgICAgYnVmZmVyID0gbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKS5nZXQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgor
ICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisgICAgc3dpdGNoICh1c2FnZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVB
TV9EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVzoKKyAgICAgICAgcmV0dXJuIGJ1ZmZl
cjsKKyAgICB9CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB1c2FnZSIpOworICAgIHJldHVybiBudWxs
cHRyOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTElt
YWdlRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqIGlt
YWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+Y2Fj
aGVkSW1hZ2UoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gaW1hZ2UiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBjb25zdCBVUkwmIHVybCA9IGltYWdlLT5jYWNoZWRJbWFn
ZSgpLT5yZXNwb25zZSgpLnVybCgpOworICAgIGlmICh1cmwuaXNOdWxsKCkgfHwgdXJsLmlzRW1w
dHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBpbWFn
ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3Jp
Z2luKGltYWdlKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+YnVmZmVyKCkpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgIm5vIGNhbnZhcyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3
b3VsZFRhaW50T3JpZ2luKGNhbnZhcykpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBF
TkFCTEUoVklERU8pCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSFRN
TFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+
dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibm8gdmlkZW8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAod291
bGRUYWludE9yaWdpbih2aWRlbykpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXpl
LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
ImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIElu
IEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4
IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkg
eworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFm
KGluZGV4LCB2MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAg
ICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRl
eEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIDQ6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmKGluZGV4LCB2
MCwgdjEsIHYyLCB2Myk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVlW2lu
ZGV4XTsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVswXSA9IHYwOworICAgIGF0dHJpYlZhbHVlLnZh
bHVlWzFdID0gdjE7CisgICAgYXR0cmliVmFsdWUudmFsdWVbMl0gPSB2MjsKKyAgICBhdHRyaWJW
YWx1ZS52YWx1ZVszXSA9IHYzOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGlu
ZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSBleHBlY3RlZFNpemUpCit7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdikg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoZnVuY3Rpb25OYW1lLCBpbmRleCwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSwgZXhwZWN0ZWRTaXplKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4cGVj
dGVkU2l6ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJp
bmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJbiBH
TCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgorICAgIGlmIChpbmRleCB8
fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsK
KyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYo
aW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YjNmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAg
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJp
YlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07CisgICAgYXR0cmliVmFsdWUuaW5p
dFZhbHVlKCk7CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytpaSkK
KyAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWldID0gdltpaV07Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6aW5pdFZlcnRleEF0dHJpYjAoKQoreworICAgIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0
ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7CisgICAgCisgICAgbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyID0gY3JlYXRlQnVmZmVyKCk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZl
ci0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKKyAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgc3RhdGUuYnVmZmVyQmluZGluZyA9IG1fdmVydGV4
QXR0cmliMEJ1ZmZlcjsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgMCk7CisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheSgwKTsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gMDsKKyAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
VmFsdWVbMV0gPSAwLjBmOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gMC4w
ZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IDEuMGY7CisgICAgbV9mb3Jj
ZUF0dHJpYjBCdWZmZXJSZWZpbGwgPSBmYWxzZTsKKyAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVm
b3JlID0gZmFsc2U7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2ltdWxh
dGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1WZXJ0ZXgpCit7CisgICAgY29uc3QgV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICBjb25zdCBWZXJ0
ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVlWzBdOworICAg
IGlmICghbV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wg
dXNpbmdWZXJ0ZXhBdHRyaWIwID0gbV9jdXJyZW50UHJvZ3JhbS0+aXNVc2luZ1ZlcnRleEF0dHJp
YjAoKTsKKyAgICBpZiAodXNpbmdWZXJ0ZXhBdHRyaWIwKQorICAgICAgICBtX3ZlcnRleEF0dHJp
YjBVc2VkQmVmb3JlID0gdHJ1ZTsKKyAgICBpZiAoc3RhdGUuZW5hYmxlZCAmJiB1c2luZ1ZlcnRl
eEF0dHJpYjApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXVzaW5nVmVydGV4QXR0
cmliMCAmJiAhbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSB0cnVlOworICAgIG1fY29udGV4dC0+
YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJp
YjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBHQzNEc2l6ZWlwdHIgYnVmZmVyRGF0YVNpemUgPSAo
bnVtVmVydGV4ICsgMSkgKiA0ICogc2l6ZW9mKEdDM0RmbG9hdCk7CisgICAgaWYgKGJ1ZmZlckRh
dGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSkgeworICAgICAgICBtX2NvbnRleHQt
PmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgYnVmZmVyRGF0YVNp
emUsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAgICAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJTaXplID0gYnVmZmVyRGF0YVNpemU7CisgICAgICAgIG1fZm9yY2VBdHRy
aWIwQnVmZmVyUmVmaWxsID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHVzaW5nVmVydGV4QXR0cmli
MAorICAgICAgICAmJiAobV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwKKyAgICAgICAgICAgIHx8
IGF0dHJpYlZhbHVlLnZhbHVlWzBdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdCisg
ICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVsxXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVsxXQorICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMl0gIT0gbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KKyAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVl
WzNdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdKSkgeworICAgICAgICAgICAgYXV0
byBidWZmZXJEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCAr
IDEpICogNCk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaSBpaSA9IDA7IGlpIDwgbnVtVmVy
dGV4ICsgMTsgKytpaSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0XSA9IGF0
dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsg
MV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsxXTsKKyAgICAgICAgICAgICAgICBidWZmZXJEYXRhW2lp
ICogNCArIDJdID0gYXR0cmliVmFsdWUudmFsdWVbMl07CisgICAgICAgICAgICAgICAgYnVmZmVy
RGF0YVtpaSAqIDQgKyAzXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0gPSBhdHRyaWJWYWx1ZS52
YWx1ZVswXTsKKyAgICAgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gYXR0
cmliVmFsdWUudmFsdWVbMV07CisgICAgICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOworICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyVmFsdWVbM10gPSBhdHRyaWJWYWx1ZS52YWx1ZVszXTsKKyAgICAgICAgICAgIG1fZm9y
Y2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJ1
ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0
YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOworICAgICAgICB9CisgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgMCwgMCwgMCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQoreworICAgIGNvbnN0
IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1f
Ym91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7CisgICAgaWYg
KHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKSB7CisgICAgICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBv
YmplY3RPclplcm8oc3RhdGUuYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3RhdGUuc2l6ZSwgc3RhdGUudHlwZSwgc3RhdGUu
bm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJpZGUsIHN0YXRlLm9mZnNldCk7CisgICAgfQor
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
LCBvYmplY3RPclplcm8obV9ib3VuZEFycmF5QnVmZmVyLmdldCgpKSk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKK3sKKyAg
ICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIp
OworICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICBtX3Jlc3RvcmVBbGxv
d2VkID0gZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICBpZiAobV9jb250ZXh0TG9zdE1v
ZGUgPT0gUmVhbExvc3RDb250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCisgICAgICAgIG1fcmVz
dG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjptYXliZVJlc3RvcmVDb250ZXh0KCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0TG9z
dCk7CisgICAgaWYgKCFtX2NvbnRleHRMb3N0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Ly8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCB1bmxlc3MgdGhlIGRlZmF1
bHQgYmVoYXZpb3Igb2YgdGhlCisgICAgLy8gd2ViZ2xjb250ZXh0bG9zdCBldmVudCB3YXMgcHJl
dmVudGVkIGVhcmxpZXIuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIG9mIHRoZSB3YXkgbV9yZXN0
b3JlVGltZXIgaXMgc2V0IHVwIGZvciByZWFsIHZzLiBzeW50aGV0aWMgbG9zdAorICAgIC8vIGNv
bnRleHQgZXZlbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdGVzdCBzaG9y
dC1jaXJjdWl0aW5nCisgICAgLy8gdGhlIHJldHJ5IGxvb3AgZm9yIHJlYWwgY29udGV4dCBsb3N0
IGV2ZW50cy4KKyAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBpbnQgY29udGV4dExvc3RSZWFzb24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOworICAgIAorICAgIHN3aXRjaCAoY29udGV4
dExvc3RSZWFzb24pIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjoKKyAg
ICAgICAgLy8gVGhlIEdyYXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBm
dWxseQorICAgICAgICAvLyBzdXBwb3J0IEdMX0FSQl9yb2J1c3RuZXNzIHNlbWFudGljcyB5ZXQu
IEFsdGVybmF0aXZlbHksIHRoZQorICAgICAgICAvLyBXRUJHTF9sb3NlX2NvbnRleHQgZXh0ZW5z
aW9uIG1pZ2h0IGhhdmUgYmVlbiB1c2VkIHRvIGZvcmNlCisgICAgICAgIC8vIGEgbG9zdCBjb250
ZXh0LgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6R1VJTFRZX0NPTlRF
WFRfUkVTRVRfQVJCOgorICAgICAgICAvLyBUaGUgcmVuZGVyaW5nIGNvbnRleHQgaXMgbm90IHJl
c3RvcmVkIGlmIHRoaXMgY29udGV4dCB3YXMKKyAgICAgICAgLy8gZ3VpbHR5IG9mIGNhdXNpbmcg
dGhlIGdyYXBoaWNzIHJlc2V0LgorICAgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoIldBUk5J
Tkc6IFdlYkdMIGNvbnRlbnQgb24gdGhlIHBhZ2UgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRv
IHJlc2V0OyBub3QgcmVzdG9yaW5nIHRoZSBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6SU5OT0NFTlRfQ09OVEVYVF9SRVNFVF9BUkI6CisgICAgICAg
IC8vIEFsd2F5cyBhbGxvdyB0aGUgY29udGV4dCB0byBiZSByZXN0b3JlZC4KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlVOS05PV05fQ09OVEVYVF9SRVNFVF9BUkI6Cisg
ICAgICAgIC8vIFdhcm4uIElkZWFsbHksIHByb21wdCB0aGUgdXNlciB0ZWxsaW5nIHRoZW0gdGhh
dCBXZWJHTAorICAgICAgICAvLyBjb250ZW50IG9uIHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2Vk
IHRoZSBncmFwaGljcyBjYXJkIHRvCisgICAgICAgIC8vIHJlc2V0IGFuZCBhc2sgdGhlbSB3aGV0
aGVyIHRoZXkgd2FudCB0byBjb250aW51ZSBydW5uaW5nCisgICAgICAgIC8vIHRoZSBjb250ZW50
LiBPbmx5IGlmIHRoZXkgc2F5ICJ5ZXMiIHNob3VsZCB3ZSBzdGFydAorICAgICAgICAvLyBhdHRl
bXB0aW5nIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQuCisgICAgICAgIHByaW50V2FybmluZ1RvQ29u
c29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFnZSBtaWdodCBoYXZlIGNhdXNl
ZCB0aGUgZ3JhcGhpY3MgY2FyZCB0byByZXNldCIpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgRnJhbWUqIGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAg
ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFmcmFtZS0+bG9h
ZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQo
KSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+
dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIFNjcm9sbFZpZXcq
IHJvb3QgPSB2aWV3LT5yb290KCk7CisgICAgaWYgKCFyb290KQorICAgICAgICByZXR1cm47Cisg
ICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IHJvb3QtPmhvc3RXaW5kb3coKTsKKyAgICBpZiAo
IWhvc3RXaW5kb3cpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShtX2F0dHJpYnV0ZXMs
IGhvc3RXaW5kb3cpKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4
dExvc3RNb2RlID09IFJlYWxMb3N0Q29udGV4dCkKKyAgICAgICAgICAgIG1fcmVzdG9yZVRpbWVy
LnN0YXJ0T25lU2hvdChzZWNvbmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0cyk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIC8vIFRoaXMgbGlrZWx5IHNob3VsZG4ndCBoYXBwZW4gYnV0IGlzIHRo
ZSBiZXN0IHdheSB0byByZXBvcnQgaXQgdG8gdGhlIFdlYkdMIGFwcC4KKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgIiIs
ICJlcnJvciByZXN0b3JpbmcgY29udGV4dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3Jh
cGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6
UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJh
d2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJhd2luZ0J1ZmZlcjo6RGlz
Y2FyZDsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJlbWVudCBhbHBoYSA9IG1f
YXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDogRHJhd2luZ0J1ZmZlcjo6
T3BhcXVlOworICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVyOjpjcmVhdGUo
Y29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHByZXNlcnZlLCBhbHBoYSk7
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0KKyAgICAKKyAgICBtX2Nv
bnRleHQgPSBjb250ZXh0OworICAgIG1fY29udGV4dExvc3QgPSBmYWxzZTsKKyAgICBzZXR1cEZs
YWdzKCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKKyAgICBjYW52YXMoKS0+ZGlzcGF0
Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRl
eHRyZXN0b3JlZEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpKTsKK30KKworU3RyaW5nIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmVuc3VyZU5vdE51bGwoY29uc3QgU3RyaW5nJiB0ZXh0KSBjb25z
dAoreworICAgIGlmICh0ZXh0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gV1RGOjplbXB0eVN0
cmluZygpOworICAgIHJldHVybiB0ZXh0OworfQorCitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkK
KyAgICA6IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj5bXT4oY2FwYWNpdHkpKQorICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKK3sKK30KKwor
SW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2Fj
aGU6OmltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaW50IGk7CisgICAg
Zm9yIChpID0gMDsgaSA8IG1fY2FwYWNpdHk7ICsraSkgeworICAgICAgICBJbWFnZUJ1ZmZlciog
YnVmID0gbV9idWZmZXJzW2ldLmdldCgpOworICAgICAgICBpZiAoIWJ1ZikKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBpZiAoYnVmLT5sb2dpY2FsU2l6ZSgpICE9IHNpemUpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgYnViYmxlVG9Gcm9udChpKTsKKyAgICAgICAgcmV0dXJu
IGJ1ZjsKKyAgICB9CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1w
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAxKTsKKyAgICBpZiAoIXRlbXApCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGkgPSBzdGQ6Om1pbihtX2NhcGFjaXR5IC0gMSwgaSk7Cisg
ICAgbV9idWZmZXJzW2ldID0gV1RGOjptb3ZlKHRlbXApOworICAgIAorICAgIEltYWdlQnVmZmVy
KiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7CisgICAgYnViYmxlVG9Gcm9udChpKTsKKyAgICBy
ZXR1cm4gYnVmOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdl
QnVmZmVyQ2FjaGU6OmJ1YmJsZVRvRnJvbnQoaW50IGlkeCkKK3sKKyAgICBmb3IgKGludCBpID0g
aWR4OyBpID4gMDsgLS1pKQorICAgICAgICBtX2J1ZmZlcnNbaV0uc3dhcChtX2J1ZmZlcnNbaS0x
XSk7Cit9CisKK25hbWVzcGFjZSB7CisgICAgCisgICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdD
M0RlbnVtIGVycm9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU06CisgICAgICAgICAgICByZXR1cm4g
IklOVkFMSURfRU5VTSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUU6CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfVkFMVUUiOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgICAgIHJldHVy
biAiSU5WQUxJRF9PUEVSQVRJT04iOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpP
VVRfT0ZfTUVNT1JZOgorICAgICAgICAgICAgcmV0dXJuICJPVVRfT0ZfTUVNT1JZIjsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046
CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMOgorICAgICAg
ICAgICAgcmV0dXJuICJDT05URVhUX0xPU1RfV0VCR0wiOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJXZWJHTCBFUlJPUiglMDR4KSIsIGVycm9y
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK30gLy8gbmFtZXNwYWNlIGFub255bW91cworCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVt
IGVycm9yLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9u
LCBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgZGlzcGxheSkKK3sKKyAgICBpZiAobV9zeW50aGVz
aXplZEVycm9yc1RvQ29uc29sZSAmJiBkaXNwbGF5ID09IERpc3BsYXlJbkNvbnNvbGUpIHsKKyAg
ICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsgR2V0RXJyb3JTdHJpbmcoZXJy
b3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1lKSArICI6ICIgKyBTdHJpbmcoZGVzY3Jp
cHRpb24pOworICAgICAgICBwcmludEdMRXJyb3JUb0NvbnNvbGUoc3RyKTsKKyAgICB9CisgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7Cit9CisKKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpwcmludEdMV2FybmluZ1RvQ29uc29sZShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQoreworICAgIGlmIChtX3N5bnRo
ZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7CisgICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmcoIldl
YkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlv
bik7CisgICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIpOworICAgIH0KK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphcHBseVN0ZW5jaWxUZXN0KCkKK3sKKyAgICBi
b29sIGhhdmVTdGVuY2lsQnVmZmVyID0gZmFsc2U7CisgICAgCisgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nKQorICAgICAgICBoYXZlU3RlbmNpbEJ1ZmZlciA9IG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5oYXNTdGVuY2lsQnVmZmVyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFJlZlB0cjxXZWJH
TENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsK
KyAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBhdHRyaWJ1dGVzLT5zdGVuY2lsKCk7CisgICAg
fQorICAgIGVuYWJsZU9yRGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNULAor
ICAgICAgICAgICAgICAgICAgICBtX3N0ZW5jaWxFbmFibGVkICYmIGhhdmVTdGVuY2lsQnVmZmVy
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjplbmFibGVPckRpc2FibGUo
R0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAg
ICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7CisgICAgZWxzZQorICAgICAgICBt
X2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7Cit9CisKK0ludFNpemUgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Y2xhbXBlZENhbnZhc1NpemUoKQoreworICAgIHJldHVybiBJbnRTaXpl
KGNsYW1wKGNhbnZhcygpLT53aWR0aCgpLCAxLCBtX21heFZpZXdwb3J0RGltc1swXSksCisgICAg
ICAgICAgICAgICAgICAgY2xhbXAoY2FudmFzKCktPmhlaWdodCgpLCAxLCBtX21heFZpZXdwb3J0
RGltc1sxXSkpOworfQorCitHQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldE1h
eERyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heERyYXdCdWZmZXJzKQorICAgICAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21h
eERyYXdCdWZmZXJzKTsKKyAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykKKyAgICAgICAg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5U
U19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVy
cyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMgPj0gTUFYX0RSQVdfQlVGRkVSUy4KKyAg
ICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVmZmVycywgbV9tYXhDb2xvckF0dGFjaG1lbnRz
KTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRNYXhDb2xvckF0
dGFjaG1lbnRzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCisgICAgICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhU
LCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1l
bnRzOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNldEJhY2tEcmF3QnVm
ZmVyKEdDM0RlbnVtIGJ1ZikKK3sKKyAgICBtX2JhY2tEcmF3QnVmZmVyID0gYnVmOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIo
KQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCksIGVjKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXN0b3JlQ3VycmVudFRleHR1
cmUyRCgpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBiaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSwgZWMpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnN1cHBvcnRzRHJhd0J1ZmZlcnMoKQoreworICAgIGlmICghbV9kcmF3QnVm
ZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCkgeworICAgICAgICBtX2RyYXdCdWZmZXJzV2Vi
R0xSZXF1aXJlbWVudHNDaGVja2VkID0gdHJ1ZTsKKyAgICAgICAgbV9kcmF3QnVmZmVyc1N1cHBv
cnRlZCA9IFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBvcnRlZCh0aGlzKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgaWYgKCFwcmlt
Y291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0
YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIAorICAgIGJvb2wgdmVydGV4QXR0
cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAg
ICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0
ICsgY291bnQgLSAxKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNo
ZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0FycmF5c0luc3RhbmNlZCIsIHRydWUpOworICAg
IAorICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQs
IHByaW1jb3VudCk7CisgICAgCisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4
QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmli
MFNpbXVsYXRpb24oKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNo
ZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0FycmF5c0luc3RhbmNlZCIsIGZhbHNlKTsKKyAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50
LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQor
eworICAgIGlmICghcHJpbWNvdW50KSB7CisgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0g
MDsKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQi
LCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgcHJpbWNvdW50KSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgCisgICAg
Ym9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkpIHsKKyAgICAgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgICAgIHZhbGlk
YXRlSW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+
KG9mZnNldCksIG51bUVsZW1lbnRzKTsKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9
IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7CisgICAgfQorICAgIGlmICghaXNH
TEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3
RWxlbWVudHNJbnN0YW5jZWQiLCB0cnVlKTsKKyAgICAKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVt
ZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4o
b2Zmc2V0KSwgcHJpbWNvdW50KTsKKyAgICAKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAm
JiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0
ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAg
ICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCBm
YWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVp
bnQgZGl2aXNvcikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInZlcnRleEF0dHJpYkRpdmlzb3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRW
ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyAgICBtX2NvbnRleHQtPnZlcnRl
eEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOworfQorCisgICAgCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODE2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZV9oCisjZGVmaW5lIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VfaAorCisj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIK
KyNpbmNsdWRlICJXZWJHTEdldEluZm8uaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8
cnVudGltZS9GbG9hdDMyQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBBTkdMRUluc3RhbmNlZEFycmF5czsKK2NsYXNzIEVYVEJsZW5kTWluTWF4OworY2xh
c3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOworY2xhc3MgRVhUU2hhZGVyVGV4dHVyZUxP
RDsKK2NsYXNzIEVYVHNSR0I7CitjbGFzcyBFWFRGcmFnRGVwdGg7CitjbGFzcyBIVE1MSW1hZ2VF
bGVtZW50OworY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xh
c3MgSW1hZ2VEYXRhOworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIE9FU1N0YW5kYXJkRGVyaXZhdGl2
ZXM7CitjbGFzcyBPRVNUZXh0dXJlRmxvYXQ7CitjbGFzcyBPRVNUZXh0dXJlRmxvYXRMaW5lYXI7
CitjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0OworY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdExp
bmVhcjsKK2NsYXNzIE9FU1ZlcnRleEFycmF5T2JqZWN0OworY2xhc3MgT0VTRWxlbWVudEluZGV4
VWludDsKK2NsYXNzIFdlYkdMQWN0aXZlSW5mbzsKK2NsYXNzIFdlYkdMQnVmZmVyOworY2xhc3Mg
V2ViR0xDb250ZXh0R3JvdXA7CitjbGFzcyBXZWJHTENvbnRleHRPYmplY3Q7CitjbGFzcyBXZWJH
TENvbXByZXNzZWRUZXh0dXJlQVRDOworY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRD
OworY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM7CitjbGFzcyBXZWJHTENvbnRleHRB
dHRyaWJ1dGVzOworY2xhc3MgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzsKK2NsYXNzIFdlYkdMRGVi
dWdTaGFkZXJzOworY2xhc3MgV2ViR0xEZXB0aFRleHR1cmU7CitjbGFzcyBXZWJHTERyYXdCdWZm
ZXJzOworY2xhc3MgV2ViR0xFeHRlbnNpb247CitjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOworY2xh
c3MgV2ViR0xMb3NlQ29udGV4dDsKK2NsYXNzIFdlYkdMT2JqZWN0OworY2xhc3MgV2ViR0xQcm9n
cmFtOworY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7CitjbGFzcyBXZWJHTFNoYWRlcjsKK2NsYXNz
IFdlYkdMU2hhcmVkT2JqZWN0OworY2xhc3MgV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ7Citj
bGFzcyBXZWJHTFRleHR1cmU7CitjbGFzcyBXZWJHTFVuaWZvcm1Mb2NhdGlvbjsKK2NsYXNzIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisK
K2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBjcmVhdGUoSFRNTENhbnZh
c0VsZW1lbnQqLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKiwgY29uc3QgU3RyaW5nJik7CisgICAg
dmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSgpOworCisjaWYgUExBVEZPUk0oV0lO
KQorLy8gRklYTUU6IEltcGxlbWVudCBhY2NlbGVyYXRlZCAzZCBjYW52YXMgb24gV2luZG93cy4K
K3ZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyNlbHNlCit2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorCitpbnQgZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29u
c3Q7CitpbnQgZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0OworCit2b2lkIGFjdGl2ZVRleHR1
cmUoR0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBhdHRhY2hTaGFkZXIo
V2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJpbmRB
dHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0
LCBXZWJHTEJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgYmluZEZyYW1lYnVmZmVyKEdD
M0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQg
YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhj
ZXB0aW9uQ29kZSYpOwordm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4
dHVyZSosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgYmxlbmRDb2xvcihHQzNEZmxvYXQgcmVkLCBH
QzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwordm9pZCBi
bGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpOwordm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUo
R0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKTsKK3ZvaWQgYmxlbmRGdW5jKEdD
M0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOwordm9pZCBibGVuZEZ1bmNTZXBhcmF0
ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdD
M0RlbnVtIGRzdEFscGhhKTsKKwordm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9u
ZyBsb25nIHNpemUsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJ1ZmZl
ckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2Us
IEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5
QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQg
YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVm
ZmVyKiBkYXRhLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0g
dGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlv
bkNvZGUmKTsKKworR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJn
ZXQpOwordm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzayk7Cit2b2lkIGNsZWFyQ29sb3IoR0Mz
RGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFs
cGhhKTsKK3ZvaWQgY2xlYXJEZXB0aChHQzNEZmxvYXQpOwordm9pZCBjbGVhclN0ZW5jaWwoR0Mz
RGludCk7Cit2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVu
LCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7Cit2b2lkIGNvbXBpbGVTaGFk
ZXIoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CisKK3ZvaWQgY29tcHJlc3NlZFRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKTsKK3ZvaWQg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQs
IEFycmF5QnVmZmVyVmlldyogZGF0YSk7CisKK3ZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIpOwordm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKworUGFzc1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4gY3JlYXRlQnVmZmVyKCk7CitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+
IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CitQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRlUHJv
Z3JhbSgpOworUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRlUmVuZGVyYnVmZmVy
KCk7CitQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwg
RXhjZXB0aW9uQ29kZSYpOworUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IGNyZWF0ZVRleHR1cmUo
KTsKKwordm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2RlKTsKKwordm9pZCBkZWxldGVCdWZmZXIo
V2ViR0xCdWZmZXIqKTsKK3ZvaWQgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciop
Owordm9pZCBkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwordm9pZCBkZWxldGVSZW5kZXJi
dWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKK3ZvaWQgZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVy
Kik7Cit2b2lkIGRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlKik7CisKK3ZvaWQgZGVwdGhGdW5j
KEdDM0RlbnVtKTsKK3ZvaWQgZGVwdGhNYXNrKEdDM0Rib29sZWFuKTsKK3ZvaWQgZGVwdGhSYW5n
ZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKTsKK3ZvaWQgZGV0YWNoU2hhZGVyKFdl
YkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBkaXNhYmxl
KEdDM0RlbnVtIGNhcCk7Cit2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdD
M0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBkcmF3
RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBs
b25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisKK3ZvaWQgZW5hYmxlKEdDM0RlbnVt
IGNhcCk7Cit2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNl
cHRpb25Db2RlJik7Cit2b2lkIGZpbmlzaCgpOwordm9pZCBmbHVzaCgpOwordm9pZCBmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25D
b2RlJik7Cit2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBHQzNEaW50
IGxldmVsLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGZyb250RmFjZShHQzNEZW51bSBtb2RlKTsK
K3ZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKKworUGFzc1JlZlB0cjxXZWJH
TEFjdGl2ZUluZm8+IGdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYpOworUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2
ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsK
K2Jvb2wgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSosIFZlY3RvcjxSZWZQdHI8V2Vi
R0xTaGFkZXI+PiYsIEV4Y2VwdGlvbkNvZGUmKTsKK0dDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24o
V2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKK1dlYkdMR2V0SW5mbyBnZXRCdWZm
ZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYpOworUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBnZXRDb250ZXh0QXR0cmli
dXRlcygpOworR0MzRGVudW0gZ2V0RXJyb3IoKTsKK1dlYkdMRXh0ZW5zaW9uKiBnZXRFeHRlbnNp
b24oY29uc3QgU3RyaW5nJiBuYW1lKTsKK1dlYkdMR2V0SW5mbyBnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNE
ZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworV2ViR0xHZXRJbmZvIGdldFBhcmFtZXRlcihH
QzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworV2ViR0xHZXRJbmZvIGdldFByb2dyYW1Q
YXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsK
K1N0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7
CitXZWJHTEdldEluZm8gZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKK1dlYkdMR2V0SW5mbyBnZXRTaGFkZXJQ
YXJhbWV0ZXIoV2ViR0xTaGFkZXIqLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwor
U3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CitQ
YXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0PiBnZXRTaGFkZXJQcmVjaXNpb25G
b3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0
aW9uQ29kZSYpOworU3RyaW5nIGdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciosIEV4Y2VwdGlv
bkNvZGUmKTsKK1ZlY3RvcjxTdHJpbmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKK1dlYkdM
R2V0SW5mbyBnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
RXhjZXB0aW9uQ29kZSYpOworV2ViR0xHZXRJbmZvIGdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiwg
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBFeGNlcHRpb25Db2RlJik7CitQYXNzUmVmUHRy
PFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwg
Y29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworV2ViR0xHZXRJbmZvIGdldFZlcnRleEF0
dHJpYihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKK2xv
bmcgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBu
YW1lKTsKKwordm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSk7CitHQzNE
Ym9vbGVhbiBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOworYm9vbCBpc0NvbnRleHRMb3N0KCkgY29u
c3Q7CitHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKTsKK0dDM0Rib29sZWFuIGlz
RnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOworR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFdl
YkdMUHJvZ3JhbSopOworR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZm
ZXIqKTsKK0dDM0Rib29sZWFuIGlzU2hhZGVyKFdlYkdMU2hhZGVyKik7CitHQzNEYm9vbGVhbiBp
c1RleHR1cmUoV2ViR0xUZXh0dXJlKik7CisKK3ZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCk7Cit2
b2lkIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgcGl4
ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwordm9pZCBwb2x5Z29uT2Zm
c2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7Cit2b2lkIHJlYWRQaXhlbHMo
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYpOwordm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKK3ZvaWQgcmVu
ZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwordm9pZCBzYW1wbGVDb3ZlcmFn
ZShHQzNEZmxvYXQgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7Cit2b2lkIHNjaXNzb3IoR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Cit2
b2lkIHNoYWRlclNvdXJjZShXZWJHTFNoYWRlciosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmKTsKK3ZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1
aW50IG1hc2spOwordm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0Rl
bnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKK3ZvaWQgc3RlbmNpbE1hc2so
R0MzRHVpbnQpOwordm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1
aW50IG1hc2spOwordm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWws
IEdDM0RlbnVtIHpwYXNzKTsKK3ZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwg
R0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKKwordm9pZCB0
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsCisgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAorICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SW1hZ2VEYXRhKiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOwordm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNv
ZGUmKTsKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNl
cHRpb25Db2RlJik7CisjZW5kaWYKKwordm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7Cit2b2lkIHRleFBhcmFtZXRlcmko
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7CisKK3ZvaWQg
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQg
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB0ZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB0
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNp
ZiBFTkFCTEUoVklERU8pCit2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKKwordm9pZCB1bmlmb3JtMWYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYpOwor
dm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3Jt
MWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUm
KTsKK3ZvaWQgdW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0y
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYs
IEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNv
ZGUmKTsKK3ZvaWQgdW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTJp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4
Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7
Cit2b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmKTsKK3Zv
aWQgdW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0
MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25D
b2RlJik7Cit2b2lkIHVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0zaXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6
LCBHQzNEZmxvYXQgdywgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtNGZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJik7Cit2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Cit2b2lk
IHVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYpOwordm9p
ZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJB
cnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQq
IHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtTWF0
cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVu
aWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0
KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKwordm9pZCB1c2VQcm9n
cmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdmFsaWRhdGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKKwordm9pZCB2ZXJ0ZXhBdHRyaWIxZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOwordm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVp
bnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKK3ZvaWQgdmVydGV4QXR0cmliMWZ2KEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwordm9pZCB2
ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KTsK
K3ZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVl
cyk7Cit2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1
ZXMsIEdDM0RzaXplaSBzaXplKTsKK3ZvaWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgs
IEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopOwordm9pZCB2ZXJ0ZXhBdHRy
aWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKK3ZvaWQgdmVydGV4
QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNp
emUpOwordm9pZCB2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdD
M0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpOwordm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKK3ZvaWQgdmVydGV4QXR0
cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUp
Owordm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUs
IEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHN0cmlkZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYpOworCit2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpOworCisvLyBXRUJLSVRfbG9zZV9jb250ZXh0IHN1cHBvcnQK
K2VudW0gTG9zdENvbnRleHRNb2RlIHsKKyAgICAvLyBMb3N0IGNvbnRleHQgb2NjdXJyZWQgYXQg
dGhlIGdyYXBoaWNzIHN5c3RlbSBsZXZlbC4KKyAgICBSZWFsTG9zdENvbnRleHQsCisgICAgCisg
ICAgLy8gTG9zdCBjb250ZXh0IHByb3Zva2VkIGJ5IFdFQktJVF9sb3NlX2NvbnRleHQuCisgICAg
U3ludGhldGljTG9zdENvbnRleHQKK307Cit2b2lkIGZvcmNlTG9zdENvbnRleHQoTG9zdENvbnRl
eHRNb2RlKTsKK3ZvaWQgZm9yY2VSZXN0b3JlQ29udGV4dCgpOwordm9pZCBsb3NlQ29udGV4dElt
cGwoTG9zdENvbnRleHRNb2RlKTsKKworR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4
dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CitXZWJHTENvbnRleHRHcm91
cCogY29udGV4dEdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0R3JvdXAuZ2V0KCk7IH0K
K3ZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwor
Cit2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKwordm9pZCBtYXJrTGF5ZXJD
b21wb3NpdGVkKCk7Cit2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMo
KSBvdmVycmlkZTsKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSgpOworCit2b2lkIHJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVj
dCopOwordm9pZCByZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOworCit1
bnNpZ25lZCBnZXRNYXhWZXJ0ZXhBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gbV9tYXhWZXJ0ZXhB
dHRyaWJzOyB9CisKKy8vIEFOR0xFX2luc3RhbmNlZF9hcnJheXMgZXh0ZW5zaW9uIGZ1bmN0aW9u
cy4KK3ZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpOwordm9pZCBkcmF3RWxlbWVu
dHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBl
LCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKK3ZvaWQgdmVydGV4QXR0
cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcik7CisKK3Byb3RlY3Rl
ZDoKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoSFRNTENhbnZhc0VsZW1lbnQqLCBHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKEhUTUxD
YW52YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzKTsKKworcHJpdmF0ZToKK2ZyaWVuZCBjbGFzcyBXZWJHTERyYXdC
dWZmZXJzOworZnJpZW5kIGNsYXNzIFdlYkdMRnJhbWVidWZmZXI7CitmcmllbmQgY2xhc3MgV2Vi
R0xPYmplY3Q7CitmcmllbmQgY2xhc3MgT0VTVmVydGV4QXJyYXlPYmplY3Q7CitmcmllbmQgY2xh
c3MgV2ViR0xEZWJ1Z1NoYWRlcnM7CitmcmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZUFUQzsKK2ZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM7CitmcmllbmQg
Y2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM7CitmcmllbmQgY2xhc3MgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s7CitmcmllbmQgY2xhc3MgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzsKKwordm9pZCBpbml0aWFsaXplTmV3Q29udGV4dCgpOwordm9pZCBz
ZXR1cEZsYWdzKCk7CisKKy8vIEFjdGl2ZURPTU9iamVjdAordmlydHVhbCBib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlOwordmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlk
ZTsKK3ZpcnR1YWwgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuICJXZWJHTFJlbmRlcmluZ0NvbnRleHQiOyB9CisKK3ZvaWQgYWRkU2hhcmVk
T2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7Cit2b2lkIGFkZENvbnRleHRPYmplY3QoV2ViR0xD
b250ZXh0T2JqZWN0Kik7Cit2b2lkIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKwordm9p
ZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKK3ZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7
CisKKy8vIFF1ZXJ5IHdoZXRoZXIgaXQgaXMgYnVpbHQgb24gdG9wIG9mIGNvbXBsaWFudCBHTEVT
MiBpbXBsZW1lbnRhdGlvbi4KK2Jvb2wgaXNHTEVTMkNvbXBsaWFudCgpIHsgcmV0dXJuIG1faXNH
TEVTMkNvbXBsaWFudDsgfQorLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGlzIE5Q
T1Qgc3RyaWN0LgorYm9vbCBpc0dMRVMyTlBPVFN0cmljdCgpIHsgcmV0dXJuIG1faXNHTEVTMk5Q
T1RTdHJpY3Q7IH0KKy8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMg
ZXJyb3JzIG9uIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2Vzc2VzLgorYm9vbCBpc0Vycm9yR2Vu
ZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgeyByZXR1cm4gbV9pc0Vycm9yR2VuZXJhdGVk
T25PdXRPZkJvdW5kc0FjY2Vzc2VzOyB9CisvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRp
b24gaW5pdGlhbGl6ZXMgdGV4dHVyZXMvcmVuZGVyYnVmZmVycyB0byAwLgorYm9vbCBpc1Jlc291
cmNlU2FmZSgpIHsgcmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7IH0KKy8vIFF1ZXJ5IGlmIGRlcHRo
X3N0ZW5jaWwgYnVmZmVyIGlzIHN1cHBvcnRlZC4KK2Jvb2wgaXNEZXB0aFN0ZW5jaWxTdXBwb3J0
ZWQoKSB7IHJldHVybiBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkOyB9CisKKy8vIEhlbHBlciB0
byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKKy8vIGxpa2Ug
R0xfRkxPQVQsIEdMX0lOVCwgZXRjLgordW5zaWduZWQgc2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlw
ZSk7CisKKy8vIEJhc2ljIHZhbGlkYXRpb24gb2YgY291bnQgYW5kIG9mZnNldCBhZ2FpbnN0IG51
bWJlciBvZiBlbGVtZW50cyBpbiBlbGVtZW50IGFycmF5IGJ1ZmZlcgorYm9vbCB2YWxpZGF0ZUVs
ZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRy
IG9mZnNldCk7CisKKy8vIENvbnNlcnZhdGl2ZSBidXQgcXVpY2sgaW5kZXggdmFsaWRhdGlvbgor
Ym9vbCB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWdu
ZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpOworCisvLyBQcmVjaXNlIGJ1dCBzbG93IGluZGV4IHZh
bGlkYXRpb24gLS0gb25seSBkb25lIGlmIGNvbnNlcnZhdGl2ZSBjaGVja3MgZmFpbAorYm9vbCB2
YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwg
R0MzRGludHB0ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKK2Jvb2wg
dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwgdW5zaWduZWQg
cHJpbWl0aXZlQ291bnQgPSAwKTsKKworYm9vbCB2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNo
YXIqLCBXZWJHTE9iamVjdCopOworCitib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBj
b3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7Citib29sIHZhbGlkYXRlRHJhd0VsZW1lbnRzKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBH
QzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHMsIEdD
M0RzaXplaSBwcmltY291bnQpOworCisvLyBBZGRzIGEgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1h
dC4KK3ZvaWQgYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOworCitQYXNzUmVm
UHRyPEltYWdlPiBkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBpbnQgZGV2aWNlU2NhbGVGYWN0b3IpOworCisjaWYgRU5BQkxFKFZJREVPKQorUGFzc1Jl
ZlB0cjxJbWFnZT4gdmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIEJhY2tpbmdT
dG9yZUNvcHksIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgorCitSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IG1fY29udGV4dDsKK1JlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gbV9jb250ZXh0R3Jv
dXA7CisKKy8vIE9wdGlvbmFsIHN0cnVjdHVyZSBmb3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1
ZmZlciwgaW5zdGVhZCBvZiBkaXJlY3RseQorLy8gdG8gdGhlIGJhY2stYnVmZmVyIG9mIG1fY29u
dGV4dC4KK1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CisKKy8vIERpc3Bh
dGNoZXMgYSBjb250ZXh0IGxvc3QgZXZlbnQgb25jZSBpdCBpcyBkZXRlcm1pbmVkIHRoYXQgb25l
IGlzIG5lZWRlZC4KKy8vIFRoaXMgaXMgdXNlZCBib3RoIGZvciBzeW50aGV0aWMgYW5kIHJlYWwg
Y29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMsIGl0J3MKKy8vIGxpa2VseSB0aGF0IHRoZXJl
J3Mgbm8gSmF2YVNjcmlwdCBvbiB0aGUgc3RhY2ssIGJ1dCB0aGF0IG1pZ2h0IGJlIGRlcGVuZGVu
dAorLy8gb24gaG93IGV4YWN0bHkgdGhlIHBsYXRmb3JtIGRpc2NvdmVycyB0aGF0IHRoZSBjb250
ZXh0IHdhcyBsb3N0LiBGb3IgYmV0dGVyCisvLyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIg
dGhlIGRpc3BhdGNoIG9mIHRoZSBldmVudC4KK1RpbWVyIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2
ZW50VGltZXI7Citib29sIG1fcmVzdG9yZUFsbG93ZWQ7CitUaW1lciBtX3Jlc3RvcmVUaW1lcjsK
KworYm9vbCBtX25lZWRzVXBkYXRlOworYm9vbCBtX21hcmtlZENhbnZhc0RpcnR5OworSGFzaFNl
dDxXZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3RzOworCisvLyBMaXN0IG9mIGJv
dW5kIFZCTydzLiBVc2VkIHRvIG1haW50YWluIGluZm8gYWJvdXQgc2l6ZXMgZm9yIEFSUkFZX0JV
RkZFUiBhbmQgc3RvcmVkIHZhbHVlcyBmb3IgRUxFTUVOVF9BUlJBWV9CVUZGRVIKK1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4gbV9ib3VuZEFycmF5QnVmZmVyOworCitSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUz4gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CitSZWZQdHI8V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUz4gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0Owordm9pZCBzZXRCb3Vu
ZFZlcnRleEFycmF5T2JqZWN0KFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4g
YXJyYXlPYmplY3QpCit7CisgICAgaWYgKGFycmF5T2JqZWN0KQorICAgICAgICBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QgPSBhcnJheU9iamVjdDsKKyAgICBlbHNlCisgICAgICAgIG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdCA9IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0OworfQorCitjbGFz
cyBWZXJ0ZXhBdHRyaWJWYWx1ZSB7CitwdWJsaWM6CisgICAgVmVydGV4QXR0cmliVmFsdWUoKQor
ICAgIHsKKyAgICAgICAgaW5pdFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdFZh
bHVlKCkKKyAgICB7CisgICAgICAgIHZhbHVlWzBdID0gMC4wZjsKKyAgICAgICAgdmFsdWVbMV0g
PSAwLjBmOworICAgICAgICB2YWx1ZVsyXSA9IDAuMGY7CisgICAgICAgIHZhbHVlWzNdID0gMS4w
ZjsKKyAgICB9CisgICAgCisgICAgR0MzRGZsb2F0IHZhbHVlWzRdOworfTsKK1ZlY3RvcjxWZXJ0
ZXhBdHRyaWJWYWx1ZT4gbV92ZXJ0ZXhBdHRyaWJWYWx1ZTsKK3Vuc2lnbmVkIG1fbWF4VmVydGV4
QXR0cmliczsKK1JlZlB0cjxXZWJHTEJ1ZmZlcj4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOworbG9u
ZyBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplOworR0MzRGZsb2F0IG1fdmVydGV4QXR0cmliMEJ1
ZmZlclZhbHVlWzRdOworYm9vbCBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbDsKK2Jvb2wgbV92
ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZTsKKworUmVmUHRyPFdlYkdMUHJvZ3JhbT4gbV9jdXJyZW50
UHJvZ3JhbTsKK1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsK
K1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbV9yZW5kZXJidWZmZXJCaW5kaW5nOworc3RydWN0
IFRleHR1cmVVbml0U3RhdGUgeworICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmUyREJp
bmRpbmc7CisgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4dHVyZUN1YmVNYXBCaW5kaW5nOwor
fTsKK1ZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0czsKK3Vuc2lnbmVkIGxv
bmcgbV9hY3RpdmVUZXh0dXJlVW5pdDsKKworUmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFja1Rl
eHR1cmUyRDsKK1JlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcDsKKwor
VmVjdG9yPEdDM0RlbnVtPiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKKworLy8gRml4ZWQt
c2l6ZSBjYWNoZSBvZiByZXVzYWJsZSBpbWFnZSBidWZmZXJzIGZvciB2aWRlbyB0ZXhJbWFnZTJE
IGNhbGxzLgorY2xhc3MgTFJVSW1hZ2VCdWZmZXJDYWNoZSB7CitwdWJsaWM6CisgICAgTFJVSW1h
Z2VCdWZmZXJDYWNoZShpbnQgY2FwYWNpdHkpOworICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVk
IGlzIG93bmVkIGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgorICAgIEltYWdlQnVmZmVyKiBpbWFn
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKTsKK3ByaXZhdGU6CisgICAgdm9pZCBidWJibGVU
b0Zyb250KGludCBpZHgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+W10+IG1fYnVmZmVyczsKKyAgICBpbnQgbV9jYXBhY2l0eTsKK307CitMUlVJbWFn
ZUJ1ZmZlckNhY2hlIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZTsKKworR0MzRGludCBtX21heFRleHR1
cmVTaXplOworR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKK0dDM0RpbnQgbV9tYXhS
ZW5kZXJidWZmZXJTaXplOworR0MzRGludCBtX21heFZpZXdwb3J0RGltc1syXTsKK0dDM0RpbnQg
bV9tYXhUZXh0dXJlTGV2ZWw7CitHQzNEaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbDsKKwor
R0MzRGludCBtX21heERyYXdCdWZmZXJzOworR0MzRGludCBtX21heENvbG9yQXR0YWNobWVudHM7
CitHQzNEZW51bSBtX2JhY2tEcmF3QnVmZmVyOworYm9vbCBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1
aXJlbWVudHNDaGVja2VkOworYm9vbCBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOworCitHQzNEaW50
IG1fcGFja0FsaWdubWVudDsKK0dDM0RpbnQgbV91bnBhY2tBbGlnbm1lbnQ7Citib29sIG1fdW5w
YWNrRmxpcFk7Citib29sIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYTsKK0dDM0RlbnVtIG1fdW5w
YWNrQ29sb3JzcGFjZUNvbnZlcnNpb247Citib29sIG1fY29udGV4dExvc3Q7CitMb3N0Q29udGV4
dE1vZGUgbV9jb250ZXh0TG9zdE1vZGU7CitHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBt
X2F0dHJpYnV0ZXM7CisKK2Jvb2wgbV9sYXllckNsZWFyZWQ7CitHQzNEZmxvYXQgbV9jbGVhckNv
bG9yWzRdOworYm9vbCBtX3NjaXNzb3JFbmFibGVkOworR0MzRGZsb2F0IG1fY2xlYXJEZXB0aDsK
K0dDM0RpbnQgbV9jbGVhclN0ZW5jaWw7CitHQzNEYm9vbGVhbiBtX2NvbG9yTWFza1s0XTsKK0dD
M0Rib29sZWFuIG1fZGVwdGhNYXNrOworCitib29sIG1fc3RlbmNpbEVuYWJsZWQ7CitHQzNEdWlu
dCBtX3N0ZW5jaWxNYXNrLCBtX3N0ZW5jaWxNYXNrQmFjazsKK0dDM0RpbnQgbV9zdGVuY2lsRnVu
Y1JlZiwgbV9zdGVuY2lsRnVuY1JlZkJhY2s7IC8vIE5vdGUgdGhhdCB0aGVzZSBhcmUgdGhlIHVz
ZXIgc3BlY2lmaWVkIHZhbHVlcywgbm90IHRoZSBpbnRlcm5hbCBjbGFtcGVkIHZhbHVlLgorR0Mz
RHVpbnQgbV9zdGVuY2lsRnVuY01hc2ssIG1fc3RlbmNpbEZ1bmNNYXNrQmFjazsKKworYm9vbCBt
X2lzR0xFUzJDb21wbGlhbnQ7Citib29sIG1faXNHTEVTMk5QT1RTdHJpY3Q7Citib29sIG1faXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlczsKK2Jvb2wgbV9pc1Jlc291cmNlU2Fm
ZTsKK2Jvb2wgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKK2Jvb2wgbV9pc1JvYnVzdG5lc3NF
WFRTdXBwb3J0ZWQ7CisKK2Jvb2wgbV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZTsKK2ludCBt
X251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKKworLy8gQSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQgY2FuIGJlIGNyZWF0ZWQgaW4gYSBzdGF0ZSB3aGVyZSBpdCBhcHBlYXJzIGFzCisvLyBhIHZh
bGlkIGFuZCBhY3RpdmUgY29udGV4dCwgYnV0IHdpbGwgbm90IGV4ZWN1dGUgYW55IGltcG9ydGFu
dCBvcGVyYXRpb25zCisvLyB1bnRpbCBpdHMgbG9hZCBwb2xpY3kgaXMgY29tcGxldGVseSByZXNv
bHZlZC4KK2Jvb2wgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uOworYm9vbCBtX2hhc1JlcXVl
c3RlZFBvbGljeVJlc29sdXRpb247Citib29sIGlzQ29udGV4dExvc3RPclBlbmRpbmcoKTsKKwor
Ly8gRW5hYmxlZCBleHRlbnNpb24gb2JqZWN0cy4KK3N0ZDo6dW5pcXVlX3B0cjxFWFRGcmFnRGVw
dGg+IG1fZXh0RnJhZ0RlcHRoOworc3RkOjp1bmlxdWVfcHRyPEVYVEJsZW5kTWluTWF4PiBtX2V4
dEJsZW5kTWluTWF4Oworc3RkOjp1bmlxdWVfcHRyPEVYVHNSR0I+IG1fZXh0c1JHQjsKK3N0ZDo6
dW5pcXVlX3B0cjxFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM+IG1fZXh0VGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljOworc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRleHR1cmVMT0Q+IG1fZXh0
U2hhZGVyVGV4dHVyZUxPRDsKK3N0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlRmxvYXQ+IG1fb2Vz
VGV4dHVyZUZsb2F0Oworc3RkOjp1bmlxdWVfcHRyPE9FU1RleHR1cmVGbG9hdExpbmVhcj4gbV9v
ZXNUZXh0dXJlRmxvYXRMaW5lYXI7CitzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUhhbGZGbG9h
dD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0Oworc3RkOjp1bmlxdWVfcHRyPE9FU1RleHR1cmVIYWxm
RmxvYXRMaW5lYXI+IG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKK3N0ZDo6dW5pcXVlX3B0
cjxPRVNTdGFuZGFyZERlcml2YXRpdmVzPiBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXM7CitzdGQ6
OnVuaXF1ZV9wdHI8T0VTVmVydGV4QXJyYXlPYmplY3Q+IG1fb2VzVmVydGV4QXJyYXlPYmplY3Q7
CitzdGQ6OnVuaXF1ZV9wdHI8T0VTRWxlbWVudEluZGV4VWludD4gbV9vZXNFbGVtZW50SW5kZXhV
aW50Oworc3RkOjp1bmlxdWVfcHRyPFdlYkdMTG9zZUNvbnRleHQ+IG1fd2ViZ2xMb3NlQ29udGV4
dDsKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdS
ZW5kZXJlckluZm87CitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEZWJ1Z1NoYWRlcnM+IG1fd2ViZ2xE
ZWJ1Z1NoYWRlcnM7CitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQz4g
bV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDOworc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7CitzdGQ6OnVu
aXF1ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM+IG1fd2ViZ2xDb21wcmVzc2VkVGV4
dHVyZVMzVEM7CitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEZXB0aFRleHR1cmU+IG1fd2ViZ2xEZXB0
aFRleHR1cmU7CitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVmZmVycz4gbV93ZWJnbERyYXdC
dWZmZXJzOworc3RkOjp1bmlxdWVfcHRyPEFOR0xFSW5zdGFuY2VkQXJyYXlzPiBtX2FuZ2xlSW5z
dGFuY2VkQXJyYXlzOworCisvLyBIZWxwZXJzIGZvciBnZXRQYXJhbWV0ZXIgYW5kIG90aGVycwor
V2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJhbWV0ZXIoR0MzRGVudW0pOworV2ViR0xHZXRJbmZv
IGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CitXZWJHTEdldEluZm8gZ2V0Rmxv
YXRQYXJhbWV0ZXIoR0MzRGVudW0pOworV2ViR0xHZXRJbmZvIGdldEludFBhcmFtZXRlcihHQzNE
ZW51bSk7CitXZWJHTEdldEluZm8gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0pOwor
V2ViR0xHZXRJbmZvIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CitXZWJH
TEdldEluZm8gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CisKKy8vIENsZWFy
IHRoZSBiYWNrYnVmZmVyIGlmIGl0IHdhcyBjb21wb3NpdGVkIHNpbmNlIHRoZSBsYXN0IG9wZXJh
dGlvbi4KKy8vIGNsZWFyTWFzayBpcyBzZXQgdG8gdGhlIGJpdGZpZWxkIG9mIGFueSBjbGVhciB0
aGF0IHdvdWxkIGhhcHBlbiBhbnl3YXkgYXQgdGhpcyB0aW1lCisvLyBhbmQgdGhlIGZ1bmN0aW9u
IHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4KK2Jvb2wgY2xl
YXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZpZWxkIGNsZWFyTWFzayA9IDApOworCisvLyBIZWxwZXIg
dG8gcmVzdG9yZSBzdGF0ZSB0aGF0IGNsZWFyaW5nIHRoZSBmcmFtZWJ1ZmZlciBtYXkgZGVzdHJv
eS4KK3ZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworCit2b2lkIHRleEltYWdlMkRCYXNl
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25D
b2RlJik7Cit2b2lkIHRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZs
aXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4U3Vi
SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0
aW9uQ29kZSYpOwordm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERv
bVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2Rl
Jik7CisKK3ZvaWQgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqLCBib29sKTsK
Kwordm9pZCBjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKKworLy8gSGVscGVyIGZ1
bmN0aW9uIGZvciBjb3B5VGV4e1N1Yn1JbWFnZSwgY2hlY2sgd2hldGhlciB0aGUgaW50ZXJuYWxm
b3JtYXQKKy8vIGFuZCB0aGUgY29sb3IgYnVmZmVyIGZvcm1hdCBvZiB0aGUgY3VycmVudCBib3Vu
ZCBmcmFtZWJ1ZmZlciBjb21iaW5hdGlvbgorLy8gaXMgdmFsaWQuCitib29sIGlzVGV4SW50ZXJu
YWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJuYWxG
b3JtYXQsIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0KTsKKworLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIncyBjb2xvciBidWZmZXIgZm9ybWF0LgorR0Mz
RGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7CisKKy8vIEhlbHBlciBmdW5j
dGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3Mgd2lkdGguCitpbnQgZ2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5k
IGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgoraW50IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKTsK
KworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZlcmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aCBvZiB1
bmlmb3JtIGFuZCBhdHRyaWJ1dGUgbG9jYXRpb25zLgorYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVu
Z3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJik7CisKKy8vIEhlbHBl
ciBmdW5jdGlvbiB0byBjaGVjayBpZiBzaXplIGlzIG5vbi1uZWdhdGl2ZS4KKy8vIEdlbmVyYXRl
IEdMIGVycm9yIGFuZCByZXR1cm4gZmFsc2UgZm9yIG5lZ2F0aXZlIGlucHV0czsgb3RoZXJ3aXNl
LCByZXR1cm4gdHJ1ZS4KK2Jvb2wgdmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGludCB4LCBHQzNEaW50IHkpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sg
aWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBiZWxvbmcgdG8gdGhlCisvLyBBU0NJSSBz
dWJzZXQgYXMgZGVmaW5lZCBpbiBHTFNMIEVTIDEuMCBzcGVjIHNlY3Rpb24gMy4xLgorYm9vbCB2
YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOwor
CisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGFyZ2V0IGFuZCB0ZXh0dXJlIGJvdW5kIHRv
IHRoZSB0YXJnZXQuCisvLyBHZW5lcmF0ZSBHTCBlcnJvcnMgYW5kIHJldHVybiAwIGlmIHRhcmdl
dCBpcyBpbnZhbGlkIG9yIHRleHR1cmUgYm91bmQgaXMKKy8vIG51bGwuICBPdGhlcndpc2UsIHJl
dHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgorV2ViR0xUZXh0dXJlKiB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFy
Z2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0
byBjaGVjayBpbnB1dCBmb3JtYXQvdHlwZSBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1h
Z2UuCisvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVy
cyBhcmUgaW52YWxpZC4KK2Jvb2wgdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dCBsZXZlbCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBmb3Ig
ZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCisvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5k
IHJldHVybnMgZmFsc2UgaWYgbGV2ZWwgaXMgaW52YWxpZC4KK2Jvb2wgdmFsaWRhdGVUZXhGdW5j
TGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwpOworCitlbnVtIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIHsKKyAgICBOb3RU
ZXhTdWJJbWFnZTJELAorICAgIFRleFN1YkltYWdlMkQsCit9OworCitlbnVtIFRleEZ1bmNWYWxp
ZGF0aW9uU291cmNlVHlwZSB7CisgICAgU291cmNlQXJyYXlCdWZmZXJWaWV3LAorICAgIFNvdXJj
ZUltYWdlRGF0YSwKKyAgICBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LAorICAgIFNvdXJjZUhUTUxD
YW52YXNFbGVtZW50LAorICAgIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsCit9OworCisvLyBIZWxw
ZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBjaGVjayBpZiB0aGUgaW5wdXQgZm9y
bWF0L3R5cGUvbGV2ZWwvdGFyZ2V0L3dpZHRoL2hlaWdodC9ib3JkZXIveG9mZnNldC95b2Zmc2V0
IGFyZSB2YWxpZC4KKy8vIE90aGVyd2lzZSwgaXQgd291bGQgcmV0dXJuIHF1aWNrbHkgd2l0aG91
dCBkb2luZyBvdGhlciB3b3JrLgorYm9vbCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRp
b25Tb3VyY2VUeXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCk7CisKKy8vIEhlbHBlciBmdW5j
dGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1
Yn1JbWFnZS4KKy8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJh
bWV0ZXJzIGFyZSBpbnZhbGlkLgorYm9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhG
dW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUpOworCitlbnVtIE51bGxEaXNwb3NpdGlvbiB7CisgICAgTnVsbEFsbG93ZWQsCisg
ICAgTnVsbE5vdEFsbG93ZWQKK307CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0
aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKKy8vIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUg
YW5kIGNvbnRhaW5zIGVub3VnaCBkYXRhIGZvciB0aGUgdGV4SW1hZ2UgY2FsbC4KKy8vIEdlbmVy
YXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlk
LgorYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmll
dyogcGl4ZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgIE51bGxEaXNwb3NpdGlvbik7CisK
Ky8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhIGdpdmVuIHRleHR1cmUgZm9ybWF0IGlz
IHNldHRhYmxlIGFzIGluCisvLyB5b3UgY2FuIHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9y
IGNhbGwgdGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5kCisvLyBjb3B5VGV4U3ViSW1hZ2Uy
RC4KKy8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGUgZm9ybWF0
IGlzIG5vdCBzZXR0YWJsZS4KK2Jvb2wgdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCk7CisKKy8vIEhlbHBlciBmdW5jdGlv
biB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1cmUgZGF0YSBpcyBjb3JyZWN0IHNpemUKKy8v
IGZvciB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCBkaW1lbnNpb25zLgorYm9vbCB2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJh
eUJ1ZmZlclZpZXcqIHBpeGVscyk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGlu
ZyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0cy4KK2Jvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4
Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0
ZSBjb21wcmVzc2VkIHRleHR1cmUgZGltZW5zaW9ucyBhcmUgdmFsaWQgZm9yCisvLyB0aGUgZ2l2
ZW4gZm9ybWF0LgorYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCk7CisKKy8vIEhlbHBl
ciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1cmUgZGltZW5zaW9ucyBhcmUg
dmFsaWQgZm9yCisvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRU
ZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgV2ViR0xUZXh0dXJlKik7CisKKy8vIEhlbHBl
ciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0FycmF5cy9FbGVtZW50c30uCiti
b29sIHZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7
CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpZiBmcm9udC9iYWNrIHN0ZW5jaWxN
YXNrIGFuZCBzdGVuY2lsRnVuYyBzZXR0aW5ncyBhcmUgdGhlIHNhbWUuCitib29sIHZhbGlkYXRl
U3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CisKKy8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSBzdGVuY2lsIGZ1bmMuCitib29sIHZhbGlkYXRlU3RlbmNpbEZ1
bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CisKKy8vIEhlbHBlciBmdW5j
dGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBhbmQgdGV4UGFyYW1ldGVyaS4KK3ZvaWQgdGV4UGFyYW1l
dGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbWksIEdD
M0RpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJp
bnQgR0wgZXJyb3JzIHRvIGNvbnNvbGUuCit2b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25z
dCBTdHJpbmcmKTsKK3ZvaWQgcHJpbnRHTFdhcm5pbmdUb0NvbnNvbGUoY29uc3QgY2hhciogZnVu
Y3Rpb24sIGNvbnN0IGNoYXIqIHJlYXNvbik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmlu
dCB3YXJuaW5ncyB0byBjb25zb2xlLiBDdXJyZW50bHkKKy8vIHVzZWQgb25seSB0byB3YXJuIGFi
b3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCit2b2lkIHByaW50V2FybmluZ1RvQ29uc29s
ZShjb25zdCBTdHJpbmcmKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0
IHBhcmFtZXRlcnMgZm9yIGZyYW1lYnVmZmVyIGZ1bmN0aW9ucy4KKy8vIEdlbmVyYXRlIEdMIGVy
cm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCitib29sIHZhbGlkYXRlRnJhbWVidWZmZXJG
dW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gYXR0YWNobWVudCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBi
bGVuZCBlcXVhdGlvbiBtb2RlLgorYm9vbCB2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxp
ZGF0ZSBibGVuZCBmdW5jIGZhY3RvcnMuCitib29sIHZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KTsKKwor
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KK2Jvb2wgdmFs
aWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOworCisv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdW5pZm9y
bSBmdW5jdGlvbnMuCitib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSos
IEdDM0RzaXplaSBtb2QpOworYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBJbnQzMkFycmF5
KiwgR0MzRHNpemVpIG1vZCk7Citib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIHZvaWQqLCBH
QzNEc2l6ZWksIEdDM0RzaXplaSBtb2QpOworYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2Qp
OworYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBtb2QpOworCisvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgcGFyYW1ldGVycyBmb3IgYnVmZmVyRGF0YS4KKy8vIFJldHVybiB0aGUg
Y3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAwIGlmIHBhcmFtZXRlcnMgYXJlIGlu
dmFsaWQuCitXZWJHTEJ1ZmZlciogdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOworCisv
LyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2Ug
aXMgcmVhZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KK2Jvb2wgdmFsaWRhdGVIVE1MSW1h
Z2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQg
dG8gbWFrZSBzdXJlIGNhbnZhcyBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgor
Ym9vbCB2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
SFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisKKyNpZiBFTkFCTEUoVklERU8p
CisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlk
ZW8gaXMgcmVhZHkgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgorYm9vbCB2YWxpZGF0ZUhUTUxWaWRl
b0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhj
ZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKy8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHZlcnRleEF0
dHJpYk5me3Z9Lgordm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdD
M0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOwordm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5Kiwg
R0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Cit2b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqLCBHQzNEc2l6ZWks
IEdDM0RzaXplaSBleHBlY3RlZFNpemUpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGRlbGV0
ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBmdW5jdGlvbnMuCisvLyBSZXR1
cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3Np
bmcuCitib29sIGRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCopOworCisvLyBIZWxwZXIgZnVuY3Rp
b24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBiaW5kVGV4dHVyZSwgZXRjKSBhbmQgdXNlUHJvZ3Jh
bS4KKy8vIElmIHRoZSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBzZXQgZGVsZXRl
ZCB0byB0cnVlIHVwb24gcmV0dXJuLgorLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQg
cmV0dXJuIHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLgorYm9vbCBjaGVja09iamVjdFRvQmVC
b3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRl
ZCk7CisKKy8vIEhlbHBlcnMgZm9yIHNpbXVsYXRpbmcgdmVydGV4QXR0cmliMAordm9pZCBpbml0
VmVydGV4QXR0cmliMCgpOworYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51
bVZlcnRleCk7Cit2b2lkIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9u
KCk7CisKK3ZvaWQgZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCk7CisvLyBIZWxwZXIgZm9yIHJl
c3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KK3ZvaWQgbWF5YmVSZXN0b3JlQ29udGV4dCgp
OworCisvLyBEZXRlcm1pbmUgaWYgd2UgYXJlIHJ1bm5pbmcgcHJpdmlsZWdlZCBjb2RlIGluIHRo
ZSBicm93c2VyLCBmb3IgZXhhbXBsZSwKKy8vIGEgU2FmYXJpIG9yIENocm9tZSBleHRlbnNpb24u
Citib29sIGFsbG93UHJpdmlsZWdlZEV4dGVuc2lvbnMoKSBjb25zdDsKKworZW51bSBDb25zb2xl
RGlzcGxheVByZWZlcmVuY2UgeworICAgIERpc3BsYXlJbkNvbnNvbGUsCisgICAgRG9udERpc3Bs
YXlJbkNvbnNvbGUKK307CisKKy8vIFdyYXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50
aGVzaXplR0xFcnJvciB0aGF0IHNlbmRzIGEgbWVzc2FnZQorLy8gdG8gdGhlIEphdmFTY3JpcHQg
Y29uc29sZS4KK3ZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0sIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVy
ZW5jZSA9IERpc3BsYXlJbkNvbnNvbGUpOworCitTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBT
dHJpbmcmKSBjb25zdDsKKworLy8gRW5hYmxlIG9yIGRpc2FibGUgc3RlbmNpbCB0ZXN0IGJhc2Vk
IG9uIHVzZXIgc2V0dGluZyBhbmQKKy8vIHdoZXRoZXIgdGhlIGN1cnJlbnQgRkJPIGhhcyBhIHN0
ZW5jaWwgYnVmZmVyLgordm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7CisKKy8vIEhlbHBlciBmb3Ig
ZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEgY2FwYWJpbGl0eS4KK3ZvaWQgZW5hYmxlT3JEaXNhYmxl
KEdDM0RlbnVtIGNhcGFiaWxpdHksIGJvb2wgZW5hYmxlKTsKKworLy8gQ2xhbXAgdGhlIHdpZHRo
IGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMuCitJbnRTaXplIGNsYW1wZWRDYW52
YXNTaXplKCk7CisKKy8vIEZpcnN0IHRpbWUgY2FsbGVkLCBpZiBFWFRfZHJhd19idWZmZXJzIGlz
IHN1cHBvcnRlZCwgcXVlcnkgdGhlIHZhbHVlOyBvdGhlcndpc2UgcmV0dXJuIDAuCisvLyBMYXRl
ciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUuCitHQzNEaW50IGdldE1heERyYXdCdWZmZXJzKCk7
CitHQzNEaW50IGdldE1heENvbG9yQXR0YWNobWVudHMoKTsKKwordm9pZCBzZXRCYWNrRHJhd0J1
ZmZlcihHQzNEZW51bSk7CisKK3ZvaWQgcmVzdG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcigpOwordm9p
ZCByZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpOworCisvLyBDaGVjayBpZiBFWFRfZHJhd19idWZm
ZXJzIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wg
cmVxdWlyZW1lbnRzLgorYm9vbCBzdXBwb3J0c0RyYXdCdWZmZXJzKCk7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3NyBAQAorLyoKKyogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGVudW07Cit0eXBlZGVmIGJvb2xlYW4g
ICAgICAgIEdMYm9vbGVhbjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0xiaXRmaWVsZDsKK3R5
cGVkZWYgYnl0ZSAgICAgICAgICAgR0xieXRlOyAgICAgICAgIC8qICdieXRlJyBzaG91bGQgYmUg
YSBzaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5cGVkZWYgc2hvcnQgICAgICAgICAgR0xzaG9ydDsK
K3R5cGVkZWYgbG9uZyAgICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgIEdM
c2l6ZWk7Cit0eXBlZGVmIGxvbmcgbG9uZyAgICAgIEdMaW50cHRyOwordHlwZWRlZiBsb25nIGxv
bmcgICAgICBHTHNpemVpcHRyOwordHlwZWRlZiBvY3RldCAgICAgICAgICBHTHVieXRlOyAgICAg
ICAgLyogJ29jdGV0JyBzaG91bGQgYmUgYW4gdW5zaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgR0x1c2hvcnQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMdWlu
dDsKK3R5cGVkZWYgdW5yZXN0cmljdGVkIGZsb2F0IEdMZmxvYXQ7Cit0eXBlZGVmIHVucmVzdHJp
Y3RlZCBmbG9hdCBHTGNsYW1wZjsKKworWworQ29uZGl0aW9uYWw9V0VCR0wsCitKU0N1c3RvbU1h
cmtGdW5jdGlvbiwKK0RvTm90Q2hlY2tDb25zdGFudHMsCitdIGludGVyZmFjZSBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CisKKy8qIENsZWFyQnVm
ZmVyTWFzayAqLworY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9
IDB4MDAwMDAxMDA7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAg
ID0gMHgwMDAwMDQwMDsKK2NvbnN0IEdMZW51bSBDT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAg
ICAgPSAweDAwMDA0MDAwOworCisvKiBCZWdpbk1vZGUgKi8KK2NvbnN0IEdMZW51bSBQT0lOVFMg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA7Citjb25zdCBHTGVudW0gTElORVMgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAxOworY29uc3QgR0xlbnVtIExJTkVfTE9PUCAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMjsKK2NvbnN0IEdMZW51bSBMSU5FX1NUUklQICAg
ICAgICAgICAgICAgICAgICAgPSAweDAwMDM7Citjb25zdCBHTGVudW0gVFJJQU5HTEVTICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwMDA0OworY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAg
ICAgICAgICAgICAgICA9IDB4MDAwNTsKK2NvbnN0IEdMZW51bSBUUklBTkdMRV9GQU4gICAgICAg
ICAgICAgICAgICAgPSAweDAwMDY7CisKKy8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQg
aW4gRVMyMCkgKi8KKy8qICAgICAgTkVWRVIgKi8KKy8qICAgICAgTEVTUyAqLworLyogICAgICBF
UVVBTCAqLworLyogICAgICBMRVFVQUwgKi8KKy8qICAgICAgR1JFQVRFUiAqLworLyogICAgICBO
T1RFUVVBTCAqLworLyogICAgICBHRVFVQUwgKi8KKy8qICAgICAgQUxXQVlTICovCisKKy8qIEJs
ZW5kaW5nRmFjdG9yRGVzdCAqLworY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDA7Citjb25zdCBHTGVudW0gT05FICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMTsKK2NvbnN0IEdMZW51bSBTUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAz
MDA7Citjb25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAx
OworY29uc3QgR0xlbnVtIFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMjsK
K2NvbnN0IEdMZW51bSBPTkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgPSAweDAzMDM7Citj
b25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0OworY29u
c3QgR0xlbnVtIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA9IDB4MDMwNTsKKworLyog
QmxlbmRpbmdGYWN0b3JTcmMgKi8KKy8qICAgICAgWkVSTyAqLworLyogICAgICBPTkUgKi8KK2Nv
bnN0IEdMZW51bSBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDY7Citjb25z
dCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgID0gMHgwMzA3OworY29uc3Qg
R0xlbnVtIFNSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAgICA9IDB4MDMwODsKKy8qICAgICAg
U1JDX0FMUEhBICovCisvKiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KKy8qICAgICAgRFNU
X0FMUEhBICovCisvKiAgICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVh
dGlvblNlcGFyYXRlICovCitjb25zdCBHTGVudW0gRlVOQ19BREQgICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4MDA2OworY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OICAgICAgICAgICAgICAg
ICA9IDB4ODAwOTsKK2NvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAg
PSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworY29uc3QgR0xlbnVtIEJM
RU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA9IDB4ODgzRDsKKworLyogQmxlbmRTdWJ0cmFj
dCAqLworY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAgICAgICA9IDB4ODAw
QTsKK2NvbnN0IEdMZW51bSBGVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgPSAweDgwMEI7
CisKKy8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLworY29uc3QgR0xlbnVtIEJMRU5EX0RT
VF9SR0IgICAgICAgICAgICAgICAgICA9IDB4ODBDODsKK2NvbnN0IEdMZW51bSBCTEVORF9TUkNf
UkdCICAgICAgICAgICAgICAgICAgPSAweDgwQzk7Citjb25zdCBHTGVudW0gQkxFTkRfRFNUX0FM
UEhBICAgICAgICAgICAgICAgID0gMHg4MENBOworY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBI
QSAgICAgICAgICAgICAgICA9IDB4ODBDQjsKK2NvbnN0IEdMZW51bSBDT05TVEFOVF9DT0xPUiAg
ICAgICAgICAgICAgICAgPSAweDgwMDE7Citjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5U
X0NPTE9SICAgICAgID0gMHg4MDAyOworY29uc3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAg
ICAgICAgICAgICA9IDB4ODAwMzsKK2NvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQ
SEEgICAgICAgPSAweDgwMDQ7Citjb25zdCBHTGVudW0gQkxFTkRfQ09MT1IgICAgICAgICAgICAg
ICAgICAgID0gMHg4MDA1OworCisvKiBCdWZmZXIgT2JqZWN0cyAqLworY29uc3QgR0xlbnVtIEFS
UkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4ODg5MjsKK2NvbnN0IEdMZW51bSBFTEVN
RU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgPSAweDg4OTM7Citjb25zdCBHTGVudW0gQVJSQVlf
QlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0OworY29uc3QgR0xlbnVtIEVMRU1FTlRf
QVJSQVlfQlVGRkVSX0JJTkRJTkcgICA9IDB4ODg5NTsKKworY29uc3QgR0xlbnVtIFNUUkVBTV9E
UkFXICAgICAgICAgICAgICAgICAgICA9IDB4ODhFMDsKK2NvbnN0IEdMZW51bSBTVEFUSUNfRFJB
VyAgICAgICAgICAgICAgICAgICAgPSAweDg4RTQ7Citjb25zdCBHTGVudW0gRFlOQU1JQ19EUkFX
ICAgICAgICAgICAgICAgICAgID0gMHg4OEU4OworCitjb25zdCBHTGVudW0gQlVGRkVSX1NJWkUg
ICAgICAgICAgICAgICAgICAgID0gMHg4NzY0OworY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAg
ICAgICAgICAgICAgICAgICA9IDB4ODc2NTsKKworY29uc3QgR0xlbnVtIENVUlJFTlRfVkVSVEVY
X0FUVFJJQiAgICAgICAgICA9IDB4ODYyNjsKKworLyogQ3VsbEZhY2VNb2RlICovCitjb25zdCBH
TGVudW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OworY29uc3QgR0xl
bnVtIEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNTsKK2NvbnN0IEdMZW51
bSBGUk9OVF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgPSAweDA0MDg7CisKKy8qIERlcHRoRnVu
Y3Rpb24gKi8KKy8qICAgICAgTkVWRVIgKi8KKy8qICAgICAgTEVTUyAqLworLyogICAgICBFUVVB
TCAqLworLyogICAgICBMRVFVQUwgKi8KKy8qICAgICAgR1JFQVRFUiAqLworLyogICAgICBOT1RF
UVVBTCAqLworLyogICAgICBHRVFVQUwgKi8KKy8qICAgICAgQUxXQVlTICovCisKKy8qIEVuYWJs
ZUNhcCAqLworY29uc3QgR0xlbnVtIFRFWFRVUkVfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4
MERFMTsKK2NvbnN0IEdMZW51bSBDVUxMX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgPSAweDBC
NDQ7Citjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkUy
OworY29uc3QgR0xlbnVtIERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJEMDsK
K2NvbnN0IEdMZW51bSBTVEVOQ0lMX1RFU1QgICAgICAgICAgICAgICAgICAgPSAweDBCOTA7Citj
b25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjcxOworY29u
c3QgR0xlbnVtIFNDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA9IDB4MEMxMTsKK2NvbnN0
IEdMZW51bSBQT0xZR09OX09GRlNFVF9GSUxMICAgICAgICAgICAgPSAweDgwMzc7Citjb25zdCBH
TGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAgICAgID0gMHg4MDlFOworY29uc3QgR0xl
bnVtIFNBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICA9IDB4ODBBMDsKKworLyogRXJyb3JD
b2RlICovCitjb25zdCBHTGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsK
K2NvbnN0IEdMZW51bSBJTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgPSAweDA1MDA7Citj
b25zdCBHTGVudW0gSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgID0gMHgwNTAxOworY29u
c3QgR0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsKK2NvbnN0
IEdMZW51bSBPVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgPSAweDA1MDU7CisKKy8qIEZy
b250RmFjZURpcmVjdGlvbiAqLworY29uc3QgR0xlbnVtIENXICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDkwMDsKK2NvbnN0IEdMZW51bSBDQ1cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDA5MDE7CisKKy8qIEdldFBOYW1lICovCitjb25zdCBHTGVudW0gTElORV9XSURU
SCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOworY29uc3QgR0xlbnVtIEFMSUFTRURfUE9J
TlRfU0laRV9SQU5HRSAgICAgICA9IDB4ODQ2RDsKK2NvbnN0IEdMZW51bSBBTElBU0VEX0xJTkVf
V0lEVEhfUkFOR0UgICAgICAgPSAweDg0NkU7Citjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUg
ICAgICAgICAgICAgICAgID0gMHgwQjQ1OworY29uc3QgR0xlbnVtIEZST05UX0ZBQ0UgICAgICAg
ICAgICAgICAgICAgICA9IDB4MEI0NjsKK2NvbnN0IEdMZW51bSBERVBUSF9SQU5HRSAgICAgICAg
ICAgICAgICAgICAgPSAweDBCNzA7Citjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAg
ICAgICAgICAgID0gMHgwQjcyOworY29uc3QgR0xlbnVtIERFUFRIX0NMRUFSX1ZBTFVFICAgICAg
ICAgICAgICA9IDB4MEI3MzsKK2NvbnN0IEdMZW51bSBERVBUSF9GVU5DICAgICAgICAgICAgICAg
ICAgICAgPSAweDBCNzQ7Citjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAg
ICAgID0gMHgwQjkxOworY29uc3QgR0xlbnVtIFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAg
ICA9IDB4MEI5MjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAg
PSAweDBCOTQ7Citjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgID0g
MHgwQjk1OworY29uc3QgR0xlbnVtIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA9IDB4
MEI5NjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX1JFRiAgICAgICAgICAgICAgICAgICAgPSAweDBC
OTc7Citjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAgICAgID0gMHgwQjkz
OworY29uc3QgR0xlbnVtIFNURU5DSUxfV1JJVEVNQVNLICAgICAgICAgICAgICA9IDB4MEI5ODsK
K2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAgICAgICAgPSAweDg4MDA7Citj
b25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOworY29u
c3QgR0xlbnVtIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICA9IDB4ODgwMjsKK2NvbnN0
IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTICAgPSAweDg4MDM7Citjb25zdCBH
TGVudW0gU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOworY29uc3QgR0xl
bnVtIFNURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICA9IDB4OENBNDsKK2NvbnN0IEdMZW51
bSBTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAgICAgICAgPSAweDhDQTU7Citjb25zdCBHTGVudW0g
VklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOworY29uc3QgR0xlbnVtIFND
SVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICA9IDB4MEMxMDsKKy8qICAgICAgU0NJU1NPUl9U
RVNUICovCitjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgw
QzIyOworY29uc3QgR0xlbnVtIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEMy
MzsKK2NvbnN0IEdMZW51bSBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgPSAweDBDRjU7
Citjb25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAgID0gMHgwRDA1Owor
Y29uc3QgR0xlbnVtIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICA9IDB4MEQzMzsKK2Nv
bnN0IEdMZW51bSBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgPSAweDBEM0E7Citjb25z
dCBHTGVudW0gU1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOworY29uc3Qg
R0xlbnVtIFJFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MjsKK2NvbnN0IEdM
ZW51bSBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTM7Citjb25zdCBHTGVu
dW0gQkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OworY29uc3QgR0xlbnVt
IEFMUEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NTsKK2NvbnN0IEdMZW51bSBE
RVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTY7Citjb25zdCBHTGVudW0gU1RF
TkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OworY29uc3QgR0xlbnVtIFBPTFlH
T05fT0ZGU0VUX1VOSVRTICAgICAgICAgICA9IDB4MkEwMDsKKy8qICAgICAgUE9MWUdPTl9PRkZT
RVRfRklMTCAqLworY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA9
IDB4ODAzODsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0JJTkRJTkdfMkQgICAgICAgICAgICAgPSAw
eDgwNjk7Citjb25zdCBHTGVudW0gU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAgICAgID0gMHg4
MEE4OworY29uc3QgR0xlbnVtIFNBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBB
OTsKK2NvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0VfVkFMVUUgICAgICAgICAgPSAweDgwQUE7
Citjb25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgID0gMHg4MEFCOwor
CisvKiBHZXRUZXh0dXJlUGFyYW1ldGVyICovCisvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAq
LworLyogICAgICBURVhUVVJFX01JTl9GSUxURVIgKi8KKy8qICAgICAgVEVYVFVSRV9XUkFQX1Mg
Ki8KKy8qICAgICAgVEVYVFVSRV9XUkFQX1QgKi8KKworY29uc3QgR0xlbnVtIENPTVBSRVNTRURf
VEVYVFVSRV9GT1JNQVRTICAgICA9IDB4ODZBMzsKKworLyogSGludE1vZGUgKi8KK2NvbnN0IEdM
ZW51bSBET05UX0NBUkUgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDA7Citjb25zdCBHTGVu
dW0gRkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAxOworY29uc3QgR0xlbnVt
IE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMjsKKworLyogSGludFRhcmdl
dCAqLworY29uc3QgR0xlbnVtIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgPSAweDgx
OTI7CisKKy8qIERhdGFUeXBlICovCitjb25zdCBHTGVudW0gQllURSAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgxNDAwOworY29uc3QgR0xlbnVtIFVOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICA9IDB4MTQwMTsKK2NvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDE0MDI7Citjb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlQgICAgICAgICAgICAg
ICAgID0gMHgxNDAzOworY29uc3QgR0xlbnVtIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MTQwNDsKK2NvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAg
PSAweDE0MDU7Citjb25zdCBHTGVudW0gRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxNDA2OworCisvKiBQaXhlbEZvcm1hdCAqLworY29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVO
VCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKK2NvbnN0IEdMZW51bSBBTFBIQSAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDE5MDY7Citjb25zdCBHTGVudW0gUkdCICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgxOTA3OworY29uc3QgR0xlbnVtIFJHQkEgICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MTkwODsKK2NvbnN0IEdMZW51bSBMVU1JTkFOQ0UgICAgICAgICAgICAg
ICAgICAgICAgPSAweDE5MDk7Citjb25zdCBHTGVudW0gTFVNSU5BTkNFX0FMUEhBICAgICAgICAg
ICAgICAgID0gMHgxOTBBOworCisvKiBQaXhlbFR5cGUgKi8KKy8qICAgICAgVU5TSUdORURfQllU
RSAqLworY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICA9IDB4ODAz
MzsKK2NvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7
Citjb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgID0gMHg4MzYzOwor
CisvKiBTaGFkZXJzICovCitjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAgICAgICAgICAg
ICAgICAgPSAweDhCMzA7Citjb25zdCBHTGVudW0gVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAg
ICAgICAgPSAweDhCMzE7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAg
ICAgICAgPSAweDg4Njk7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMg
ICAgICAgPSAweDhERkI7Citjb25zdCBHTGVudW0gTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAg
ICAgICAgPSAweDhERkM7Citjb25zdCBHTGVudW0gTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgPSAweDhCNEQ7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTICAgPSAweDhCNEM7Citjb25zdCBHTGVudW0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAg
ICAgICAgPSAweDg4NzI7Citjb25zdCBHTGVudW0gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9S
UyAgICAgPSAweDhERkQ7Citjb25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAg
ICAgICAgPSAweDhCNEY7Citjb25zdCBHTGVudW0gREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAg
ICAgICAgPSAweDhCODA7Citjb25zdCBHTGVudW0gTElOS19TVEFUVVMgICAgICAgICAgICAgICAg
ICAgICAgPSAweDhCODI7Citjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAg
ICAgICAgPSAweDhCODM7Citjb25zdCBHTGVudW0gQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAg
ICAgICAgPSAweDhCODU7Citjb25zdCBHTGVudW0gQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAg
ICAgICAgPSAweDhCODY7Citjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAg
ICAgICAgPSAweDhCODk7Citjb25zdCBHTGVudW0gU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAg
ICAgICAgPSAweDhCOEM7Citjb25zdCBHTGVudW0gQ1VSUkVOVF9QUk9HUkFNICAgICAgICAgICAg
ICAgICAgPSAweDhCOEQ7CisKKy8qIFN0ZW5jaWxGdW5jdGlvbiAqLworY29uc3QgR0xlbnVtIE5F
VkVSICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMDsKK2NvbnN0IEdMZW51bSBMRVNT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDE7Citjb25zdCBHTGVudW0gRVFVQUwg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAyOworY29uc3QgR0xlbnVtIExFUVVBTCAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMzsKK2NvbnN0IEdMZW51bSBHUkVBVEVSICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDQ7Citjb25zdCBHTGVudW0gTk9URVFVQUwgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwMjA1OworY29uc3QgR0xlbnVtIEdFUVVBTCAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDIwNjsKK2NvbnN0IEdMZW51bSBBTFdBWVMgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDAyMDc7CisKKy8qIFN0ZW5jaWxPcCAqLworLyogICAgICBaRVJP
ICovCitjb25zdCBHTGVudW0gS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAw
OworY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMTsK
K2NvbnN0IEdMZW51bSBJTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDI7Citj
b25zdCBHTGVudW0gREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAzOworY29u
c3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTUwQTsKK2NvbnN0
IEdMZW51bSBJTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgPSAweDg1MDc7Citjb25zdCBH
TGVudW0gREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0gMHg4NTA4OworCisvKiBTdHJp
bmdOYW1lICovCitjb25zdCBHTGVudW0gVkVORE9SICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxRjAwOworY29uc3QgR0xlbnVtIFJFTkRFUkVSICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MUYwMTsKK2NvbnN0IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFG
MDI7CisKKy8qIFRleHR1cmVNYWdGaWx0ZXIgKi8KK2NvbnN0IEdMZW51bSBORUFSRVNUICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDI2MDA7Citjb25zdCBHTGVudW0gTElORUFSICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgyNjAxOworCisvKiBUZXh0dXJlTWluRmlsdGVyICovCisvKiAg
ICAgIE5FQVJFU1QgKi8KKy8qICAgICAgTElORUFSICovCitjb25zdCBHTGVudW0gTkVBUkVTVF9N
SVBNQVBfTkVBUkVTVCAgICAgICAgID0gMHgyNzAwOworY29uc3QgR0xlbnVtIExJTkVBUl9NSVBN
QVBfTkVBUkVTVCAgICAgICAgICA9IDB4MjcwMTsKK2NvbnN0IEdMZW51bSBORUFSRVNUX01JUE1B
UF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7Citjb25zdCBHTGVudW0gTElORUFSX01JUE1BUF9M
SU5FQVIgICAgICAgICAgID0gMHgyNzAzOworCisvKiBUZXh0dXJlUGFyYW1ldGVyTmFtZSAqLwor
Y29uc3QgR0xlbnVtIFRFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKK2Nv
bnN0IEdMZW51bSBURVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgPSAweDI4MDE7Citjb25z
dCBHTGVudW0gVEVYVFVSRV9XUkFQX1MgICAgICAgICAgICAgICAgID0gMHgyODAyOworY29uc3Qg
R0xlbnVtIFRFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKKworLyogVGV4
dHVyZVRhcmdldCAqLworLyogICAgICBURVhUVVJFXzJEICovCitjb25zdCBHTGVudW0gVEVYVFVS
RSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOworCitjb25zdCBHTGVudW0gVEVYVFVS
RV9DVUJFX01BUCAgICAgICAgICAgICAgID0gMHg4NTEzOworY29uc3QgR0xlbnVtIFRFWFRVUkVf
QklORElOR19DVUJFX01BUCAgICAgICA9IDB4ODUxNDsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7Citjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YICAgID0gMHg4NTE2OworY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWSAgICA9IDB4ODUxNzsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1kgICAgPSAweDg1MTg7Citjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9aICAgID0gMHg4NTE5OworY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWiAgICA9IDB4ODUxQTsKK2NvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9T
SVpFICAgICAgPSAweDg1MUM7CisKKy8qIFRleHR1cmVVbml0ICovCitjb25zdCBHTGVudW0gVEVY
VFVSRTAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMwOworY29uc3QgR0xlbnVtIFRFWFRV
UkUxICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKK2NvbnN0IEdMZW51bSBURVhUVVJF
MiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzI7Citjb25zdCBHTGVudW0gVEVYVFVSRTMg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMzOworY29uc3QgR0xlbnVtIFRFWFRVUkU0ICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKK2NvbnN0IEdMZW51bSBURVhUVVJFNSAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0QzU7Citjb25zdCBHTGVudW0gVEVYVFVSRTYgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NEM2OworY29uc3QgR0xlbnVtIFRFWFRVUkU3ICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODRDNzsKK2NvbnN0IEdMZW51bSBURVhUVVJFOCAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0Qzg7Citjb25zdCBHTGVudW0gVEVYVFVSRTkgICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NEM5OworY29uc3QgR0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAg
ICAgICAgICA9IDB4ODRDQTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTEgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0Q0I7Citjb25zdCBHTGVudW0gVEVYVFVSRTEyICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NENDOworY29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODRDRDsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0Q0U7Citjb25zdCBHTGVudW0gVEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NENGOworY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODREMDsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
RDE7Citjb25zdCBHTGVudW0gVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQy
OworY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMzsK
K2NvbnN0IEdMZW51bSBURVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDQ7Citj
b25zdCBHTGVudW0gVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ1OworY29u
c3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENjsKK2NvbnN0
IEdMZW51bSBURVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDc7Citjb25zdCBH
TGVudW0gVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ4OworY29uc3QgR0xl
bnVtIFRFWFRVUkUyNSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREOTsKK2NvbnN0IEdMZW51
bSBURVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REE7Citjb25zdCBHTGVudW0g
VEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERCOworY29uc3QgR0xlbnVtIFRF
WFRVUkUyOCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREQzsKK2NvbnN0IEdMZW51bSBURVhU
VVJFMjkgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REQ7Citjb25zdCBHTGVudW0gVEVYVFVS
RTMwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERFOworY29uc3QgR0xlbnVtIFRFWFRVUkUz
MSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKK2NvbnN0IEdMZW51bSBBQ1RJVkVfVEVY
VFVSRSAgICAgICAgICAgICAgICAgPSAweDg0RTA7CisKKy8qIFRleHR1cmVXcmFwTW9kZSAqLwor
Y29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjkwMTsKK2Nv
bnN0IEdMZW51bSBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgPSAweDgxMkY7Citjb25z
dCBHTGVudW0gTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgID0gMHg4MzcwOworCisvKiBV
bmlmb3JtIFR5cGVzICovCitjb25zdCBHTGVudW0gRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAg
ICAgID0gMHg4QjUwOworY29uc3QgR0xlbnVtIEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEI1MTsKK2NvbnN0IEdMZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAg
PSAweDhCNTI7Citjb25zdCBHTGVudW0gSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgID0g
MHg4QjUzOworY29uc3QgR0xlbnVtIElOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI1NDsKK2NvbnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhC
NTU7Citjb25zdCBHTGVudW0gQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU2
OworY29uc3QgR0xlbnVtIEJPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NzsK
K2NvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTg7Citj
b25zdCBHTGVudW0gQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU5OworY29u
c3QgR0xlbnVtIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QTsKK2NvbnN0
IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUI7Citjb25zdCBH
TGVudW0gRkxPQVRfTUFUNCAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVDOworY29uc3QgR0xl
bnVtIFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1RTsKK2NvbnN0IEdMZW51
bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgPSAweDhCNjA7CisKKy8qIFZlcnRleCBB
cnJheXMgKi8KK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAg
ID0gMHg4NjIyOworY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAg
ICAgPSAweDg2MjM7Citjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAg
ICAgICA9IDB4ODYyNDsKK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAg
ICAgICAgID0gMHg4NjI1OworY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFM
SVpFRCAgICAgPSAweDg4NkE7Citjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lO
VEVSICAgICAgICA9IDB4ODY0NTsKK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0JV
RkZFUl9CSU5ESU5HID0gMHg4ODlGOworCisvKiBTaGFkZXIgU291cmNlICovCitjb25zdCBHTGVu
dW0gQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgID0gMHg4QjgxOworCisvKiBTaGFkZXIg
UHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLworY29uc3QgR0xlbnVtIExPV19GTE9BVCAgICAg
ICAgICAgICAgICAgICAgICA9IDB4OERGMDsKK2NvbnN0IEdMZW51bSBNRURJVU1fRkxPQVQgICAg
ICAgICAgICAgICAgICAgPSAweDhERjE7Citjb25zdCBHTGVudW0gSElHSF9GTE9BVCAgICAgICAg
ICAgICAgICAgICAgID0gMHg4REYyOworY29uc3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4OERGMzsKK2NvbnN0IEdMZW51bSBNRURJVU1fSU5UICAgICAgICAgICAg
ICAgICAgICAgPSAweDhERjQ7Citjb25zdCBHTGVudW0gSElHSF9JTlQgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4REY1OworCisvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCitjb25zdCBHTGVu
dW0gRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgID0gMHg4RDQwOworY29uc3QgR0xlbnVt
IFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MTsKKworY29uc3QgR0xlbnVt
IFJHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKK2NvbnN0IEdMZW51bSBS
R0I1X0ExICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwNTc7Citjb25zdCBHTGVudW0gUkdC
NTY1ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RDYyOworY29uc3QgR0xlbnVtIERFUFRI
X0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKK2NvbnN0IEdMZW51bSBTVEVOQ0lM
X0lOREVYICAgICAgICAgICAgICAgICAgPSAweDE5MDE7Citjb25zdCBHTGVudW0gU1RFTkNJTF9J
TkRFWDggICAgICAgICAgICAgICAgID0gMHg4RDQ4OworY29uc3QgR0xlbnVtIERFUFRIX1NURU5D
SUwgICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKKworY29uc3QgR0xlbnVtIFNSR0JfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQwOworY29uc3QgR0xlbnVt
IFNSR0JfQUxQSEFfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQyOwor
Y29uc3QgR0xlbnVtIFNSR0I4X0FMUEhBOF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QzQzOworY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5D
T0RJTkdfRVhUICAgID0gMHg4MjEwOworCitjb25zdCBHTGVudW0gTUlOX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4MDA3OworY29uc3QgR0xlbnVtIE1BWF9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODAwODsKKworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9XSURUSCAg
ICAgICAgICAgICA9IDB4OEQ0MjsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfSEVJR0hUICAg
ICAgICAgICAgPSAweDhENDM7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZP
Uk1BVCAgID0gMHg4RDQ0OworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9SRURfU0laRSAgICAg
ICAgICA9IDB4OEQ1MDsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAg
ICAgPSAweDhENTE7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAg
ID0gMHg4RDUyOworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFICAgICAgICA9
IDB4OEQ1MzsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgPSAw
eDhENTQ7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAgID0gMHg4
RDU1OworCitjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAg
ICAgICAgICAgPSAweDhDRDA7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfTkFNRSAgICAgICAgICAgPSAweDhDRDE7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAweDhDRDI7Citjb25zdCBHTGVudW0g
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgPSAweDhDRDM7CisK
K2NvbnN0IEdMZW51bSBDT0xPUl9BVFRBQ0hNRU5UMCAgICAgICAgICAgICAgPSAweDhDRTA7Citj
b25zdCBHTGVudW0gREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4RDAwOworY29u
c3QgR0xlbnVtIFNURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICA9IDB4OEQyMDsKK2NvbnN0
IEdMZW51bSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgPSAweDgyMUE7CisKK2NvbnN0
IEdMZW51bSBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworCitjb25zdCBHTGVu
dW0gRlJBTUVCVUZGRVJfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhDRDU7Citj
b25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgPSAw
eDhDRDY7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFD
SE1FTlQgPSAweDhDRDc7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1F
TlNJT05TICAgICAgICAgPSAweDhDRDk7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfVU5TVVBQ
T1JURUQgICAgICAgICAgICAgICAgICAgPSAweDhDREQ7CisKK2NvbnN0IEdMZW51bSBGUkFNRUJV
RkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Citjb25zdCBHTGVudW0gUkVOREVSQlVG
RkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4Q0E3OworY29uc3QgR0xlbnVtIE1BWF9SRU5ERVJC
VUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRFODsKKworY29uc3QgR0xlbnVtIElOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUwNjsKKworLyogV2ViR0wtc3BlY2lmaWMgZW51bXMg
Ki8KK2NvbnN0IEdMZW51bSBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAgICAgICAgID0gMHg5
MjQwOworY29uc3QgR0xlbnVtIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAw
eDkyNDE7Citjb25zdCBHTGVudW0gQ09OVEVYVF9MT1NUX1dFQkdMICAgICAgICAgICAgICAgICA9
IDB4OTI0MjsKK2NvbnN0IEdMZW51bSBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdM
ID0gMHg5MjQzOworY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICAg
ICAgPSAweDkyNDQ7CisKK3JlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJX
aWR0aDsKK3JlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJIZWlnaHQ7CisK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGFjdGl2
ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBX
ZWJHTFNoYWRlciBzaGFkZXIpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBH
THVpbnQgaW5kZXgsIERPTVN0cmluZyBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRCdWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xC
dWZmZXIgYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVy
IGZyYW1lYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIGJpbmRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZm
ZXIgcmVuZGVyYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdMZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0
dXJlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZENvbG9yKEdMY2xh
bXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsK
K1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uKEdMZW51bSBt
b2RlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2Vw
YXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOworW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVuYyhHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0
b3IpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVuY1NlcGFyYXRl
KEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRz
dEFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdMZW51bSB1
c2FnZSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICBidWZmZXJEYXRhKEdMZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldz8gZGF0YSwgR0xlbnVt
IHVzYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNh
Z2UpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
YnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVy
PyBkYXRhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1
ZmZlclZpZXc/IGRhdGEpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVudW0gICAgICAgY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0gdGFyZ2V0KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZpZWxkIG1hc2spOworW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGNsZWFyQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwg
R0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIGNsZWFyRGVwdGgoR0xjbGFtcGYgZGVwdGgpOworW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNpbChHTGludCBzKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBjb2xvck1hc2soR0xib29sZWFuIHJlZCwgR0xib29sZWFuIGdyZWVu
LCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFuIGFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIg
c2hhZGVyKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRU
ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBBcnJheUJ1
ZmZlclZpZXcgZGF0YSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29tcHJl
c3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3IGRhdGEpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgY29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgY29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xCdWZmZXIgY3Jl
YXRlQnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTEZyYW1lYnVmZmVyIGNyZWF0
ZUZyYW1lYnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFByb2dyYW0gY3JlYXRl
UHJvZ3JhbSgpOworW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xSZW5kZXJidWZmZXIgY3JlYXRl
UmVuZGVyYnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdl
YkdMU2hhZGVyIGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7CitbU3RyaWN0VHlwZUNoZWNraW5n
XSBXZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVyZSgpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgY3VsbEZhY2UoR0xlbnVtIG1vZGUpOworCitbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyIGJ1ZmZlcik7CitbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1
ZmZlciBmcmFtZWJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVs
ZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1
ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlU2hhZGVyKFdl
YkdMU2hhZGVyIHNoYWRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVs
ZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBkZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpOworW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGRlcHRoTWFzayhHTGJvb2xlYW4gZmxhZyk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhSYW5nZShHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYg
ekZhcik7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIFdlYkdMU2hhZGVyIHNoYWRlcik7
CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGlzYWJsZShHTGVudW0gY2FwKTsK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOworW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xp
bnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKworW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGVuYWJsZShHTGVudW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdM
dWludCBpbmRleCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmluaXNoKCk7
CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVm
ZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOworW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIFdl
YkdMVGV4dHVyZSB0ZXh0dXJlLCBHTGludCBsZXZlbCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBnZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KTsKKworW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlQXR0
cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgpOworW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlVW5pZm9ybShX
ZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsKKworW1N0cmljdFR5cGVDaGVja2lu
ZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdM
UHJvZ3JhbSBwcm9ncmFtKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdl
dEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7CisK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdldEJ1ZmZlclBhcmFtZXRlcihHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIEdMZW51bSBnZXRFcnJvcigpOworCisvLyBvYmplY3QgZ2V0RXh0ZW5zaW9uKERPTVN0
cmluZyBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdldEV4dGVuc2lv
bihET01TdHJpbmcgbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOworW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRQYXJhbWV0ZXIoR0xlbnVtIHBu
YW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkg
Z2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0xlbnVtIHBuYW1lKTsK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFp
c2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtIHBy
b2dyYW0pOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFu
eSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0U2hh
ZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyIHNoYWRlciwgR0xlbnVtIHBuYW1lKTsKKworW1N0cmlj
dFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNl
cHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNoYWRlcik7
CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xTaGFkZXJQcmVj
aXNpb25Gb3JtYXQgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdMZW51bSBzaGFkZXJ0eXBlLCBH
TGVudW0gcHJlY2lzaW9udHlwZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJu
ZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hh
ZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VGV4UGFy
YW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VW5pZm9ybShXZWJHTFByb2dyYW0g
cHJvZ3JhbSwgV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24pOworCitbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZvcm1M
b2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOworCitbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFZlcnRleEF0dHJp
YihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdM
c2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1l
KTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIG1vZGUpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzQnVm
ZmVyKFdlYkdMQnVmZmVyIGJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4g
ICAgaXNDb250ZXh0TG9zdCgpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlz
RW5hYmxlZChHTGVudW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBp
c0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOworW1N0cmljdFR5cGVD
aGVja2luZ10gR0xib29sZWFuICAgIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Citb
U3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5k
ZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAg
ICBpc1NoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xi
b29sZWFuICAgIGlzVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgbGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOworW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgbGlua1Byb2dyYW0oV2Vi
R0xQcm9ncmFtIHByb2dyYW0pOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBp
eGVsU3RvcmVpKEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5p
dHMpOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3IHBpeGVscyk7
CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29tcGls
ZXIoKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZW5kZXJidWZmZXJTdG9y
YWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHNhbXBs
ZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lzc29yKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIHNoYWRlclNvdXJjZShXZWJHTFNoYWRlciBzaGFkZXIsIERPTVN0
cmluZyBzdHJpbmcpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxG
dW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVu
dW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgc3RlbmNpbE1hc2soR0x1aW50IG1hc2spOworW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWludCBt
YXNrKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVt
IGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBzdGVuY2lsT3BTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZhaWws
IEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIHRleFBhcmFtZXRlcmYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZs
b2F0IHBhcmFtKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJhbWV0
ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworCisvLyBTdXBw
b3J0ZWQgZm9ybXM6CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKK0dMaW50IGJvcmRl
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleElt
YWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwK
K0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7CitbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCitHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudD8gaW1hZ2UpOworW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAorR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMpOworI2lmIGRlZmlu
ZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRlbyk7CisjZW5kaWYKKworW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCitHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgCitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
QXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKK0dMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAorR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCitHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ/IGNhbnZhcyk7CisjaWYgZGVmaW5l
ZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKK0dMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRlbyk7CisjZW5kaWYKKworW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZihXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24s
IEdMaW50IHgpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgdW5pZm9ybTFpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJh
eSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3Jt
MmYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm0yZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmkoV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpOworW1N0cmljdFR5cGVD
aGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2YoV2ViR0xVbmlmb3JtTG9jYXRpb24g
bG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOworW1N0cmljdFR5cGVD
aGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmdihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOworW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zaShXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7CitbU3RyaWN0VHlwZUNoZWNr
aW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2l2KFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOworW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2Nh
dGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYo
V2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGkoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpOwor
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9y
bTRpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKworW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1h
dHJpeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24g
bG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSBhcnJheSk7CitbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0
cml4NGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBGbG9hdDMyQXJyYXkgYXJyYXkpOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZhbGlkYXRl
UHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4KTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGluZHgs
IEZsb2F0MzJBcnJheSB2YWx1ZXMpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IHZlcnRleEF0dHJpYjJmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CitbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmR4
LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxv
YXQgeik7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliM2Z2
KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZs
b2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMp
OworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdmVy
dGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5keCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdM
Ym9vbGVhbiBub3JtYWxpemVkLCAKK0dMc2l6ZWkgc3RyaWRlLCBHTGludHB0ciBvZmZzZXQpOwor
CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKIAogI2luY2x1
ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMU2hhZGVyOjpjcmVhdGUo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIEdDM0RlbnVtIHR5cGUpCitQYXNzUmVmUHRyPFdl
YkdMU2hhZGVyPiBXZWJHTFNoYWRlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
IGN0eCwgR0MzRGVudW0gdHlwZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMU2hh
ZGVyKGN0eCwgdHlwZSkpOwogfQogCi1XZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjdHgsIEdDM0RlbnVtIHR5cGUpCitXZWJHTFNoYWRlcjo6V2ViR0xTaGFk
ZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4LCBHQzNEZW51bSB0eXBlKQogICAgIDog
V2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3NvdXJj
ZSgiIikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkocmV2
aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBXZWJHTFNoYWRlciBmaW5h
bCA6IHB1YmxpYyBXZWJHTFNoCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xTaGFkZXIoKTsK
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiwgR0MzRGVudW0pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hhZGVy
PiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSosIEdDM0RlbnVtKTsKIAogICAgIEdD
M0RlbnVtIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBTdHJp
bmcmIGdldFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CkBAIC00Nyw3ICs0Nyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZhbGlkKGJvb2wgdmFsaWQpIHsgbV9pc1ZhbGlkID0g
dmFsaWQ7IH0KIAogcHJpdmF0ZToKLSAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqLCBHQzNEZW51bSk7CisgICAgV2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSosIEdDM0RlbnVtKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBo
aWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAJKHJldmlz
aW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAjaW5jbHVkZSAiV2Vi
R0xTaGFyZWRPYmplY3QuaCIKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5j
bHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMU2hhcmVkT2JqZWN0
OjpXZWJHTFNoYXJlZE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJH
TFNoYXJlZE9iamVjdDo6V2ViR0xTaGFyZWRPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY29udGV4dCkKICAgICA6IFdlYkdMT2JqZWN0KGNvbnRleHQpLAogICAgICAgbV9jb250ZXh0
R3JvdXAoY29udGV4dC0+Y29udGV4dEdyb3VwKCkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmgJKHJldmlzaW9uIDE3ODYwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKIAogLy8gV2Vi
R0xTaGFyZWRPYmplY3QgdGhlIGJhc2UgY2xhc3MgZm9yIG9iamVjdHMgdGhhdCBjYW4gYmUgc2hh
cmVkIGJ5IG11bHRpcGxlCiAvLyBXZWJHTFJlbmRlcmluZ0NvbnRleHRzLgpAQCAtNDgsNyArNDgs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91
cCogY29udGV4dEdyb3VwLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqKSBjb25zdCBvdmVy
cmlkZQorICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCog
Y29udGV4dEdyb3VwLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKikgY29uc3Qgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBjb250ZXh0R3JvdXAgPT0gbV9jb250ZXh0R3Jv
dXA7CiAgICAgfQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2hDb250
ZXh0R3JvdXAoKTsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMU2hhcmVkT2JqZWN0KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdMU2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNHcm91cE9yQ29udGV4dCgpIGNvbnN0
IG92ZXJyaWRlCiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xU
ZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFRleHR1cmUuY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNiArMzEsMTYgQEAK
IAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1
ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNz
UmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjcmVh
dGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogewogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV2ViR0xUZXh0dXJlKGN0eCkpOwogfQogCi1XZWJHTFRleHR1cmU6OldlYkdMVGV4dHVy
ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKK1dlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJl
KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0
KGN0eCkKICAgICAsIG1fdGFyZ2V0KDApCiAgICAgLCBtX21pbkZpbHRlcihHcmFwaGljc0NvbnRl
eHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xUZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xUZXh0dXJlLmgJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfldlYkdMVGV4dHVyZSgpOwogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSopOwogCiAgICAgdm9pZCBzZXRUYXJnZXQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IG1heExldmVsKTsKICAgICB2b2lkIHNldFBhcmFtZXRlcmkoR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQgcGFyYW0pOwpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEdD
M0RpbnQgY29tcHV0ZUxldmVsQ291bnQoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KTsKIAogcHJpdmF0ZToKLSAgICBXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7
CisgICAgV2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0z
RE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwCShyZXZpc2lvbiAxNzg2
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0j
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRl
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4LCBWYW9UeXBlIHR5cGUpCitQYXNzUmVmUHRyPFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0
ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgsIFZhb1R5cGUgdHlwZSkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoY3R4LCB0eXBlKSk7
CiB9CiAKLVdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIFZhb1R5cGUgdHlwZSkKK1dlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY3R4LCBWYW9UeXBlIHR5cGUpCiAgICAgOiBXZWJHTENvbnRleHRPYmplY3Qo
Y3R4KQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUy5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgfldlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBWYW9UeXBlKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSosIFZhb1R5cGUpOwogICAgIAogICAgIC8vIENhY2hlZCB2YWx1
ZXMgZm9yIHZlcnRleCBhdHRyaWIgcmFuZ2UgY2hlY2tzCiAgICAgc3RydWN0IFZlcnRleEF0dHJp
YlN0YXRlIHsKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmVydGV4QXR0
cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcik7CiAKIHByaXZhdGU6
Ci0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBW
YW9UeXBlKTsKKyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqLCBWYW9UeXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBs
KEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAgICAgCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzg2MDUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0wMS0xNiAgUm9nZXIgRm9uZyAgPHJvZ2Vy
X2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkdMMjogU3VwcG9ydCB3ZWJnbDIgY29udGV4
dCBjcmVhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNjQwOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUwMDIxNzA+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC9iYWQtYXJndW1lbnRzLXRlc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL251bGwtb2JqZWN0LWJlaGF2aW91ci1leHBlY3RlZC50eHQ6CisKIDIwMTUtMDEtMTYg
IEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHRo
ZSBhbHRlcm5hdGl2ZSBzeW50YXggZm9yIENTUyBTZWxlY3RvcidzIGRlc2NlbmRhbnQgY29tYmlu
YXRvciAoIj4+IikKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2JhZC1hcmd1
bWVudHMtdGVzdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvYmFkLWFyZ3VtZW50cy10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTc4
NjA0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYmFkLWFyZ3VtZW50cy10ZXN0
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNSwyMSArNSwyMSBAQCBPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiBQQVNTIFByb2dyYW0gQ29tcGlsZWQKIFBB
U1MgU2hhZGVyIENvbXBpbGVkCiBQQVNTIGdldFVuaWZvcm1Mb2NhdGlvbiBzdWNjZWVkZWQKLVBB
U1MgY29udGV4dC5jb21waWxlU2hhZGVyKGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBBcmd1bWVudCAxICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNvbXBp
bGVTaGFkZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFNoYWRlci4KLVBBU1MgY29udGV4
dC5saW5rUHJvZ3JhbShhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1l
bnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQubGlua1Byb2dyYW0gbXVz
dCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCi1QQVNTIGNvbnRleHQuYXR0YWNoU2hh
ZGVyKHByb2dyYW0sIGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVu
dCAyICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmF0dGFjaFNoYWRlciBtdXN0
IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMU2hhZGVyLgotUEFTUyBjb250ZXh0LmF0dGFjaFNoYWRl
cihhcmd1bWVudCwgc2hhZGVyKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAx
ICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5hdHRhY2hTaGFkZXIgbXVzdCBi
ZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCi1QQVNTIGNvbnRleHQuZGV0YWNoU2hhZGVy
KHByb2dyYW0sIGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAy
ICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmRldGFjaFNoYWRlciBtdXN0IGJl
IGFuIGluc3RhbmNlIG9mIFdlYkdMU2hhZGVyLgotUEFTUyBjb250ZXh0LmRldGFjaFNoYWRlcihh
cmd1bWVudCwgc2hhZGVyKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgn
cHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5kZXRhY2hTaGFkZXIgbXVzdCBiZSBh
biBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCi1QQVNTIGNvbnRleHQudXNlUHJvZ3JhbShhcmd1
bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQudXNlUHJvZ3JhbSBtdXN0IGJlIGFuIGluc3RhbmNlIG9m
IFdlYkdMUHJvZ3JhbS4KLVBBU1MgY29udGV4dC5zaGFkZXJTb3VyY2UoYXJndW1lbnQsICdmb28n
KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgnc2hhZGVyJykgdG8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LnNoYWRlclNvdXJjZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdl
YkdMU2hhZGVyLgotUEFTUyBjb250ZXh0LmJpbmRBdHRyaWJMb2NhdGlvbihhcmd1bWVudCwgMCwg
J2ZvbycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdwcm9ncmFtJykg
dG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmJpbmRBdHRyaWJMb2NhdGlvbiBtdXN0IGJlIGFuIGlu
c3RhbmNlIG9mIFdlYkdMUHJvZ3JhbS4KLVBBU1MgY29udGV4dC5iaW5kQnVmZmVyKGNvbnRleHQu
QVJSQVlfQlVGRkVSLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1l
bnQgMiAoJ2J1ZmZlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5iaW5kQnVmZmVyIG11c3Qg
YmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xCdWZmZXIuCi1QQVNTIGNvbnRleHQuYmluZEZyYW1lYnVm
ZmVyKGNvbnRleHQuRlJBTUVCVUZGRVIsIGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBBcmd1bWVudCAyICgnZnJhbWVidWZmZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQu
YmluZEZyYW1lYnVmZmVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xGcmFtZWJ1ZmZlci4K
LVBBU1MgY29udGV4dC5iaW5kUmVuZGVyYnVmZmVyKGNvbnRleHQuUkVOREVSQlVGRkVSLCBhcmd1
bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ3JlbmRlcmJ1ZmZl
cicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5iaW5kUmVuZGVyYnVmZmVyIG11c3QgYmUgYW4g
aW5zdGFuY2Ugb2YgV2ViR0xSZW5kZXJidWZmZXIuCi1QQVNTIGNvbnRleHQuYmluZFRleHR1cmUo
Y29udGV4dC5URVhUVVJFXzJELCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
QXJndW1lbnQgMiAoJ3RleHR1cmUnKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuYmluZFRleHR1
cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFRleHR1cmUuCi1QQVNTIGNvbnRleHQuZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5ERVBUSF9B
VFRBQ0hNRU5ULCBjb250ZXh0LlJFTkRFUkJVRkZFUiwgYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEFyZ3VtZW50IDQgKCdyZW5kZXJidWZmZXInKSB0byBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBX
ZWJHTFJlbmRlcmJ1ZmZlci4KLVBBU1MgY29udGV4dC5mcmFtZWJ1ZmZlclRleHR1cmUyRChjb250
ZXh0LkZSQU1FQlVGRkVSLCBjb250ZXh0LkNPTE9SX0FUVEFDSE1FTlQwLCBjb250ZXh0LlRFWFRV
UkVfMkQsIGFyZ3VtZW50LCAwKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCA0
ICgndGV4dHVyZScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5mcmFtZWJ1ZmZlclRleHR1cmUy
RCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMVGV4dHVyZS4KK1BBU1MgY29udGV4dC5jb21w
aWxlU2hhZGVyKGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAx
ICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jb21waWxlU2hhZGVyIG11
c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xTaGFkZXIuCitQQVNTIGNvbnRleHQubGlua1Byb2dy
YW0oYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdwcm9n
cmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5saW5rUHJvZ3JhbSBtdXN0IGJlIGFu
IGluc3RhbmNlIG9mIFdlYkdMUHJvZ3JhbS4KK1BBU1MgY29udGV4dC5hdHRhY2hTaGFkZXIocHJv
Z3JhbSwgYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCdz
aGFkZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmF0dGFjaFNoYWRlciBtdXN0IGJl
IGFuIGluc3RhbmNlIG9mIFdlYkdMU2hhZGVyLgorUEFTUyBjb250ZXh0LmF0dGFjaFNoYWRlcihh
cmd1bWVudCwgc2hhZGVyKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgn
cHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuYXR0YWNoU2hhZGVyIG11c3Qg
YmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgorUEFTUyBjb250ZXh0LmRldGFjaFNoYWRl
cihwcm9ncmFtLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQg
MiAoJ3NoYWRlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuZGV0YWNoU2hhZGVyIG11
c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xTaGFkZXIuCitQQVNTIGNvbnRleHQuZGV0YWNoU2hh
ZGVyKGFyZ3VtZW50LCBzaGFkZXIpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50
IDEgKCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5kZXRhY2hTaGFkZXIg
bXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCitQQVNTIGNvbnRleHQudXNlUHJv
Z3JhbShhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3By
b2dyYW0nKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLnVzZVByb2dyYW0gbXVzdCBiZSBh
biBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCitQQVNTIGNvbnRleHQuc2hhZGVyU291cmNlKGFy
Z3VtZW50LCAnZm9vJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3No
YWRlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uuc2hhZGVyU291cmNlIG11c3QgYmUg
YW4gaW5zdGFuY2Ugb2YgV2ViR0xTaGFkZXIuCitQQVNTIGNvbnRleHQuYmluZEF0dHJpYkxvY2F0
aW9uKGFyZ3VtZW50LCAwLCAnZm9vJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1l
bnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmJpbmRBdHRyaWJM
b2NhdGlvbiBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUHJvZ3JhbS4KK1BBU1MgY29udGV4
dC5iaW5kQnVmZmVyKGNvbnRleHQuQVJSQVlfQlVGRkVSLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ2J1ZmZlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuYmluZEJ1ZmZlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMQnVmZmVyLgor
UEFTUyBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZlcihjb250ZXh0LkZSQU1FQlVGRkVSLCBhcmd1bWVu
dCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ2ZyYW1lYnVmZmVyJykg
dG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5iaW5kRnJhbWVidWZmZXIgbXVzdCBiZSBhbiBp
bnN0YW5jZSBvZiBXZWJHTEZyYW1lYnVmZmVyLgorUEFTUyBjb250ZXh0LmJpbmRSZW5kZXJidWZm
ZXIoY29udGV4dC5SRU5ERVJCVUZGRVIsIGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBBcmd1bWVudCAyICgncmVuZGVyYnVmZmVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5iaW5kUmVuZGVyYnVmZmVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xSZW5kZXJi
dWZmZXIuCitQQVNTIGNvbnRleHQuYmluZFRleHR1cmUoY29udGV4dC5URVhUVVJFXzJELCBhcmd1
bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ3RleHR1cmUnKSB0
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmJpbmRUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFu
Y2Ugb2YgV2ViR0xUZXh0dXJlLgorUEFTUyBjb250ZXh0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KGNvbnRleHQuRlJBTUVCVUZGRVIsIGNvbnRleHQuREVQVEhfQVRUQUNITUVOVCwgY29udGV4dC5S
RU5ERVJCVUZGRVIsIGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVu
dCA0ICgncmVuZGVyYnVmZmVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5mcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUmVuZGVyYnVmZmVy
LgorUEFTUyBjb250ZXh0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKGNvbnRleHQuRlJBTUVCVUZGRVIs
IGNvbnRleHQuQ09MT1JfQVRUQUNITUVOVDAsIGNvbnRleHQuVEVYVFVSRV8yRCwgYXJndW1lbnQs
IDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDQgKCd0ZXh0dXJlJykgdG8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCBtdXN0IGJlIGFu
IGluc3RhbmNlIG9mIFdlYkdMVGV4dHVyZS4KIFBBU1MgY29udGV4dC51bmlmb3JtMmZ2KGFyZ3Vt
ZW50LCBuZXcgRmxvYXQzMkFycmF5KFswLjAsIDAuMF0pKSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBUeXBlIGVycm9yLgogUEFTUyBjb250ZXh0LnVuaWZvcm0yaXYoYXJndW1lbnQsIG5ldyBJ
bnQzMkFycmF5KFswLCAwXSkpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3Iu
CiBQQVNTIGNvbnRleHQudW5pZm9ybU1hdHJpeDJmdihhcmd1bWVudCwgZmFsc2UsIG5ldyBGbG9h
dDMyQXJyYXkoWzAuMCwgMC4wLCAwLjAsIDAuMF0pKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBUeXBlIGVycm9yLgpAQCAtMjcsMjUgKzI3LDI1IEBAIFBBU1MgY29udGV4dC5nZXRQcm9ncmFt
UGFyYW1ldGVyKGFyZ3VtZW4KIFBBU1MgY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoYXJndW1l
bnQsIDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIGNvbnRl
eHQuZ2V0VW5pZm9ybShhcmd1bWVudCwgbG9jKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBU
eXBlIGVycm9yLgogUEFTUyBjb250ZXh0LmdldFVuaWZvcm0ocHJvZ3JhbSwgYXJndW1lbnQpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCi1QQVNTIGNvbnRleHQuZ2V0VW5p
Zm9ybUxvY2F0aW9uKGFyZ3VtZW50LCAndV9tb2RlbFZpZXdQcm9qTWF0cml4JykgdGhyZXcgZXhj
ZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuZ2V0VW5pZm9ybUxvY2F0aW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQ
cm9ncmFtLgotUEFTUyBjb250ZXh0LmdldFByb2dyYW1JbmZvTG9nKGFyZ3VtZW50KSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dC5nZXRQcm9ncmFtSW5mb0xvZyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdM
UHJvZ3JhbS4KLVBBU1MgY29udGV4dC5nZXRTaGFkZXJJbmZvTG9nKGFyZ3VtZW50KSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmdldFNoYWRlckluZm9Mb2cgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFNo
YWRlci4KLVBBU1MgY29udGV4dC5nZXRTaGFkZXJTb3VyY2UoYXJndW1lbnQpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdzaGFkZXInKSB0byBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQuZ2V0U2hhZGVyU291cmNlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xTaGFkZXIu
Ci1QQVNTIGNvbnRleHQuY29tcGlsZVNoYWRlcihhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogQXJndW1lbnQgMSAoJ3NoYWRlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5j
b21waWxlU2hhZGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xTaGFkZXIuCi1QQVNTIGNv
bnRleHQubGlua1Byb2dyYW0oYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFy
Z3VtZW50IDEgKCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmxpbmtQcm9ncmFt
IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgotUEFTUyBjb250ZXh0LmF0dGFj
aFNoYWRlcihwcm9ncmFtLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJn
dW1lbnQgMiAoJ3NoYWRlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5hdHRhY2hTaGFkZXIg
bXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFNoYWRlci4KLVBBU1MgY29udGV4dC5hdHRhY2hT
aGFkZXIoYXJndW1lbnQsIHNoYWRlcikgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1l
bnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuYXR0YWNoU2hhZGVyIG11
c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgotUEFTUyBjb250ZXh0LmRldGFjaFNo
YWRlcihwcm9ncmFtLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1l
bnQgMiAoJ3NoYWRlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5kZXRhY2hTaGFkZXIgbXVz
dCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFNoYWRlci4KLVBBU1MgY29udGV4dC5kZXRhY2hTaGFk
ZXIoYXJndW1lbnQsIHNoYWRlcikgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQg
MSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuZGV0YWNoU2hhZGVyIG11c3Qg
YmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgotUEFTUyBjb250ZXh0LnVzZVByb2dyYW0o
YXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdwcm9ncmFt
JykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LnVzZVByb2dyYW0gbXVzdCBiZSBhbiBpbnN0YW5j
ZSBvZiBXZWJHTFByb2dyYW0uCi1QQVNTIGNvbnRleHQuc2hhZGVyU291cmNlKGFyZ3VtZW50LCAn
Zm9vJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3NoYWRlcicpIHRv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dC5zaGFkZXJTb3VyY2UgbXVzdCBiZSBhbiBpbnN0YW5jZSBv
ZiBXZWJHTFNoYWRlci4KLVBBU1MgY29udGV4dC5iaW5kQXR0cmliTG9jYXRpb24oYXJndW1lbnQs
IDAsICdmb28nKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgncHJvZ3Jh
bScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5iaW5kQXR0cmliTG9jYXRpb24gbXVzdCBiZSBh
biBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCi1QQVNTIGNvbnRleHQuYmluZEJ1ZmZlcihjb250
ZXh0LkFSUkFZX0JVRkZFUiwgYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFy
Z3VtZW50IDIgKCdidWZmZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuYmluZEJ1ZmZlciBt
dXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMQnVmZmVyLgotUEFTUyBjb250ZXh0LmJpbmRGcmFt
ZWJ1ZmZlcihjb250ZXh0LkZSQU1FQlVGRkVSLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogQXJndW1lbnQgMiAoJ2ZyYW1lYnVmZmVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmJpbmRGcmFtZWJ1ZmZlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMRnJhbWVidWZm
ZXIuCi1QQVNTIGNvbnRleHQuYmluZFJlbmRlcmJ1ZmZlcihjb250ZXh0LlJFTkRFUkJVRkZFUiwg
YXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCdyZW5kZXJi
dWZmZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuYmluZFJlbmRlcmJ1ZmZlciBtdXN0IGJl
IGFuIGluc3RhbmNlIG9mIFdlYkdMUmVuZGVyYnVmZmVyLgotUEFTUyBjb250ZXh0LmJpbmRUZXh0
dXJlKGNvbnRleHQuVEVYVFVSRV8yRCwgYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEFyZ3VtZW50IDIgKCd0ZXh0dXJlJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmJpbmRU
ZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xUZXh0dXJlLgotUEFTUyBjb250ZXh0
LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGNvbnRleHQuRlJBTUVCVUZGRVIsIGNvbnRleHQuREVQ
VEhfQVRUQUNITUVOVCwgY29udGV4dC5SRU5ERVJCVUZGRVIsIGFyZ3VtZW50KSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCA0ICgncmVuZGVyYnVmZmVyJykgdG8gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIG11c3QgYmUgYW4gaW5zdGFuY2Ug
b2YgV2ViR0xSZW5kZXJidWZmZXIuCi1QQVNTIGNvbnRleHQuZnJhbWVidWZmZXJUZXh0dXJlMkQo
Y29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5DT0xPUl9BVFRBQ0hNRU5UMCwgY29udGV4dC5U
RVhUVVJFXzJELCBhcmd1bWVudCwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1l
bnQgNCAoJ3RleHR1cmUnKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuZnJhbWVidWZmZXJUZXh0
dXJlMkQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFRleHR1cmUuCitQQVNTIGNvbnRleHQu
Z2V0VW5pZm9ybUxvY2F0aW9uKGFyZ3VtZW50LCAndV9tb2RlbFZpZXdQcm9qTWF0cml4JykgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmdldFVuaWZvcm1Mb2NhdGlvbiBtdXN0IGJlIGFuIGluc3RhbmNl
IG9mIFdlYkdMUHJvZ3JhbS4KK1BBU1MgY29udGV4dC5nZXRQcm9ncmFtSW5mb0xvZyhhcmd1bWVu
dCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0byBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmdldFByb2dyYW1JbmZvTG9nIG11c3QgYmUgYW4gaW5z
dGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgorUEFTUyBjb250ZXh0LmdldFNoYWRlckluZm9Mb2coYXJn
dW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdzaGFkZXInKSB0
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmdldFNoYWRlckluZm9Mb2cgbXVzdCBiZSBhbiBp
bnN0YW5jZSBvZiBXZWJHTFNoYWRlci4KK1BBU1MgY29udGV4dC5nZXRTaGFkZXJTb3VyY2UoYXJn
dW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdzaGFkZXInKSB0
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmdldFNoYWRlclNvdXJjZSBtdXN0IGJlIGFuIGlu
c3RhbmNlIG9mIFdlYkdMU2hhZGVyLgorUEFTUyBjb250ZXh0LmNvbXBpbGVTaGFkZXIoYXJndW1l
bnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdzaGFkZXInKSB0byBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNvbXBpbGVTaGFkZXIgbXVzdCBiZSBhbiBpbnN0YW5j
ZSBvZiBXZWJHTFNoYWRlci4KK1BBU1MgY29udGV4dC5saW5rUHJvZ3JhbShhcmd1bWVudCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmxpbmtQcm9ncmFtIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2Vi
R0xQcm9ncmFtLgorUEFTUyBjb250ZXh0LmF0dGFjaFNoYWRlcihwcm9ncmFtLCBhcmd1bWVudCkg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ3NoYWRlcicpIHRvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuYXR0YWNoU2hhZGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2Yg
V2ViR0xTaGFkZXIuCitQQVNTIGNvbnRleHQuYXR0YWNoU2hhZGVyKGFyZ3VtZW50LCBzaGFkZXIp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdwcm9ncmFtJykgdG8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5hdHRhY2hTaGFkZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBv
ZiBXZWJHTFByb2dyYW0uCitQQVNTIGNvbnRleHQuZGV0YWNoU2hhZGVyKHByb2dyYW0sIGFyZ3Vt
ZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAyICgnc2hhZGVyJykgdG8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5kZXRhY2hTaGFkZXIgbXVzdCBiZSBhbiBpbnN0YW5j
ZSBvZiBXZWJHTFNoYWRlci4KK1BBU1MgY29udGV4dC5kZXRhY2hTaGFkZXIoYXJndW1lbnQsIHNo
YWRlcikgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmRldGFjaFNoYWRlciBtdXN0IGJlIGFuIGluc3Rh
bmNlIG9mIFdlYkdMUHJvZ3JhbS4KK1BBU1MgY29udGV4dC51c2VQcm9ncmFtKGFyZ3VtZW50KSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UudXNlUHJvZ3JhbSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdl
YkdMUHJvZ3JhbS4KK1BBU1MgY29udGV4dC5zaGFkZXJTb3VyY2UoYXJndW1lbnQsICdmb28nKSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgnc2hhZGVyJykgdG8gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5zaGFkZXJTb3VyY2UgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBX
ZWJHTFNoYWRlci4KK1BBU1MgY29udGV4dC5iaW5kQXR0cmliTG9jYXRpb24oYXJndW1lbnQsIDAs
ICdmb28nKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgncHJvZ3JhbScp
IHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuYmluZEF0dHJpYkxvY2F0aW9uIG11c3QgYmUg
YW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgorUEFTUyBjb250ZXh0LmJpbmRCdWZmZXIoY29u
dGV4dC5BUlJBWV9CVUZGRVIsIGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBB
cmd1bWVudCAyICgnYnVmZmVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5iaW5kQnVm
ZmVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xCdWZmZXIuCitQQVNTIGNvbnRleHQuYmlu
ZEZyYW1lYnVmZmVyKGNvbnRleHQuRlJBTUVCVUZGRVIsIGFyZ3VtZW50KSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBBcmd1bWVudCAyICgnZnJhbWVidWZmZXInKSB0byBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmJpbmRGcmFtZWJ1ZmZlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdM
RnJhbWVidWZmZXIuCitQQVNTIGNvbnRleHQuYmluZFJlbmRlcmJ1ZmZlcihjb250ZXh0LlJFTkRF
UkJVRkZFUiwgYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIg
KCdyZW5kZXJidWZmZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmJpbmRSZW5kZXJi
dWZmZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFJlbmRlcmJ1ZmZlci4KK1BBU1MgY29u
dGV4dC5iaW5kVGV4dHVyZShjb250ZXh0LlRFWFRVUkVfMkQsIGFyZ3VtZW50KSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAyICgndGV4dHVyZScpIHRvIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuYmluZFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFRleHR1
cmUuCitQQVNTIGNvbnRleHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoY29udGV4dC5GUkFNRUJV
RkZFUiwgY29udGV4dC5ERVBUSF9BVFRBQ0hNRU5ULCBjb250ZXh0LlJFTkRFUkJVRkZFUiwgYXJn
dW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDQgKCdyZW5kZXJidWZm
ZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xSZW5kZXJidWZmZXIuCitQQVNTIGNvbnRleHQu
ZnJhbWVidWZmZXJUZXh0dXJlMkQoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5DT0xPUl9B
VFRBQ0hNRU5UMCwgY29udGV4dC5URVhUVVJFXzJELCBhcmd1bWVudCwgMCkgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgNCAoJ3RleHR1cmUnKSB0byBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmZyYW1lYnVmZmVyVGV4dHVyZTJEIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2Vi
R0xUZXh0dXJlLgogUEFTUyBjb250ZXh0LnVuaWZvcm0yZnYoYXJndW1lbnQsIG5ldyBGbG9hdDMy
QXJyYXkoWzAuMCwgMC4wXSkpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3Iu
CiBQQVNTIGNvbnRleHQudW5pZm9ybTJpdihhcmd1bWVudCwgbmV3IEludDMyQXJyYXkoWzAsIDBd
KSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1MgY29udGV4dC51
bmlmb3JtTWF0cml4MmZ2KGFyZ3VtZW50LCBmYWxzZSwgbmV3IEZsb2F0MzJBcnJheShbMC4wLCAw
LjAsIDAuMCwgMC4wXSkpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCkBA
IC01MywxMCArNTMsMTAgQEAgUEFTUyBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIoYXJndW1l
bgogUEFTUyBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRlcihhcmd1bWVudCwgMCkgdGhyZXcgZXhj
ZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1MgY29udGV4dC5nZXRVbmlmb3JtKGFy
Z3VtZW50LCBsb2MpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNT
IGNvbnRleHQuZ2V0VW5pZm9ybShwcm9ncmFtLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogVHlwZSBlcnJvci4KLVBBU1MgY29udGV4dC5nZXRVbmlmb3JtTG9jYXRpb24oYXJn
dW1lbnQsICd1X21vZGVsVmlld1Byb2pNYXRyaXgnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5nZXRVbmlm
b3JtTG9jYXRpb24gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCi1QQVNTIGNv
bnRleHQuZ2V0UHJvZ3JhbUluZm9Mb2coYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEFyZ3VtZW50IDEgKCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmdldFBy
b2dyYW1JbmZvTG9nIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgotUEFTUyBj
b250ZXh0LmdldFNoYWRlckluZm9Mb2coYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEFyZ3VtZW50IDEgKCdzaGFkZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuZ2V0U2hh
ZGVySW5mb0xvZyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMU2hhZGVyLgotUEFTUyBjb250
ZXh0LmdldFNoYWRlclNvdXJjZShhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
QXJndW1lbnQgMSAoJ3NoYWRlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5nZXRTaGFkZXJT
b3VyY2UgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFNoYWRlci4KK1BBU1MgY29udGV4dC5n
ZXRVbmlmb3JtTG9jYXRpb24oYXJndW1lbnQsICd1X21vZGVsVmlld1Byb2pNYXRyaXgnKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuZ2V0VW5pZm9ybUxvY2F0aW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ug
b2YgV2ViR0xQcm9ncmFtLgorUEFTUyBjb250ZXh0LmdldFByb2dyYW1JbmZvTG9nKGFyZ3VtZW50
KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuZ2V0UHJvZ3JhbUluZm9Mb2cgbXVzdCBiZSBhbiBpbnN0
YW5jZSBvZiBXZWJHTFByb2dyYW0uCitQQVNTIGNvbnRleHQuZ2V0U2hhZGVySW5mb0xvZyhhcmd1
bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3NoYWRlcicpIHRv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuZ2V0U2hhZGVySW5mb0xvZyBtdXN0IGJlIGFuIGlu
c3RhbmNlIG9mIFdlYkdMU2hhZGVyLgorUEFTUyBjb250ZXh0LmdldFNoYWRlclNvdXJjZShhcmd1
bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3NoYWRlcicpIHRv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuZ2V0U2hhZGVyU291cmNlIG11c3QgYmUgYW4gaW5z
dGFuY2Ugb2YgV2ViR0xTaGFkZXIuCiBQQVNTIGNvbnRleHQuY29tcGlsZVNoYWRlcihhcmd1bWVu
dCkgaXMgdW5kZWZpbmVkLgogUEFTUyBjb250ZXh0LmxpbmtQcm9ncmFtKGFyZ3VtZW50KSBpcyB1
bmRlZmluZWQuCiBQQVNTIGNvbnRleHQuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGFyZ3VtZW50KSBp
cyB1bmRlZmluZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9udWxsLW9i
amVjdC1iZWhhdmlvdXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL251bGwtb2JqZWN0LWJlaGF2aW91ci1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDE3ODYwNCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL251bGwtb2JqZWN0
LWJlaGF2aW91ci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0LDEwICsxNCwxMCBA
QCBQQVNTIGNvbnRleHQuZGV0YWNoU2hhZGVyKHVuZGVmaW5lZCwgc2hhCiBQQVNTIGNvbnRleHQu
c2hhZGVyU291cmNlKHVuZGVmaW5lZCwgdW5kZWZpbmVkKSB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfVkFMVUUuCiBQQVNTIGNvbnRleHQuc2hhZGVyU291cmNlKHVuZGVmaW5lZCwgJ2Zvbycp
IHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9WQUxVRS4KIFBBU1MgY29udGV4dC5iaW5kQXR0
cmliTG9jYXRpb24odW5kZWZpbmVkLCAwLCAnZm9vJykgd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZB
TElEX1ZBTFVFLgotUEFTUyBjb250ZXh0LmJpbmRCdWZmZXIoY29udGV4dC5BUlJBWV9CVUZGRVIs
IDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCdidWZmZXInKSB0byBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuYmluZEJ1ZmZlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdl
YkdMQnVmZmVyLgotUEFTUyBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZlcihjb250ZXh0LkZSQU1FQlVG
RkVSLCAwKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAyICgnZnJhbWVidWZm
ZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuYmluZEZyYW1lYnVmZmVyIG11c3QgYmUgYW4g
aW5zdGFuY2Ugb2YgV2ViR0xGcmFtZWJ1ZmZlci4KLVBBU1MgY29udGV4dC5iaW5kUmVuZGVyYnVm
ZmVyKGNvbnRleHQuUkVOREVSQlVGRkVSLCAwKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBB
cmd1bWVudCAyICgncmVuZGVyYnVmZmVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmJpbmRS
ZW5kZXJidWZmZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFJlbmRlcmJ1ZmZlci4KLVBB
U1MgY29udGV4dC5iaW5kVGV4dHVyZShjb250ZXh0LlRFWFRVUkVfMkQsIDApIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCd0ZXh0dXJlJykgdG8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmJpbmRUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xUZXh0dXJlLgor
UEFTUyBjb250ZXh0LmJpbmRCdWZmZXIoY29udGV4dC5BUlJBWV9CVUZGRVIsIDApIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCdidWZmZXInKSB0byBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmJpbmRCdWZmZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTEJ1ZmZl
ci4KK1BBU1MgY29udGV4dC5iaW5kRnJhbWVidWZmZXIoY29udGV4dC5GUkFNRUJVRkZFUiwgMCkg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ2ZyYW1lYnVmZmVyJykgdG8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5iaW5kRnJhbWVidWZmZXIgbXVzdCBiZSBhbiBpbnN0
YW5jZSBvZiBXZWJHTEZyYW1lYnVmZmVyLgorUEFTUyBjb250ZXh0LmJpbmRSZW5kZXJidWZmZXIo
Y29udGV4dC5SRU5ERVJCVUZGRVIsIDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3Vt
ZW50IDIgKCdyZW5kZXJidWZmZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmJpbmRS
ZW5kZXJidWZmZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFJlbmRlcmJ1ZmZlci4KK1BB
U1MgY29udGV4dC5iaW5kVGV4dHVyZShjb250ZXh0LlRFWFRVUkVfMkQsIDApIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCd0ZXh0dXJlJykgdG8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5iaW5kVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMVGV4dHVy
ZS4KIFBBU1MgY29udGV4dC5iaW5kQnVmZmVyKGNvbnRleHQuQVJSQVlfQlVGRkVSLCBudWxsKSB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgogUEFTUyBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZl
cihjb250ZXh0LkZSQU1FQlVGRkVSLCBudWxsKSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
LgogUEFTUyBjb250ZXh0LmJpbmRSZW5kZXJidWZmZXIoY29udGV4dC5SRU5ERVJCVUZGRVIsIG51
bGwpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>244811</attachid>
            <date>2015-01-16 15:41:12 -0800</date>
            <delta_ts>2015-01-16 16:41:02 -0800</delta_ts>
            <desc>Archive of layout-test-results from ews103 for mac-mavericks</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>625377</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
CKdZi95vj9caZrb4DiH4Qj17xS5DM3b/7WxuT4ej0kTNDaV1bsBUEZ6AjAWrwU2XSeJdIcKoaZ8a
E2BJx3+6Kn3k87qXLDEvP1BLAwQKAAAAAAD2eDBGAAAAAAAAAAAAAAAAFAAcAGh0dHAvdGVzdHMv
c2VjdXJpdHkvVVQJAAPAmblUcp25VHV4CwABBPUBAAAEUAAAAFBLAwQKAAAAAAD2eDBGAAAAAAAA
AAAAAAAAKgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L1VUCQAD
wJm5VHKduVR1eAsAAQT1AQAABFAAAABQSwMEFAACAAgAqHowRmOqrGyCAAAAqAAAAEAAHABodHRw
L3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtYWxsb3dlZC1zdGRlcnIu
dHh0VVQJAAPsnLlUwJm5VHV4CwABBPUBAAAEUAAAAC2NQQrDMAwE73mFXhA7vaT4FYW+ILgbYlAs
Iyml/n1NKXtahtnNcrbCmxepBFXRRHth0OHeUgjLbZ3jyJLuMcZgyJcW7yFLdVR//vtDuOQeFCaX
Zlgw74z5Y0xcKmglMM4h0A/YAfg0aHpDbVwnksqdljnSjs2vMUSbguxqTdTxmr5QSwMEFAACAAgA
qHowRmOqrGyCAAAAqAAAAFIAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBv
bGljeS94c2wtdW5hZmZlY3RlZC1ieS1zdHlsZS1zcmMtMi1zdGRlcnIudHh0VVQJAAPsnLlUwJm5
VHV4CwABBPUBAAAEUAAAAC2NQQrDMAwE73mFXhA7vaT4FYW+ILgbYlAsIyml/n1NKXtahtnNcrbC
mxepBFXRRHth0OHeUgjLbZ3jyJLuMcZgyJcW7yFLdVR//vtDuOQeFCaXZlgw74z5Y0xcKmglMM4h
0A/YAfg0aHpDbVwnksqdljnSjs2vMUSbguxqTdTxmr5QSwMEFAACAAgAqnowRmBLZhCRAAAA+wEA
AEUAHABodHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ERU5JRUQteHNsLWRvY3VtZW50LXNlY3VyaXR5
T3JpZ2luLXN0ZGVyci50eHRVVAkAA++cuVS+mblUdXgLAAEE9QEAAARQAAAA7Y4xDoMwDEV3TuEL
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
zCvWGn0pGUn+tBv90o1uSe5nmAgbT/FlTCFs+uB/EyzhsaVUTUZ8dunXjMRqltxw+aC7lFLql+Qu
4ZQ4usvTKQxZp7uteTu9NZLd8dS3uwGtfc28NZKfdgIMlDZ38O4Dx5ZfozUSVW3ocsLMnb2aNWNL
b0wZtSNGHh3zkyUE4IuSVoR5DWHUeJwwzh8ArDg9kocz0EPzUXNrRFmoNGy9I+MIbEDKWoDb4xM6
sWmNxEEKB9aAAPdKnLSQkWXMWJQuQVmAOZXPIsq2SMwsYr+YDNni9k/LIqsReLbrAKyzLb6wDHxU
pyhUjgfUpcEYes2If+4pXjFVcmukPg8oc+be/wFQSwMECgAAAAAA7nowRgAAAAAAAAAAAAAAAAgA
HAByZXRyaWVzL1VUCQADb525VHKduVR1eAsAAQT1AQAABFAAAABQSwMECgAAAAAA7nowRgAAAAAA
AAAAAAAAAAsAHAByZXRyaWVzL2pzL1VUCQADb525VHKduVR1eAsAAQT1AQAABFAAAABQSwMECgAA
AAAA7nowRgAAAAAAAAAAAAAAAA8AHAByZXRyaWVzL2pzL2RvbS9VVAkAA2+duVRynblUdXgLAAEE
9QEAAARQAAAAUEsDBBQAAgAIAO56MEYT6WoxhSUAABjwAgA4ABwAcmV0cmllcy9qcy9kb20vZ2xv
YmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWFjdHVhbC50eHRVVAkAA2+duVRvnblUdXgLAAEE
9QEAAARQAAAAvZ1fc9u6mYfvz6fw9Ka7Mzu96DeI/yWeE8eu5aQ7e0dLsMwNRap8KSfeT7+iZEkA
CICq8Lye6XR68CLP7zQPQYEkSDwa6c665szUsmrNWfdSdGfzqnkqqrNpU0vXrqZd08rZS/HaV81Z
W85furOi69ryadUZ+eOPu/pMVtOpEfmvs7dmdfarrKozMeasWP93Wxo5a57P/nL/aTL5y9li3auY
m3XP56aqml9mdvb0dvaXx6vJ49nF3e3916vHq7/87Y8//ui7n909/a+Zdn+bm+7uV33fNkvTdm+X
RqZtuVz/W/3H9l/0v87++qkuqrd12LdmZv76n397LaqVOSvlzG7PQ74UYv2B//jrGvDX/+wjnotK
YLaAbFOvFqYtnioDAddHxXM5X+2R6yPk3yeWi6Irm/rq1dSd68uu5GJhZyN0QemENw9JmFsPe8fX
+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
B4AiLSrpcvsn+m2uwzqtOhOhIzWdIQoZoFoXTNoNrCDwa/loHaNK6wgCfNAkupZgT92sLl3/Bnu3
VEN1JkLHaDpDFDJAsy4Ys3v3/FyVtUnfFgp0AsMUZB8XJFpBlPYwHXPv7Zu0b8yAKbhU2EnJBlOu
xnZVktW0v5v7vKqqt/uiFTPb1/94vJo8nl3c3d5/vXq8+uOP/wdQSwMEFAACAAgA7nowRuTjdVx8
AQAAZQkAADYAHAByZXRyaWVzL2pzL2RvbS9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMt
ZGlmZi50eHRVVAkAA2+duVRvnblUdXgLAAEE9QEAAARQAAAAvZVfT8IwFMXf+RR9G2SUiiYE3gAx
xmiEQCLP3XYZJWUl7S3Ct7cO4x8YUaDzqUl77+9s9zSnlFLCXpS0SzBswJGzu+mETSF6FPix9K2Q
CRuDBG6ASb5VFimCQarBWImGaUAtXP/CsEQtWSpVxCWNVWZQ2xiVNpSjK4msa6OwWUGMkDRwg5Uw
DP9bn8douczVu11Cm+3WTb1FwnxtNkm3WyGj3mRChtHCfWcjBRy+ZiOtVqBxOwATa7FyzOpOpk6C
KV/DZM7d+bNKIKg15tx8a6kGBjCoEWHIjEsDF+Mhc9PSPJLgj+mGNROp/aS6wUElPBEK0f3T9Riy
BLTI0luVIWzcnzfWXNqcWlzhTWd/7unPuZclY8qRKbLZF7vQbnIGvBejWMNDNlMHPn8dXU7+xVnv
/D1LdznRaec50bk6NyfeZU+/T55UfKTGEbS38Nhn913iH9yroiKfaiWkyB+VTGlKvrLkCN5bnLg3
yfEPLN9tX0YsIUKOsveMfANQSwMEFAACAAgA7nowRm87z89YJQAAMuwCADoAHAByZXRyaWVzL2pz
L2RvbS9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0VVQJAANvnblU
b525VHV4CwABBPUBAAAEUAAAAL2dX3PbOJZH3/tTuOZldqu25mG+QfwvcXUceywns7VvtATL3FCk
hpdy4v30K0qWBIAAqBHOdVVXVwcXPr+0D0FBJEg8GunOuubM1LJqzVn3UnRn86p5KqqzaVNL166m
XdPK2Uvx2lfNWVvOX7qzouva8mnVGfnjj7v6TFbTqRH5r7O3ZnX2q6yqMzHmrFj/uy2NnDXPZ3+5
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
gW/tjK2ki3wQO9re0bCSneDFzw+/hPm6/MKzVvXPC+Z33D7KaTIlX6Pbhx3fPuCTyHJegZO22SIy
4FI+DX//SZiUcK1cfSdQklpxVsfN8mGpcOSWPWfHl5D6pM+13UCJnz6UAOqkDjQLm+thEGm7J9oT
pX1q476wX7KkofC6Z/Id/vXLr7Sv0KVJYtrhgfjn17Ow9idaQ3vkA2IJkV+jLaWL0HRmmdlAUdLy
kWG/xiaU6d5SOvB/ok2QLkakCreBr9coWDnr12QARSZuFDu5tJjkq9X8Gh6u8+2mk7zmKk4NNb6c
pzqqKRPnNtn7Dyi3vrV4Nd3E1MVVKp02Xm/f+Hcy3xorm+596x/by29xrtWv6uHz9zf2U7Gn79z2
5vTy9KNa+V+ud4/wY1IafkuO8NiRoQkf/1gyCNf3+9K6avIJ3l/Ze1zboTGb1k/tO2/Xl9++3m3c
2vnkx+vlxn8wBOmDc6JXrX8haV8PSvFTo+gQma6cav3s0+X96eU8Nf6q2WS/8nsm82TU2j6lFOHO
70vzK++P25WfipPaMKDSPscs4y/IdyZ2nuct8h9qc3mML6ntja3FnL5ep3b8X6cLzJ+f2c9kQqHa
1MxvOSlF8lrHeGM2zzPtK/je7Vuwp0lAZETq/PP59frMbylQpuf27L1SZm6mX/75duV7P+jW5tSY
tV+Q2aDVknl/fJzff5p497fX//zgPxnoJCwS1hqLEj8jKWYiSlWeoM4QRmKlCWNmbun3dv+WRL41
Ymo2d2OOGW+cR9H63JW9qtKGRG02XKwXr8GU8Lp0CNnA42YRhThtP2QE0XY3Jb1e2g1h30Qloyxj
CWZvljcFbcCZrTe1MFYdXiTjmEvETkoetW+vb9tekBx1+GfL1h/RbLstrh+bpy0dsHGJ8J3GqokO
X6+31ojr86R8/FkV6TBFMjdhxewISmR3tSkbYf7Lj++X1ylXU7gkNSeyCNEUfTYpjL6D5DAS6Ylr
t6VGm/PL/VdgznyQbL+Uo+1bir/Z9D3gzMSdJpd3kI3XGqYW0ujiO1nGzM6GkWeWJV/KxdoOkWtI
ydJNpurRTKryyfXhu3aH4TlH7GEuP9zQu+FZ50aDSbnzg5gAtt184aWXTvLZ6TriWXjze1DsjziA
IrF39BpJjEvtR3DEgyIn3CRzOifGjoty1jTJTm/nzvK+xvXL/X71jxqS/Hc28da3J+L+mjn2ElHG
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
CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAOx6MEYYs70e0h4AAAqrAQANABgAAAAAAAEAAACkgfTK
AQBlcnJvcl9sb2cudHh0VVQFAANrnblUdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAA6XgwRgAA
AAAAAAAAAAAAAAUAGAAAAAAAAAAQAO1BDeoBAGZhc3QvVVQFAAOlmblUdXgLAAEE9QEAAARQAAAA
UEsBAh4DCgAAAAAA4HgwRgAAAAAAAAAAAAAAAAwAGAAAAAAAAAAQAO1BTOoBAGZhc3QvaW1hZ2Vz
L1VUBQADlJm5VHV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAJF6MEYhj704MgAAADMAAAAsABgA
AAAAAAEAAACkgZLqAQBmYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UtY3JvcC1ib3gtc3RkZXJyLnR4
dFVUBQADwZy5VHV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAOl4MEYAAAAAAAAAAAAAAAAJABgA
AAAAAAAAEADtQSrrAQBmYXN0L3hzbC9VVAUAA6aZuVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIA
CACZejBGcv1l8oUAAADpAAAAJQAYAAAAAAABAAAApIFt6wEAZmFzdC94c2wvdHJhbnNmb3JtLXho
ci1kb2Mtc3RkZXJyLnR4dFVUBQAD0Zy5VHV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAJl6MEaJ
HyH+lwAAAMADAAAnABgAAAAAAAEAAACkgVHsAQBmYXN0L3hzbC94c2x0LWJhZC1pbXBvcnQtdXJp
LXN0ZGVyci50eHRVVAUAA9GcuVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACACZejBGz49mDlAA
AACgAAAAJAAYAAAAAAABAAAApIFJ7QEAZmFzdC94c2wveHNsdC1jb250ZW50VHlwZS1zdGRlcnIu
dHh0VVQFAAPRnLlUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAmXowRoFKd61LAAAArAAAADQA
GAAAAAAAAQAAAKSB9+0BAGZhc3QveHNsL3hzbHQtdHJhbnNmb3JtLXRvLWZyYWdtZW50LWNyYXNo
LXN0ZGVyci50eHRVVAUAA9KcuVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACADuejBGoFurvBwB
AACXAQAAEQAYAAAAAAABAAAApIGw7gEAZnVsbF9yZXN1bHRzLmpzb25VVAUAA3CduVR1eAsAAQT1
AQAABFAAAABQSwECHgMKAAAAAADteDBGAAAAAAAAAAAAAAAABQAYAAAAAAAAABAA7UEX8AEAaHR0
cC9VVAUAA66ZuVR1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAADeTBGAAAAAAAAAAAAAAAACwAY
AAAAAAAAABAA7UFW8AEAaHR0cC90ZXN0cy9VVAUAA9WZuVR1eAsAAQT1AQAABFAAAABQSwECHgMK
AAAAAADteDBGAAAAAAAAAAAAAAAAFAAYAAAAAAAAABAA7UGb8AEAaHR0cC90ZXN0cy9hcHBjYWNo
ZS9VVAUAA66ZuVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACADteDBG7guttokAAACqAAAANQAY
AAAAAAABAAAApIHp8AEAaHR0cC90ZXN0cy9hcHBjYWNoZS9tYWluLXJlc291cmNlLXJlZGlyZWN0
LXN0ZGVyci50eHRVVAUAA66ZuVR1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAADeTBGAAAAAAAA
AAAAAAAAEAAYAAAAAAAAABAA7UHh8QEAaHR0cC90ZXN0cy9taXNjL1VUBQAD1Zm5VHV4CwABBPUB
AAAEUAAAAFBLAQIeAxQAAgAIALN6MEYVNTWSegAAALwAAAAqABgAAAAAAAEAAACkgSvyAQBodHRw
L3Rlc3RzL21pc2MveHNsdC1iYWQtaW1wb3J0LXN0ZGVyci50eHRVVAUAAwKduVR1eAsAAQT1AQAA
BFAAAABQSwECHgMKAAAAAAD2eDBGAAAAAAAAAAAAAAAAFAAYAAAAAAAAABAA7UEJ8wEAaHR0cC90
ZXN0cy9zZWN1cml0eS9VVAUAA8CZuVR1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAD2eDBGAAAA
AAAAAAAAAAAAKgAYAAAAAAAAABAA7UFX8wEAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2Vj
dXJpdHlQb2xpY3kvVVQFAAPAmblUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAqHowRmOqrGyC
AAAAqAAAAEAAGAAAAAAAAQAAAKSBu/MBAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3Vy
aXR5UG9saWN5L3hzbC1hbGxvd2VkLXN0ZGVyci50eHRVVAUAA+ycuVR1eAsAAQT1AQAABFAAAABQ
SwECHgMUAAIACACoejBGY6qsbIIAAACoAAAAUgAYAAAAAAABAAAApIG39AEAaHR0cC90ZXN0cy9z
ZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLXVuYWZmZWN0ZWQtYnktc3R5bGUtc3Jj
LTItc3RkZXJyLnR4dFVUBQAD7Jy5VHV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAKp6MEZgS2YQ
kQAAAPsBAABFABgAAAAAAAEAAACkgcX1AQBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ERU5JRUQt
eHNsLWRvY3VtZW50LXNlY3VyaXR5T3JpZ2luLXN0ZGVyci50eHRVVAUAA++cuVR1eAsAAQT1AQAA
BFAAAABQSwECHgMUAAIACABuejBG6op8QmEFAAAFDwAACgAYAAAAAAABAAAApIHV9gEAaHR0cGQu
Y29uZlVUBQADf5y5VHV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAALJ6MEYAAAAAAAAAAAAAAAAD
ABgAAAAAAAAAEADtQXr8AQBqcy9VVAUAAwCduVR1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAACz
ejBGAAAAAAAAAAAAAAAABwAYAAAAAAAAABAA7UG3/AEAanMvZG9tL1VUBQADAZ25VHV4CwABBPUB
AAAEUAAAAFBLAQIeAxQAAgAIALJ6MEYT6WoxhSUAABjwAgAwABgAAAAAAAEAAACkgfj8AQBqcy9k
b20vZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWFjdHVhbC50eHRVVAUAAwCduVR1eAsA
AQT1AQAABFAAAABQSwECHgMUAAIACACyejBGnkXYr3cBAABVCQAALgAYAAAAAAABAAAApIHnIgIA
anMvZG9tL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1kaWZmLnR4dFVUBQADAJ25VHV4
CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIALJ6MEZvO8/PWCUAADLsAgAyABgAAAAAAAEAAACkgcYk
AgBqcy9kb20vZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dFVUBQAD
AJ25VHV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIALN6MEbunPPiuAgAAHwtAAA2ABgAAAAAAAEA
AACkgYpKAgBqcy9kb20vZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLXByZXR0eS1kaWZm
Lmh0bWxVVAUAAwGduVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACACtejBGVxY/el8CAACVEAAA
KwAYAAAAAAABAAAApIGyUwIAcHl3ZWJzb2NrZXQud3MubG9nLTE2SmFuMjAxNS0xNTE5MjgtZXJy
LnR4dFVUBQAD9Zy5VHV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAK16MEbT7SyHCgEAAI8CAAAr
ABgAAAAAAAEAAACkgXZWAgBweXdlYnNvY2tldC53cy5sb2ctMTZKYW4yMDE1LTE1MTkyOC1vdXQu
dHh0VVQFAAP1nLlUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgA7nowRocK0RmGJgAAYaQAAAwA
GAAAAAAAAQAAAKSB5VcCAHJlc3VsdHMuaHRtbFVUBQADcJ25VHV4CwABBPUBAAAEUAAAAFBLAQIe
AwoAAAAAAO56MEYAAAAAAAAAAAAAAAAIABgAAAAAAAAAEADtQbF+AgByZXRyaWVzL1VUBQADb525
VHV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAO56MEYAAAAAAAAAAAAAAAALABgAAAAAAAAAEADt
QfN+AgByZXRyaWVzL2pzL1VUBQADb525VHV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAO56MEYA
AAAAAAAAAAAAAAAPABgAAAAAAAAAEADtQTh/AgByZXRyaWVzL2pzL2RvbS9VVAUAA2+duVR1eAsA
AQT1AQAABFAAAABQSwECHgMUAAIACADuejBGE+lqMYUlAAAY8AIAOAAYAAAAAAABAAAApIGBfwIA
cmV0cmllcy9qcy9kb20vZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWFjdHVhbC50eHRV
VAUAA2+duVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACADuejBG5ON1XHwBAABlCQAANgAYAAAA
AAABAAAApIF4pQIAcmV0cmllcy9qcy9kb20vZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVz
LWRpZmYudHh0VVQFAANvnblUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgA7nowRm87z89YJQAA
MuwCADoAGAAAAAAAAQAAAKSBZKcCAHJldHJpZXMvanMvZG9tL2dsb2JhbC1jb25zdHJ1Y3RvcnMt
YXR0cmlidXRlcy1leHBlY3RlZC50eHRVVAUAA2+duVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIA
CADuejBG85wEEb8IAACELQAAPgAYAAAAAAABAAAApIEwzQIAcmV0cmllcy9qcy9kb20vZ2xvYmFs
LWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLXByZXR0eS1kaWZmLmh0bWxVVAUAA2+duVR1eAsAAQT1
AQAABFAAAABQSwECHgMUAAIACADuejBGryIggaygBgDDVyYACgAYAAAAAAABAAAApIFn1gIAc3Rh
dHMuanNvblVUBQADcJ25VHV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAABR5MEYAAAAAAAAAAAAA
AAAEABgAAAAAAAAAEADtQVd3CQBzdmcvVVQFAAP4mblUdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAA
AAAAFHkwRgAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQAO1BlXcJAHN2Zy9zdHJva2UvVVQFAAP4mblU
dXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAxnowRtZzno5+AAAAjQAAACUAGAAAAAAAAQAAAKSB
2ncJAHN2Zy9zdHJva2UvemVyby13aWR0aC1oYW5nLXN0ZGVyci50eHRVVAUAAySduVR1eAsAAQT1
AQAABFAAAABQSwUGAAAAAC4ALgAUEgAAt3gJAAAA
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244819</attachid>
            <date>2015-01-16 16:41:02 -0800</date>
            <delta_ts>2015-01-16 17:46:50 -0800</delta_ts>
            <desc>patch v3</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>858846</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MiBAQAorMjAxNS0wMS0xNiAgUm9nZXIg
Rm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkdMMjogU3VwcG9ydCB3
ZWJnbDIgY29udGV4dCBjcmVhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjQwOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUwMDIxNzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLi4KKworICAgICAgICBUZXN0cyBj
b3ZlcmVkIGJ5IGV4aXN0aW5nIEtocm9ub3MgdGVzdHMgZm9yIFdlYkdMIDEuMCBjb25mb3JtYW5j
ZS4KKworICAgICAgICBDcmVhdGUgYSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIGNsYXNzIHRo
YXQgZXh0ZW5kcyB0byBhIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBhbmQgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC4KKyAgICAgICAgUmVwbGFjZSBhbGwgcHJldmlvdXMgaW5zdGFuY2VzIG9mIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB1c2FnZXMgd2l0aCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIHVz
YWdlcyBmb3Igbm93LgorICAgICAgICBBcyB0aGUgZmlyc3Qgc3RlcCwgdGhlIFdlYkdMMSBhbmQg
V2ViR0wyIGNvbnRleHRzIHdpbGwgaGF2ZSB0aGUgZXhhY3Qgc2FtZSBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMuY3Bw
OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRD
dXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0
b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTDJSZW5kZXJpbmdDb250
ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOiBNb3ZlIGNvZGUgdG8g
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcC4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50
YXRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRUluc3RhbmNlZEFycmF5czo6QU5HTEVJbnN0
YW5jZWRBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6QU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1
cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojppc1dlYkdMMSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojppc1dlYkdMMik6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0OjppczNkKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9FWFRCbGVuZE1pbk1heC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFWFRCbGVuZE1pbk1heDo6
RVhUQmxlbmRNaW5NYXgpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4Lmg6
CisgICAgICAgICogaHRtbC9jYW52YXMvRVhURnJhZ0RlcHRoLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVYVEZyYWdEZXB0aDo6RVhURnJhZ0RlcHRoKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9F
WFRGcmFnRGVwdGguaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9E
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVYVFNoYWRlclRleHR1cmVMT0Q6OkVYVFNoYWRlclRl
eHR1cmVMT0QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOjpFWFRUZXh0dXJl
RmlsdGVyQW5pc290cm9waWMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3BpYy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVHNSR0IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RVhUc1JHQjo6RVhUc1JHQik6CisgICAgICAgICogaHRtbC9jYW52YXMv
RVhUc1JHQi5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU0VsZW1lbnRJbmRleFVpbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6T0VTRWxlbWVudEluZGV4VWludDo6T0VTRWxlbWVudEluZGV4
VWludCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6T0VTU3RhbmRhcmREZXJpdmF0aXZlczo6T0VTU3RhbmRhcmREZXJpdmF0aXZlcyk6
CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpP
RVNUZXh0dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUZsb2F0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0
TGluZWFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1RleHR1cmVGbG9hdExpbmVhcjo6T0VT
VGV4dHVyZUZsb2F0TGluZWFyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxv
YXRMaW5lYXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1RleHR1cmVIYWxmRmxvYXQ6Ok9FU1RleHR1cmVIYWxm
RmxvYXQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaDoKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI6Ok9FU1RleHR1cmVIYWxmRmxv
YXRMaW5lYXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpPRVNWZXJ0ZXhBcnJheU9iamVjdDo6T0VTVmVydGV4QXJyYXlPYmpl
Y3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0Lmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDog
QWRkZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1
ZmZlcjo6V2ViR0xCdWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmg6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEM6OnN1cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6
OldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENv
bXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21w
cmVzc2VkVGV4dHVyZVMzVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmg6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xDb250ZXh0R3JvdXA6OmdldEFHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTENvbnRleHRHcm91cDo6YWRkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TENvbnRleHRHcm91cDo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENv
bnRleHRHcm91cDo6bG9zZUNvbnRleHRHcm91cCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0R3JvdXAuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRl
eHRPYmplY3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0Ojpjb250ZXh0KToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMRGVidWdSZW5kZXJlckluZm86OldlYkdMRGVidWdSZW5kZXJlckluZm8pOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TERlYnVnU2hhZGVyczo6V2ViR0xEZWJ1Z1NoYWRlcnMpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMRGVidWdTaGFkZXJzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRl
eHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEZXB0aFRleHR1cmU6OldlYkdMRGVw
dGhUZXh0dXJlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xEcmF3QnVmZmVyczo6V2ViR0xEcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xEcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEV4dGVuc2lvbjo6V2ViR0xF
eHRlbnNpb24pOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTEV4dGVuc2lvbjo6Y29udGV4dCk6CisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1l
YnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6V2Vi
R0xGcmFtZWJ1ZmZlcik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xMb3NlQ29udGV4dDo6V2ViR0xMb3NlQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTExvc2VDb250ZXh0Ojpsb3NlQ29udGV4dCk6CisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xMb3NlQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpXZWJHTE9iamVjdCk6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0pOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJidWZmZXI6OldlYkdM
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6IE1vdmUg
aW1wbGVtZW50YXRpb24gdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAuCisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6ICBNb3ZlIGltcGxlbWVudGF0
aW9uIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaC4KKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsOiAgTW92ZSBpbXBsZW1lbnRhdGlvbiB0byBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcDogQWRkZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbDogQWRkZWQuCisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xTaGFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFkZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xTaGFyZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6
OldlYkdMU2hhcmVkT2JqZWN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9i
amVjdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFRleHR1cmU6OldlYkdMVGV4dHVyZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0
dXJlLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUy5oOgorCiAyMDE1LTAxLTE2ICBQcmF0aWsgU29sYW5raSAgPHBzb2xhbmtpQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgcGFnZXMgZmFpbCB0byBsb2FkIHVzaW5nIHB1YmxpYyBp
T1MgV2ViS2l0OyBBU1NFUlQoIWlzTWFpblRocmVhZCgpKSBpbgpJbmRleDogU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC01NTUsNyArNTU1LDkgQEAgc2V0KFdlYkNvcmVfTk9OX1NWR19J
RExfRklMRVMKICAgICBodG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmlkbAogICAgIGh0bWwv
Y2FudmFzL1dlYkdMUHJvZ3JhbS5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZl
ci5pZGwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbAogICAg
IGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKKyAgICBodG1sL2NhbnZhcy9X
ZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlk
bAogICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmlkbAogICAgIGh0
bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5pZGwKQEAgLTExNDUsNyArMTE0Nyw5IEBAIHNldChXZWJD
b3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCiAgICAg
YmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTVmlk
ZW9UcmFja0xpc3RDdXN0b20uY3BwCisgICAgYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAorICAgIGJpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU1dlYktpdFBvaW50Q3VzdG9tLmNwcAogICAgIGJp
bmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTV29ya2VyR2xv
YmFsU2NvcGVCYXNlLmNwcApAQCAtMTY4OCw3ICsxNjkyLDkgQEAgc2V0KFdlYkNvcmVfU09VUkNF
UwogICAgIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAogICAgIGh0bWwvY2FudmFzL1dlYkdM
UHJvZ3JhbS5jcHAKICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKKyAgICBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAogICAgIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKyAgICBodG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmNwcAogICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAogICAgIGh0bWwv
Y2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcAogICAgIGh0bWwvY2FudmFzL1dl
YkdMU2hhcmVkT2JqZWN0LmNwcApAQCAtMjc4NSw3ICsyNzkxLDkgQEAgaWYgKEVOQUJMRV9XRUJH
TCkKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCiAgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuY3BwCisgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKyAgICAgICAg
aHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICAgICAgaHRtbC9jYW52
YXMvV2ViR0xTaGFkZXIuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lz
aW9uRm9ybWF0LmNwcAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAK
QEAgLTI4MjIsNyArMjgzMCw5IEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMTG9zZUNvbnRleHQuaWRsCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaWRsCisgICAgICAg
IGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsCiAgICAgICAgIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKKyAgICAgICAgaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIu
aWRsCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmlkbAog
ICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaWRsCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9EZXJpdmVkU291cmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMuY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJK
U09FU1RleHR1cmVIYWxmRmxvYXQuY3BwIgogI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9h
dExpbmVhci5jcHAiCiAjaW5jbHVkZSAiSlNPRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAiCisjaW5j
bHVkZSAiSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCIKICNpbmNsdWRlICJKU1dlYkdMQWN0
aXZlSW5mby5jcHAiCiAjaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5jcHAiCiAjaW5jbHVkZSAiSlNX
ZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcCIKQEAgLTcwLDYgKzcxLDcgQEAKICNpbmNsdWRl
ICJKU1dlYkdMUHJvZ3JhbS5jcHAiCiAjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmJ1ZmZlci5jcHAi
CiAjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIgorI2luY2x1ZGUgIkpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAiCiAjaW5jbHVkZSAiSlNXZWJHTFNoYWRlci5jcHAi
CiAjaW5jbHVkZSAiSlNXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5jcHAiCiAjaW5jbHVkZSAi
SlNXZWJHTFRleHR1cmUuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShy
ZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3
b3JraW5nIGNvcHkpCkBAIC00NDQsNyArNDQ0LDkgQEAgTk9OX1NWR19CSU5ESU5HX0lETFMgPSBc
CiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmlkbCBcCiAgICAg
JChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaWRsIFwKICAgICAkKFdlYkNvcmUp
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlkbCBcCisgICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsIFwKKyAgICAkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9X
ZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvV2ViR0xUZXh0dXJlLmlkbCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc2
Myw2ICs3NjMsMjIgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIk
KENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViQ29y
ZVxEZXJpdmVkU291cmNlc1xKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIj4KKyAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1JlbGVhc2VfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1JlbGVhc2V8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z1N1ZmZpeHx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBs
YXRmb3JtQXJjaGl0ZWN0dXJlKVxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHAiPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfHg2NCci
PnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVk
RnJvbUJ1aWxkPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
YWNjZXNzaWJpbGl0eVxBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAiPgogICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtNzc3LDcgKzc5
MywzMCBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
ICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpz
XEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAi
PgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgor
ICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAg
IDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwv
Q2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dp
bkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdf
V2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9k
dWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8
eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCci
PnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAiPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVk
RnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAg
IDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cY3NzXENTU0ltYWdlU2V0
VmFsdWUuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4NjQnIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KQEAgLTY2MzksNiArNjY3OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxodG1sXGNhbnZhc1xPRVNUZXh0dXJlSGFsZkZsb2F0LmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcT0VTVmVydGV4QXJy
YXlPYmplY3QuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNc
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxodG1sXGNhbnZhc1xXZWJHTEJ1ZmZlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxodG1sXGNhbnZhc1xXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQy5jcHAiIC8+CkBAIC02NjU5LDYgKzY2OTksNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caHRtbFxjYW52YXNcV2ViR0xQcm9ncmFtLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMUmVuZGVyYnVmZmVyLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2Fu
dmFzXFdlYkdMU2hhZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxc
Y2FudmFzXFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMU2hhcmVkT2JqZWN0LmNwcCIgLz4KQEAgLTE4
NzYyLDYgKzE4ODAzLDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlv
bkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJp
dmVkU291cmNlc1xKU0VYVHNSR0IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29u
ZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3RO
YW1lKVxEZXJpdmVkU291cmNlc1xKU0VYVEZyYWdEZXB0aC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1
cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTRVhUQmxlbmRNaW5NYXguaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBs
YXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1l
KVxEZXJpdmVkU291cmNlc1xKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFjY2Vzc2liaWxpdHlcQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xDU1NJbWFnZVNldFZhbHVl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjc3NcV2ViS2l0Q1NTUmVzb3VyY2VW
YWx1ZS5oIiAvPgpAQCAtMTg4NjEsNiArMTg5MDQsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caHRtbFxjYW52YXNcT0VTVGV4dHVyZUhhbGZGbG9hdC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcT0VTVmVydGV4QXJyYXlP
YmplY3QuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxc
Y2FudmFzXFdlYkdMQWN0aXZlSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aHRtbFxjYW52YXNcV2ViR0xCdWZmZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGh0bWxcY2FudmFzXFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIgLz4KQEAgLTE4ODgyLDYg
KzE4OTI2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdM
UHJvZ3JhbS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2Vi
R0xSZW5kZXJidWZmZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcY2Fu
dmFzXFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caHRtbFxjYW52YXNcV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0xTaGFkZXIuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTFNoYXJl
ZE9iamVjdC5oIiAvPgpAQCAtMjEyNzYsNCArMjEzMjEsNCBAQAogICA8SW1wb3J0R3JvdXAgTGFi
ZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQ
YXRoKVxCdWlsZEN1c3RvbWl6YXRpb25zXG1hc20udGFyZ2V0cyIgLz4KICAgPC9JbXBvcnRHcm91
cD4KLTwvUHJvamVjdD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTEz
ODMsOSArMTM4Myw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xSb3VuZGVkUmVjdC5jcHAiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljczwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcU2VnbWVudGVkRm9udERhdGEuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGxh
dGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFNoYWRvd0JsdXIuY3BwIj4KICAgICAgIDxG
aWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTQ4
NDUsMTUgKzQ4NDIsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcRmxvYXRTaXplLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xGb250LmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNz
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1c
Z3JhcGhpY3M8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREYXRhLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBs
YXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250RGVzY3JpcHRpb24uY3BwIj4KICAg
ICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
QEAgLTQ4NjMsOSArNDg1NCw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGb250R2x5cGhzLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBo
aWNzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xGb250RmFzdFBhdGguY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGxh
dGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwIj4K
ICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KQEAgLTcxNTYsNiArNzE0NCwyNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRt
bFxjYW52YXNcRVhUQmxlbmRNaW5NYXguY3BwIj4KICAgICAgIDxGaWx0ZXI+aHRtbFxjYW52YXM8
L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXEZvbnRDYXNjYWRlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRSYW5nZXMuY3BwIiAvPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcCI+CisgICAgICA8RmlsdGVyPmJpbmRpbmdzXGpzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBp
bGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2VDdXN0b20uY3BwIj4KKyAgICAgIDxGaWx0ZXI+YmluZGluZ3NcanM8L0Zp
bHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxc
Y2FudmFzXFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aHRtbFxj
YW52YXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGh0bWxcY2FudmFzXFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIj4KKyAgICAgIDxG
aWx0ZXI+aHRtbFxjYW52YXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0
ZWN0dXJlKVxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5j
cHAiPgorICAgICAgPEZpbHRlcj5EZXJpdmVkU291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21w
aWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
aiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcCI+CisgICAgICA8RmlsdGVyPkRlcml2ZWRTb3VyY2VzPC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xnZW9sb2NhdGlvblxDb29yZGluYXRl
cy5oIj4KQEAgLTg0MjQsOSArODQzMiw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xSb3VuZGVkUmVjdC5oIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1c
Z3JhcGhpY3M8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFNlZ21lbnRlZEZvbnREYXRhLmgiPgotICAgICAgPEZp
bHRlcj5wbGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcU2hhZG93Qmx1ci5oIj4KICAg
ICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
QEAgLTEyNzEyLDE1ICsxMjcxNyw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xGbG9hdFNpemVIYXNoLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxn
cmFwaGljczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5oIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1c
Z3JhcGhpY3M8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYWNoZS5oIj4KICAgICAgIDxGaWx0ZXI+cGxh
dGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREYXRhLmgiPgotICAgICAgPEZpbHRl
cj5wbGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9uLmgiPgog
ICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgpAQCAtMTUwNjIsNiArMTUwNjEsMjAgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1v
ZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNrZW5kU3luYy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxTdGF0ZW1lbnRTeW5jLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5z
YWN0aW9uQmFja2VuZFN5bmMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZvbnRDYXNjYWRlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xGb250UmFuZ2VzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiPgorICAgICAgPEZp
bHRlcj5odG1sXGNhbnZhczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIj4K
KyAgICAgIDxGaWx0ZXI+aHRtbFxjYW52YXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRm
b3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQuaCI+CisgICAgICA8RmlsdGVyPkRlcml2ZWRTb3VyY2VzPC9GaWx0ZXI+
CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRp
b25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiPgorICAgICAgPEZpbHRl
cj5EZXJpdmVkU291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICA8L0l0ZW1Hcm91
cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxjc3NcQ1NTR3JhbW1hci55
LmluIj4KQEAgLTE1MjcyLDQgKzE1Mjg1LDQgQEAKICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cd2lu
PC9GaWx0ZXI+CiAgICAgPC9NQVNNPgogICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KKzwvUHJv
amVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzg2MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTU4NTEsNiArNTg1MSwxNiBAQAogCQlEM0FBMTBGNDEyM0E5OEFBMDA5
MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5
TWF0Y2hlci5oICovOyB9OwogCQlEM0Q0RTk3MjEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1h
cnlFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEQzRDRFOTcwMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwICov
OyB9OwogCQlEM0Q0RTk3MzEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MTEz
MEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi87IH07CisJCUQzRjNEMzYz
MUE2OUIxOTAwMDU5RkMyQiAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNGM0QzNjExQTY5QjE5MDAw
NTlGQzJCIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CisJCUQzRjNEMzY0
MUE2OUIxOTAwMDU5RkMyQiAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRjNEMzYyMUE2OUIxOTAwMDU5
RkMyQiAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJRDNGM0QzNjcxQTY5
QjFBNTAwNTlGQzJCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0YzRDM2NTFBNjlCMUE1MDA1
OUZDMkIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLzsgfTsKKwkJRDNGM0Qz
NjgxQTY5QjFBNTAwNTlGQzJCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNGM0QzNjYxQTY5QjFB
NTAwNTlGQzJCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovOyB9OworCQlEM0Yz
RDM2OTFBNjlCN0IwMDA1OUZDMkIgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0YzRDM1RTFBNjlB
NTA2MDA1OUZDMkIgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi87IH07CisJCUQz
RjNEMzZBMUE2OUI3QjkwMDU5RkMyQiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0YzRDM1RjFBNjlB
NTA2MDA1OUZDMkIgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovOyB9OworCQlEM0Yz
RDM2QjFBNjlCN0M1MDA1OUZDMkIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRjNE
MzVBMUE2OUEzQjAwMDU5RkMyQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20u
Y3BwICovOyB9OworCQlEM0YzRDM2QzFBNjlCN0Q1MDA1OUZDMkIgLyogSlNXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEQzRjNEMzU5MUE2OUEzQjAwMDU5RkMyQiAvKiBKU1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwICovOyB9OworCQlEM0YzRDM2RDFBNjlCN0RDMDA1OUZDMkIgLyogV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEM0YzRDM1QjFBNjlBNTA2MDA1OUZDMkIgLyogV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5jcHAgKi87IH07CisJCUQzRjNEMzZFMUE2OUI3RTAwMDU5RkMyQiAvKiBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEM0YzRDM1QzFBNjlBNTA2MDA1OUZDMkIgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4
dC5oICovOyB9OwogCQlENjE5QTMwNzE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRp
b25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAg
Ki87IH07CiAJCUQ2MTlBMzA4MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNj
b3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENjE5
QTMwNjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICovOyB9Owog
CQlENjQ4OUQyNTE2NkZGQ0YxMDA3QzAzMUIgLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2NDg5RDIzMTY2
RkZDRjEwMDdDMDMxQiAvKiBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwICovOyB9OwpAQCAtMTMz
MzUsNiArMTMzNDUsMTggQEAKIAkJRDNBQTEwRjIxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVl
cnlNYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlN
YXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzRDRFOTcwMTMwQzdDRkUw
MDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTFN1bW1hcnlFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDNENEU5NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDNGM0QzNTkxQTY5QTNCMDAwNTlGQzJC
IC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0YzRDM1QTFBNjlBM0IwMDA1OUZDMkIgLyog
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzRjNEMzVCMUE2OUE1MDYwMDU5RkMyQiAv
KiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0Yz
RDM1QzFBNjlBNTA2MDA1OUZDMkIgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGgg
PSBjYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlEM0YzRDM1RDFBNjlBNTA2MDA1OUZDMkIgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGw7
IHBhdGggPSBjYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUQzRjNEMzVFMUE2OUE1MDYwMDU5RkMyQiAvKiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0YzRDM1RjFB
NjlBNTA2MDA1OUZDMkIgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHBhdGgg
PSBjYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlEM0YzRDM2MDFBNjlBNTA2MDA1OUZDMkIgLyogV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzRjNEMzYxMUE2OUIxOTAwMDU5RkMyQiAvKiBK
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRDNGM0QzNjIxQTY5QjE5MDAwNTlGQzJCIC8qIEpTV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDNGM0QzNjUxQTY5
QjFBNTAwNTlGQzJCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0YzRDM2NjFBNjlCMUE1MDA1OUZD
MkIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0
YXRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDaGls
ZExpc3RNdXRhdGlvblNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDYx
OUEzMDYxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjQ4OUQyMzE2NkZGQ0YxMDA3QzAzMUIgLyogSlNI
VE1MVGVtcGxhdGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNTg0MCw2ICsxNTg2MiwxMiBAQAogCQkJCTQ5QzdCOUI5MTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFJlbmRlcmJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5QkExMDQyRDMyRjAwMDlENDQ3
IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmggKi8sCiAJCQkJNDlDN0I5QkIxMDQyRDMyRjAwMDlENDQ3
IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmlkbCAqLywKKwkJCQlEM0YzRDM1RTFBNjlBNTA2MDA1OUZD
MkIgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi8sCisJCQkJRDNGM0QzNUYxQTY5
QTUwNjAwNTlGQzJCIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLywKKwkJCQlEM0Yz
RDM2MDFBNjlBNTA2MDA1OUZDMkIgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwgKi8s
CisJCQkJRDNGM0QzNUIxQTY5QTUwNjAwNTlGQzJCIC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQu
Y3BwICovLAorCQkJCUQzRjNEMzVDMUE2OUE1MDYwMDU5RkMyQiAvKiBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0LmggKi8sCisJCQkJRDNGM0QzNUQxQTY5QTUwNjAwNTlGQzJCIC8qIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQuaWRsICovLAogCQkJCTQ5QzdCOUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwICovLAogCQkJCTQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLywKIAkJCQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbCAqLywKQEAgLTE4OTE0LDYgKzE4OTQyLDEw
IEBACiAJCQkJNDlDN0I5ODkxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmggKi8s
CiAJCQkJNDlDN0I5OEExMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xSZW5kZXJidWZmZXIuY3Bw
ICovLAogCQkJCTQ5QzdCOThCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUmVuZGVyYnVmZmVy
LmggKi8sCisJCQkJRDNGM0QzNjUxQTY5QjFBNTAwNTlGQzJCIC8qIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAgKi8sCisJCQkJRDNGM0QzNjYxQTY5QjFBNTAwNTlGQzJCIC8qIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovLAorCQkJCUQzRjNEMzYxMUE2OUIxOTAwMDU5RkMy
QiAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwICovLAorCQkJCUQzRjNEMzYyMUE2OUIx
OTAwMDU5RkMyQiAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCAqLywKIAkJCQk0OUVFRDE0
MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovLAogCQkJ
CTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oICov
LAogCQkJCTQ5QzdCOThGMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMU2hhZGVyLmNwcCAqLywK
QEAgLTIxMDA4LDcgKzIxMDQwLDkgQEAKIAkJCQk3QzczRkIxNzE5MUVGODA4MDA3REUwNjEgLyog
SlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZERjcw
ODE3MUNBMkM1MDBERDUyQjggLyogSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZE
RjcwQTE3MUNBMkM1MDBERDUyQjggLyogSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAgKi8sCisJ
CQkJRDNGM0QzNUExQTY5QTNCMDAwNTlGQzJCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZUN1c3RvbS5jcHAgKi8sCiAJCQkJNDlFRUQxNEMxMDUxOTcxQTAwMDk5RkFCIC8qIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKKwkJCQlEM0YzRDM1OTFBNjlBM0IwMDA1OUZD
MkIgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzI3NUI3
ODExQzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi8sCiAJCQkJRTFD
QTVDQkIwRThDRENBRjAwRThFRjkwIC8qIEpTV29ya2VyQ3VzdG9tLmNwcCAqLywKIAkJCQlFMTgy
NThBQjBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgKi8s
CkBAIC0yNTA5Miw5ICsyNTEyNiwxMSBAQAogCQkJCUIyRkEzRDg5MEFCNzVBNkYwMDBFNUFDNCAv
KiBKU1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQyMjQxODQx
MDdFNzdGNDAwNzY2QTg3IC8qIEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGQTNEOEIwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHRkVPZmZzZXRFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQlEM0YzRDM2RTFBNjlCN0UwMDA1OUZDMkIgLyogV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEOEQwQUI3NUE2RjAw
MEU1QUM0IC8qIEpTU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJGQTNEOEYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEOTEwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
RkVTcG90TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlEM0YzRDM2QTFBNjlCN0I5
MDA1OUZDMkIgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJGQTNEOTMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjJGQTNEOTUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHRkVUdXJidWxl
bmNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEOTcwQUI3NUE2RjAwMEU1QUM0
IC8qIEpTU1ZHRmlsdGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTQ5NCw2ICsyNTUz
MCw3IEBACiAJCQkJOTM1MDBGMzIxM0ZERTNCRTAwOTlFQzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRh
aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRENCODM3OTE5Rjk5QkJBMDBBN0ZCRTQgLyogTlNT
aGFyaW5nU2VydmljZVBpY2tlclNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRDQjgzN0ExOUY5
OUJCQTAwQTdGQkU0IC8qIE5TU2hhcmluZ1NlcnZpY2VTUEkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUQzRjNEMzY0MUE2OUIxOTAwMDU5RkMyQiAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBp
biBIZWFkZXJzICovLAogCQkJCUNFMTI1MjUzMUExQkVDMDYwMDg2NDQ4MCAvKiBOU1N0cmluZ1NQ
SS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxMjUyNTUxQTFCRUMwRTAwODY0NDgwIC8qIE5TVVJM
RG93bmxvYWRTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OEY1NDAzMTlBMUM5MjQwMDg4RkM5
MiAvKiBOU1VSTEZpbGVUeXBlTWFwcGluZ3NTUEkuaCBpbiBIZWFkZXJzICovLApAQCAtMjYzNTcs
NiArMjYzOTQsNyBAQAogCQkJCUIyMjI3QUFDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTdHJpbmdM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FCODBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
U3R5bGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FCQjBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHU1ZHRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDNGM0QzNjgxQTY5QjFB
NTAwNTlGQzJCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjIyMjdBQkUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1N3aXRjaEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyMjI3QUMxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTeW1ib2xFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FDNTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
VGVzdHMuaCBpbiBIZWFkZXJzICovLApAQCAtMjg3NDAsNiArMjg3NzgsNyBAQAogCQkJCTY1REYz
MjAzMDlEMUNDNjAwMDBCRTMyNSAvKiBKU1RleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEy
QzQwQUIwREVCNTVBQTAwNUFGMTlFIC8qIEpTVGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MzNBMTRCODBCN0QxRDUyMDBBNTNGRkQgLyogSlNUZXh0RXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRDNGM0QzNkIxQTY5QjdDNTAwNTlGQzJCIC8qIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VGNDVGNTBFNjg3QjVD
MDAxQzEyODcgLyogSlNUZXh0TWV0cmljcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzA3NTY5
NDE0MjI2NjhEMDA0MTQxNjEgLyogSlNUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDcwNzU2REQxNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjg3NjUsNiArMjg4MDQsNyBAQAogCQkJCTdDNzNGQjBDMTkxRUY1QTgwMDdERTA2
MSAvKiBKU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M3M0ZCMTkxOTFFRjgwODAwN0RFMDYxIC8qIEpTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVz
cGFjZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNUM3NzA5NDEwMEQzQ0E4MDA1QkEy
NjcgLyogSlNWYWxpZGl0eVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQzRjNEMzY3MUE2
OUIxQTUwMDU5RkMyQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQ0RFODNEQjYxODNEMzUyQTAwMzFFQUEzIC8qIEpTVmlkZW9QbGF5YmFja1F1
YWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdDNTlCNUYxN0Y0QjIwODAwMEZCQ0JCIC8q
IEpTVmlkZW9TdHJlYW1UcmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRThFRjA0QTE3MUM5
MDE0MDA5QjQ4QzMgLyogSlNWaWRlb1RyYWNrLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjkwNDgs
NiArMjkwODgsNyBAQAogCQkJCUNERTdGQzQ0MTgxOTA0QjEwMDJCQkI3NyAvKiBPcmRlckl0ZXJh
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAwMTQ2MjhBMTAzQ0QxREUwMDBCMjBEQiAvKiBP
cmlnaW5BY2Nlc3NFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTlFODlGQjE2RTJEQzA1
MDBBOTA4RjggLyogT3JpZ2luTG9jay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlEM0YzRDM2RDFB
NjlCN0RDMDA1OUZDMkIgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGRDU4MUZBRTE1MjBGOTFGMDAzQTdBNzUgLyogT3NjaWxsYXRvck5vZGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUEwRDU3MzYwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVGRUE4NjkwOTgzM0FERTAwQkVENEFCIC8qIFBh
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTEyNCw2ICsyOTE2NSw3IEBACiAJCQkJRkQ0NUE5
NTkxNzVENDE3MTAwQzIxRUM4IC8qIFBvbHlnb25TaGFwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MTg5RjBERTEwQjQ2QjBFMDBGM0M3MzkgLyogUG9wU3RhdGVFdmVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5M0YxOUFGODA4MjQ1RTU5MDAxRTlBQkMgLyogUG9zaXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRDNGM0QzNjkxQTY5QjdCMDAwNTlGQzJCIC8qIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc5MTlDMjMwQjdEMTg4NjAwQTU2
OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjc3NkQ0M0Qx
MTA0NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
OEVBN0VCRDBBMTk0NUQwMDBBOEVGNUYgLyogUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMjk0ODYsNiArMjk1MjgsNyBAQAogCQkJCTk3QkM2QTQ0MTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
QkM2QTQ3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkU4QTY3NDcxNkNERDE5RTAwOTMwQkY4IC8qIFNRTFN0YXRlbWVudEJhY2tlbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRDNGM0QzNjMxQTY5QjE5MDAwNTlGQzJCIC8qIEpTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkE0RjE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ0Rjk2
RjUxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkVFMTgxMTMxNkMzMTlFODAwMDg0ODQ5IC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI5OTY4LDYgKzMwMDExLDcgQEAKIAkJCQkzRjQyQjMxRTE4ODEx
OTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQ0Q4MjAzMEQxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNj
cmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkzRkJDNEFGMzE4
OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4g
U291cmNlcyAqLywKKwkJCQlEM0YzRDM2QzFBNjlCN0Q1MDA1OUZDMkIgLyogSlNXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1RkQ0NjY2MTlCNTk2
RjYwMDFFMkI0RCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUYxMjE3MUY1MTZBOENFRDIwMDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEMjFBODAyMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJW
VFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzMSw2ICsxMzEsOSBAQAogI2luY2x1ZGUgIkpTVHJlZVdhbGtlckN1c3Rv
bS5jcHAiCiAjaW5jbHVkZSAiSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU1Zp
ZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcCIKKyNpbmNsdWRlICJKU1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwIgorI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3Rv
bS5jcHAiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIgogI2lu
Y2x1ZGUgIkpTV2ViS2l0UG9pbnRDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTV29ya2VyQ3VzdG9t
LmNwcCIKICNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJKU05vZGUuaCIKIAogI2lmIEVOQUJMRShXRUJHTCkK
KyNpbmNsdWRlICJKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNlbmRpZgogCkBAIC01MSw4ICs1
MywxMCBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NCiAgICAgICAg
IHJldHVybiBqc051bGwoKTsKIAogI2lmIEVOQUJMRShXRUJHTCkKLSAgICBpZiAob2JqZWN0LT5p
czNkKCkpCisgICAgaWYgKG9iamVjdC0+aXNXZWJHTDEoKSkKICAgICAgICAgcmV0dXJuIHdyYXA8
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kj4ob2JqZWN0KSk7CisgICAgaWYgKG9iamVjdC0+aXNXZWJHTDIoKSkK
KyAgICAgICAgcmV0dXJuIHdyYXA8SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQqPihvYmplY3QpKTsKICNlbmRp
ZgogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9iamVjdC0+aXMyZCgpKTsK
ICAgICByZXR1cm4gd3JhcDxKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihvYmplY3QpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KIAogI2lmIEVOQUJMRShXRUJHTCkKLSNpbmNsdWRlICJKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAK
ICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5LmgiCi0jaW5jbHVkZSAi
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdF
QkdMKQorI2luY2x1ZGUgIkpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIgorCit1c2luZyBuYW1l
c3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit2b2lkIEpTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZpbXBsKCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkK
KyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKworI2luY2x1ZGUgIkFO
R0xFSW5zdGFuY2VkQXJyYXlzLmgiCisjaW5jbHVkZSAiRVhUQmxlbmRNaW5NYXguaCIKKyNpbmNs
dWRlICJFWFRGcmFnRGVwdGguaCIKKyNpbmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCisj
aW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCisjaW5jbHVkZSAiRVhUc1JH
Qi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0FOR0xF
SW5zdGFuY2VkQXJyYXlzLmgiCisjaW5jbHVkZSAiSlNFWFRCbGVuZE1pbk1heC5oIgorI2luY2x1
ZGUgIkpTRVhURnJhZ0RlcHRoLmgiCisjaW5jbHVkZSAiSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmgi
CisjaW5jbHVkZSAiSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKKyNpbmNsdWRlICJK
U0VYVHNSR0IuaCIKKyNpbmNsdWRlICJKU0hUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAi
SlNIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKKyNpbmNsdWRl
ICJKU09FU0VsZW1lbnRJbmRleFVpbnQuaCIKKyNpbmNsdWRlICJKU09FU1N0YW5kYXJkRGVyaXZh
dGl2ZXMuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdC5oIgorI2luY2x1ZGUgIkpTT0VT
VGV4dHVyZUZsb2F0TGluZWFyLmgiCisjaW5jbHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0Lmgi
CisjaW5jbHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCisjaW5jbHVkZSAiSlNP
RVNWZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViR0xCdWZmZXIuaCIKKyNpbmNs
dWRlICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJKU1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVQVlJUQy5oIgorI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVMzVEMuaCIKKyNpbmNsdWRlICJKU1dlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKKyNpbmNsdWRl
ICJKU1dlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlcHRoVGV4dHVyZS5o
IgorI2luY2x1ZGUgIkpTV2ViR0xEcmF3QnVmZmVycy5oIgorI2luY2x1ZGUgIkpTV2ViR0xGcmFt
ZWJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTV2ViR0xMb3NlQ29udGV4dC5oIgorI2luY2x1ZGUgIkpT
V2ViR0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1
ZGUgIkpTV2ViR0xTaGFkZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMVGV4dHVyZS5oIgorI2luY2x1
ZGUgIkpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKKyNpbmNsdWRlICJKU1dlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMuaCIKKyNpbmNsdWRlICJKU1dlYktpdENTU01hdHJpeC5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgorI2lu
Y2x1ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxv
YXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNU
ZXh0dXJlSGFsZkZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5o
IgorI2luY2x1ZGUgIk9FU1ZlcnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViR0xCdWZm
ZXIuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCisjaW5jbHVkZSAi
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVMzVEMuaCIKKyNpbmNsdWRlICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCisjaW5j
bHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKKyNpbmNsdWRlICJXZWJHTERlcHRoVGV4dHVyZS5o
IgorI2luY2x1ZGUgIldlYkdMRHJhd0J1ZmZlcnMuaCIKKyNpbmNsdWRlICJXZWJHTEV4dGVuc2lv
bi5oIgorI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTEdldElu
Zm8uaCIKKyNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xQcm9n
cmFtLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUg
IldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUg
IkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0hUTUxWaWRlb0VsZW1lbnQuaCIKKyNl
bmRpZgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
CitzdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvKQoreworICAgIHN3aXRjaCAo
aW5mby5nZXRUeXBlKCkpIHsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sOgorICAg
ICAgICByZXR1cm4ganNCb29sZWFuKGluZm8uZ2V0Qm9vbCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVCb29sQXJyYXk6IHsKKyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlz
dDsKKyAgICAgICAgY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZSA9IGluZm8uZ2V0Qm9vbEFycmF5
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsraWkp
CisgICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWVbaWldKSk7CisgICAgICAg
IHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QsIGxpc3QpOworICAg
IH0KKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVGbG9hdDoKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGluZm8uZ2V0RmxvYXQoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlSW50
OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRJbnQoKSk7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlTnVsbDoKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIGNhc2Ug
V2ViR0xHZXRJbmZvOjprVHlwZVN0cmluZzoKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsIGluZm8uZ2V0U3RyaW5nKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlw
ZVVuc2lnbmVkSW50OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRVbnNpZ25lZElu
dCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEJ1ZmZlcjoKKyAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMQnVmZmVyKCkpOwor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRmxvYXRBcnJheToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMRmxvYXRBcnJheSgpKTsK
KyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEZyYW1lYnVmZmVyOgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGcmFtZWJ1ZmZlcigp
KTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEludEFycmF5OgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xJbnRBcnJheSgpKTsK
KyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBXZWJHTE9iamVjdEFycmF5CisgICAgICAgIC8v
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMT2JqZWN0QXJyYXk6CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlV2ViR0xQcm9ncmFtOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xQcm9ncmFtKCkpOworICAgIGNhc2UgV2ViR0xHZXRJ
bmZvOjprVHlwZVdlYkdMUmVuZGVyYnVmZmVyOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSk7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlV2ViR0xUZXh0dXJlOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xUZXh0dXJlKCkpOworICAgIGNhc2UgV2ViR0xHZXRJ
bmZvOjprVHlwZVdlYkdMVW5zaWduZWRCeXRlQXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KCkpOworICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRJbnRBcnJheToKKyAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWduZWRJbnRB
cnJheSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9Cit9CisK
K2VudW0gT2JqZWN0VHlwZSB7CisgICAga0J1ZmZlciwga1JlbmRlcmJ1ZmZlciwga1RleHR1cmUs
IGtWZXJ0ZXhBdHRyaWIKK307CisKK3N0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmplY3RU
eXBlIG9iamVjdFR5cGUpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQor
ICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IG9iai0+aW1wbCgp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50
MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbzsKKyAgICBz
d2l0Y2ggKG9iamVjdFR5cGUpIHsKKyAgICBjYXNlIGtCdWZmZXI6CisgICAgICAgIGluZm8gPSBj
b250ZXh0LmdldEJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Uga1JlbmRlcmJ1ZmZlcjoKKyAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBrVGV4dHVyZToKKyAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VGV4UGFyYW1l
dGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrVmVydGV4
QXR0cmliOgorICAgICAgICAvLyB0YXJnZXQgPT4gaW5kZXgKKyAgICAgICAgaW5mbyA9IGNvbnRl
eHQuZ2V0VmVydGV4QXR0cmliKHRhcmdldCwgcG5hbWUsIGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhl
Yywgb2JqLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK2VudW0gV2hpY2hQcm9ncmFtQ2Fs
bCB7CisgICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCit9OworCitzdGF0aWMgSlNWYWx1
ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
V2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbikKK3sKKyAgICBpZiAoIWV4dGVuc2lvbikKKyAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOworICAgIHN3aXRjaCAoZXh0ZW5zaW9uLT5nZXROYW1lKCkpIHsK
KyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTExvc2VDb250ZXh0TmFtZToKKyAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTExvc2VDb250
ZXh0Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUU2hhZGVyVGV4
dHVyZUxPRE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8RVhUU2hhZGVyVGV4dHVyZUxPRCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY05hbWU6CisgICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhU
c1JHQk5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8RVhUc1JHQio+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVY
VEZyYWdEZXB0aE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8RVhURnJhZ0RlcHRoKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4
dGVuc2lvbjo6RVhUQmxlbmRNaW5NYXhOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVEJsZW5kTWluTWF4Kj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTU3RhbmRhcmREZXJpdmF0aXZlc05hbWU6CisgICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTU3RhbmRh
cmREZXJpdmF0aXZlcyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9F
U1RleHR1cmVGbG9hdE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBX
ZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyTmFtZToKKyAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXRMaW5l
YXIqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlSGFs
ZkZsb2F0TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhck5hbWU6CisgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9h
dExpbmVhcio+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1ZlcnRl
eEFycmF5T2JqZWN0TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVuc2lvbikpOworICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246Ok9FU0VsZW1lbnRJbmRleFVpbnROYW1lOgorICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU0VsZW1lbnRJbmRleFVp
bnQqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlYnVnUmVu
ZGVyZXJJbmZvTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBz
dGF0aWNfY2FzdDxXZWJHTERlYnVnUmVuZGVyZXJJbmZvKj4oZXh0ZW5zaW9uKSk7CisgICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1NoYWRlcnNOYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVidWdTaGFkZXJzKj4o
ZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQ05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyo+KGV4dGVuc2lvbikpOworICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQ05hbWU6CisgICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21w
cmVzc2VkVGV4dHVyZVBWUlRDKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lv
bjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RD
Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZXB0aFRleHR1
cmVOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PFdlYkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6V2ViR0xEcmF3QnVmZmVyc05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEcmF3QnVmZmVycyo+KGV4dGVuc2lvbikpOwor
ICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkFOR0xFSW5zdGFuY2VkQXJyYXlzTmFtZToKKyAgICAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBTkdMRUluc3Rh
bmNlZEFycmF5cyo+KGV4dGVuc2lvbikpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4ganNOdWxsKCk7Cit9CisKK3ZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJmltcGwoKSk7Cit9CisKK0pTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNoYWRlcnMoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dy
YW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyczsKKyAgICBib29sIHN1Y2NlZWQg
PSBjb250ZXh0LmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJl
dHVybiBqc051bGwoKTsKKyAgICB9CisgICAgaWYgKCFzdWNjZWVkKQorICAgICAgICByZXR1cm4g
anNOdWxsKCk7CisgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgIGZvciAo
c2l6ZV90IGlpID0gMDsgaWkgPCBzaGFkZXJzLnNpemUoKTsgKytpaSkKKyAgICAgICAgbGlzdC5h
cHBlbmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgc2hhZGVyc1tpaV0uZ2V0KCkpKTsKKyAg
ICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOwor
fQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXh0ZW5zaW9uKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAg
ICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgY29uc3QgU3RyaW5nIG5hbWUgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0gY29udGV4dC5nZXRFeHRlbnNpb24obmFtZSk7
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV4dGVuc2lvbik7Cit9CisK
K0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZmZXJQYXJhbWV0ZXIo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywg
ZXhlYywga0J1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKKyAgICAgICAgcmV0dXJuIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHVuc2ln
bmVkIGF0dGFjaG1lbnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50
b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAg
IAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8g
PSBjb250ZXh0LmdldFBhcmFtZXRlcihwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwor
fQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFt
ZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAh
PSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgCisgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwo
KTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVk
KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5m
byA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtSZW5kZXJidWZmZXIpOworfQorCitK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVyUGFyYW1ldGVyKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisg
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAg
IGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAh
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaW5oZXJpdHMoSlNXZWJHTFNoYWRlcjo6aW5mbygp
KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIFdlYkdMU2hhZGVy
KiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSku
dG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRT
aGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwor
fQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U3VwcG9ydGVkRXh0
ZW5zaW9ucyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoY29udGV4dC5pc0NvbnRleHRMb3N0KCkpCisg
ICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZSA9IGNvbnRl
eHQuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxp
c3Q7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKKyAg
ICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFsdWVbaWldKSk7Cisg
ICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsK
K30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFRleFBhcmFtZXRl
cihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlz
LCBleGVjLCBrVGV4dHVyZSk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250
ZXh0ID0gaW1wbCgpOworICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFt
Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghcHJvZ3Jh
bSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOworICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRVbmlm
b3JtKHByb2dyYW0sIGxvY2F0aW9uLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywg
a1ZlcnRleEF0dHJpYik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KK2Jvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQoreworICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEpTQzo6
SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9
IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b0lu
dDMyKGV4ZWMpOworICAgIAorICAgIGlmICghdmVjdG9yLnRyeVJlc2VydmVDYXBhY2l0eShsZW5n
dGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdmVjdG9yLnJlc2l6ZShsZW5ndGgpOwor
ICAgIAorICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
IEpTQzo6SlNWYWx1ZSB2ID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7CisgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmVj
dG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCitlbnVtIERhdGFGdW5jdGlvblRvQ2FsbCB7CisgICAgZl91
bmlmb3JtMXYsIGZfdW5pZm9ybTJ2LCBmX3VuaWZvcm0zdiwgZl91bmlmb3JtNHYsCisgICAgZl92
ZXJ0ZXhBdHRyaWIxdiwgZl92ZXJ0ZXhBdHRyaWIydiwgZl92ZXJ0ZXhBdHRyaWIzdiwgZl92ZXJ0
ZXhBdHRyaWI0dgorfTsKKworZW51bSBEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgeworICAgIGZf
dW5pZm9ybU1hdHJpeDJmdiwgZl91bmlmb3JtTWF0cml4M2Z2LCBmX3VuaWZvcm1NYXRyaXg0ZnYK
K307CisKK3N0YXRpYyBib29sIGZ1bmN0aW9uRm9yVW5pZm9ybShEYXRhRnVuY3Rpb25Ub0NhbGwg
ZikKK3sKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgIGNhc2Ug
Zl91bmlmb3JtMnY6CisgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICBjYXNlIGZfdW5pZm9ybTR2
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0
YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjb250ZXh0KQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0g
MikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiA9IDA7CisgICAgbG9uZyBpbmRleCA9IC0xOworICAgIAorICAgIGlm
IChmdW5jdGlvbkZvclVuaWZvcm0oZikpIHsKKyAgICAgICAgbG9jYXRpb24gPSBKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAg
ICAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwor
ICAgIH0gZWxzZQorICAgICAgICBpbmRleCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRv
SW50MzIoZXhlYyk7CisgICAgCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3
ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlmICh3ZWJHTEFy
cmF5KSB7CisgICAgICAgIHN3aXRjaCAoZikgeworICAgICAgICBjYXNlIGZfdW5pZm9ybTF2Ogor
ICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgp
LCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjoKKyAg
ICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwg
ZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAg
ICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVj
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAg
ICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OgorICAg
ICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAg
ICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6Cisg
ICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjNmdihpbmRleCwgd2ViR0xBcnJheS5nZXQo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2Ogor
ICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgIH0KKyAgICAKKyAgICBWZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKKyAgICBpZiAoIXRvVmVj
dG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBj
YXNlIGZfdW5pZm9ybTF2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIGFy
cmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Zl91bmlmb3JtMnY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXku
ZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3Vu
aWZvcm0zdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5kYXRh
KCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9y
bTR2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwg
YXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl92ZXJ0ZXhBdHRy
aWIxdjoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEo
KSwgYXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3ZlcnRleEF0dHJp
YjJ2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSgp
LCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdmVydGV4QXR0cmli
M3Y6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0
djoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwg
YXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK3N0YXRp
YyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCit7Cisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CisgICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJH
TFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
KyAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
CisgICAgUmVmUHRyPEludDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGlmICh3ZWJHTEFycmF5KSB7CisgICAgICAgIHN3aXRjaCAoZikgeworICAgICAgICBjYXNl
IGZfdW5pZm9ybTF2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxvY2F0aW9uLCB3
ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBm
X3VuaWZvcm0ydjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJpdihsb2NhdGlvbiwgd2Vi
R0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91
bmlmb3JtM3Y6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRpb24sIHdlYkdM
QXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5p
Zm9ybTR2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCB3ZWJHTEFy
cmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9Cisg
ICAgCisgICAgCisgICAgVmVjdG9yPGludCwgNjQ+IGFycmF5OworICAgIGlmICghdG9WZWN0b3Io
ZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIHN3aXRjaCAoZikgeworICAgIGNhc2Ug
Zl91bmlmb3JtMXY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXku
ZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3Vu
aWZvcm0ydjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5kYXRh
KCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9y
bTN2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwg
YXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtNHY6
CisgICAgICAgIGNvbnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJh
eS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9u
TWF0cml4KERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3sKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpICE9IDMpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAg
ICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9u
Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghbG9jYXRp
b24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisg
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAKKyAgICBib29sIHRyYW5z
cG9zZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICAKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMy
QXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikpOworICAgIAorICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGlmICh3ZWJHTEFycmF5KSB7CisgICAgICAgIHN3aXRjaCAoZikgewor
ICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5p
Zm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6Cisg
ICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
d2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Zl91bmlmb3JtTWF0cml4NGZ2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4NGZ2
KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgCisgICAg
VmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgyKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZXhlYyk7CisgICAgCisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm1NYXRy
aXgyZnY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNw
b3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIGZfdW5pZm9ybU1hdHJpeDNmdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtTWF0cml4NGZ2OgorICAgICAgICBj
b250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgp
LCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisK
K0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3Jt
MXYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnVuaWZvcm0xaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4ZWMs
IGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5j
dGlvbmkoZl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7
Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0z
aXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91
bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aXYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtNHYs
IGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnVuaWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIGV4ZWMsIGltcGwoKSk7
Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1N
YXRyaXgzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlv
bk1hdHJpeChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXg0ZnYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZv
cm1NYXRyaXg0ZnYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjF2LCBleGVjLCBpbXBs
KCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0
ZXhBdHRyaWIyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5j
dGlvbmYoZl92ZXJ0ZXhBdHRyaWIydiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliM3Ys
IGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZlcnRleEF0dHJpYjRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjR2LCBleGVjLCBpbXBsKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDczOSArMjYsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIEVOQUJMRShXRUJH
TCkKLQogI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKLSNpbmNsdWRlICJB
TkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkVYVEJsZW5kTWluTWF4LmgiCi0jaW5j
bHVkZSAiRVhURnJhZ0RlcHRoLmgiCi0jaW5jbHVkZSAiRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgot
I2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgotI2luY2x1ZGUgIkVYVHNS
R0IuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0Vs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNBTkdM
RUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkpTRVhUQmxlbmRNaW5NYXguaCIKLSNpbmNs
dWRlICJKU0VYVEZyYWdEZXB0aC5oIgotI2luY2x1ZGUgIkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5o
IgotI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCi0jaW5jbHVkZSAi
SlNFWFRzUkdCLmgiCi0jaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVudC5oIgotI2luY2x1ZGUg
IkpTSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgiCi0jaW5jbHVk
ZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiSlNPRVNTdGFuZGFyZERlcml2
YXRpdmVzLmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXQuaCIKLSNpbmNsdWRlICJKU09F
U1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdC5o
IgotI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIkpT
T0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJKU1dlYkdMQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENv
bXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCi0jaW5jbHVk
ZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgotI2luY2x1ZGUgIkpTV2ViR0xEZXB0aFRleHR1cmUu
aCIKLSNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMuaCIKLSNpbmNsdWRlICJKU1dlYkdMRnJh
bWVidWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJK
U1dlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJidWZmZXIuaCIKLSNpbmNs
dWRlICJKU1dlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFRleHR1cmUuaCIKLSNpbmNs
dWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTLmgiCi0jaW5jbHVkZSAiSlNXZWJLaXRDU1NNYXRyaXguaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVpbnQuaCIKLSNp
bmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZs
b2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiT0VT
VGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIu
aCIKLSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgotI2luY2x1ZGUgIldlYkdMQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1ZGUg
IldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgotI2lu
Y2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1cmUu
aCIKLSNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xFeHRlbnNp
b24uaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xHZXRJ
bmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdMUHJv
Z3JhbS5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIldl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBl
ZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KLSNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotCi0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIkhU
TUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hUTUxWaWRlb0VsZW1lbnQuaCIKLSNlbmRp
ZgotCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCi17Ci0gICAgc3dpdGNoIChpbmZvLmdl
dFR5cGUoKSkgewotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2w6Ci0gICAgICAgIHJl
dHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjpr
VHlwZUJvb2xBcnJheTogewotICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAg
ICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5mby5nZXRCb29sQXJyYXkoKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKLSAgICAg
ICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtpaV0pKTsKLSAgICAgICAgcmV0dXJu
IGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgfQotICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgotICAgICAgICByZXR1cm4ganNOdW1iZXIo
aW5mby5nZXRGbG9hdCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVJbnQ6Ci0gICAg
ICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVOdWxsOgotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgY2FzZSBXZWJHTEdl
dEluZm86OmtUeXBlU3RyaW5nOgotICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhl
YywgaW5mby5nZXRTdHJpbmcoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlVW5zaWdu
ZWRJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldFVuc2lnbmVkSW50KCkpOwot
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVmZmVyOgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xCdWZmZXIoKSk7Ci0gICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5OgotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGbG9hdEFycmF5KCkpOwotICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZmZXI6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEZyYW1lYnVmZmVyKCkpOwotICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJyYXk6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEludEFycmF5KCkpOwotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQgV2ViR0xPYmplY3RBcnJheQotICAgIC8vIGNhc2UgV2ViR0xHZXRJ
bmZvOjprVHlwZVdlYkdMT2JqZWN0QXJyYXk6Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBl
V2ViR0xQcm9ncmFtOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlu
Zm8uZ2V0V2ViR0xQcm9ncmFtKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdM
UmVuZGVyYnVmZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlu
Zm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBl
V2ViR0xUZXh0dXJlOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlu
Zm8uZ2V0V2ViR0xUZXh0dXJlKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdM
VW5zaWduZWRCeXRlQXJyYXk6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJ
bmZvOjprVHlwZVdlYkdMVW5zaWduZWRJbnRBcnJheToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWduZWRJbnRBcnJheSgpKTsKLSAgICBj
YXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOgotICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUygpKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci19Ci0KLWVudW0gT2JqZWN0VHlw
ZSB7Ci0gICAga0J1ZmZlciwga1JlbmRlcmJ1ZmZlciwga1RleHR1cmUsIGtWZXJ0ZXhBdHRyaWIK
LX07Ci0KLXN0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dCogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkKLXsK
LSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVj
LT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCYgY29udGV4dCA9IG9iai0+aW1wbCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNpZ25l
ZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICBXZWJHTEdldEluZm8gaW5mbzsKLSAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHsKLSAgICBj
YXNlIGtCdWZmZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LmdldEJ1ZmZlclBhcmFtZXRlcih0
YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga1JlbmRlcmJ1ZmZl
cjoKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKHRhcmdl
dCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVGV4dHVyZToKLSAgICAg
ICAgaW5mbyA9IGNvbnRleHQuZ2V0VGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVmVydGV4QXR0cmliOgotICAgICAgICAvLyB0YXJnZXQg
PT4gaW5kZXgKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VmVydGV4QXR0cmliKHRhcmdldCwg
cG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChlYykgewotICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb2JqLT5nbG9iYWxPYmplY3QoKSwgaW5m
byk7Ci19Ci0KLWVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7Ci0gICAga1Byb2dyYW1QYXJhbWV0ZXIs
IGtVbmlmb3JtCi19OwotCi1zdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbikK
LXsKLSAgICBpZiAoIWV4dGVuc2lvbikKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIHN3
aXRjaCAoZXh0ZW5zaW9uLT5nZXROYW1lKCkpIHsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpX
ZWJHTExvc2VDb250ZXh0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxXZWJHTExvc2VDb250ZXh0Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6RVhUU2hhZGVyVGV4dHVyZUxPRE5hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUU2hhZGVyVGV4dHVyZUxP
RCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3BpY05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKj4oZXh0ZW5zaW9uKSk7
Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUc1JHQk5hbWU6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUc1JHQio+KGV4dGVuc2lvbikp
OwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEZyYWdEZXB0aE5hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhURnJhZ0RlcHRoKj4o
ZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUQmxlbmRNaW5NYXhOYW1l
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVY
VEJsZW5kTWluTWF4Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VT
U3RhbmRhcmREZXJpdmF0aXZlc05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTU3RhbmRhcmREZXJpdmF0aXZlcyo+KGV4dGVuc2lvbikp
OwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdE5hbWU6Ci0gICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZs
b2F0Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUZs
b2F0TGluZWFyTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBz
dGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKLSAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0TmFtZToKLSAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0
Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZG
bG9hdExpbmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcio+KGV4dGVuc2lvbikpOwotICAg
IGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1ZlcnRleEFycmF5T2JqZWN0TmFtZToKLSAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNWZXJ0ZXhBcnJh
eU9iamVjdCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU0VsZW1l
bnRJbmRleFVpbnROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PE9FU0VsZW1lbnRJbmRleFVpbnQqPihleHRlbnNpb24pKTsKLSAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlYnVnUmVuZGVyZXJJbmZvTmFtZToKLSAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnUmVuZGVy
ZXJJbmZvKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1
Z1NoYWRlcnNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PFdlYkdMRGVidWdTaGFkZXJzKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQ05hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29t
cHJlc3NlZFRleHR1cmVQVlJUQ05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMz
VENOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBX
ZWJHTEV4dGVuc2lvbjo6V2ViR0xEZXB0aFRleHR1cmVOYW1lOgotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVwdGhUZXh0dXJlKj4oZXh0
ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEcmF3QnVmZmVyc05hbWU6
Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2Vi
R0xEcmF3QnVmZmVycyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkFO
R0xFSW5zdGFuY2VkQXJyYXlzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxBTkdMRUluc3RhbmNlZEFycmF5cyo+KGV4dGVuc2lvbikpOwot
ICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ganNOdWxsKCk7Ci19
Ci0KIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1w
bCgpKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBX
ZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcihleGVjKTsKLSAgICBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyczsK
LSAgICBib29sIHN1Y2NlZWQgPSBjb250ZXh0LmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBz
aGFkZXJzLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICB9Ci0gICAgaWYgKCFzdWNjZWVk
KQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OwotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBzaGFkZXJzLnNpemUoKTsgKytp
aSkKLSAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgc2hhZGVy
c1tpaV0uZ2V0KCkpKTsKLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFs
T2JqZWN0KCksIGxpc3QpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRFeHRlbnNpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPCAxKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgY29uc3QgU3RyaW5nIG5hbWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0gY29udGV4dC5nZXRFeHRlbnNpb24o
bmFtZSk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV4dGVuc2lvbik7
Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRl
cihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlz
LCBleGVjLCBrQnVmZmVyKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDMpCi0gICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgYXR0YWNo
bWVudCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvSW50MzIoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIGVjKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpICE9IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsK
LSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UGFyYW1ldGVy
KHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpT
V2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAg
IGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIHVuc2ln
bmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHBy
b2dyYW0sIHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrUmVu
ZGVyYnVmZmVyKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hh
ZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwo
KTsKLSAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxs
KCkgJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmluaGVyaXRzKEpTV2ViR0xTaGFkZXI6
OmluZm8oKSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBXZWJH
TFNoYWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRl
eHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsK
LSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBp
bmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVk
RXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIGlmIChjb250ZXh0LmlzQ29udGV4dExvc3QoKSkKLSAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlID0gY29udGV4
dC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlz
dDsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgdmFsdWUuc2l6ZSgpOyArK2lpKQotICAg
ICAgICBsaXN0LmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB2YWx1ZVtpaV0pKTsKLSAg
ICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOwot
fQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIoRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhl
Yywga1RleHR1cmUpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRV
bmlmb3JtKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAg
ICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjKTsKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBK
U1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSkpOwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsK
LSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0VW5pZm9ybShwcm9ncmFtLCBsb2Nh
dGlvbiwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1ZlcnRleEF0dHJpYik7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLWJvb2wgdG9WZWN0
b3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5PiYgdmVjdG9yKQotewotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QodmFsdWUpOwotICAgIGludDMyX3QgbGVuZ3RoID0gb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+
dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIoZXhlYyk7Ci0KLSAgICBpZiAoIXZl
Y3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHZlY3Rvci5yZXNpemUobGVuZ3RoKTsKLQotICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gb2JqZWN0LT5nZXQoZXhl
YywgaSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgdmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJl
cihleGVjKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWVudW0gRGF0YUZ1bmN0
aW9uVG9DYWxsIHsKLSAgICBmX3VuaWZvcm0xdiwgZl91bmlmb3JtMnYsIGZfdW5pZm9ybTN2LCBm
X3VuaWZvcm00diwKLSAgICBmX3ZlcnRleEF0dHJpYjF2LCBmX3ZlcnRleEF0dHJpYjJ2LCBmX3Zl
cnRleEF0dHJpYjN2LCBmX3ZlcnRleEF0dHJpYjR2Ci19OwotCi1lbnVtIERhdGFGdW5jdGlvbk1h
dHJpeFRvQ2FsbCB7Ci0gICAgZl91bmlmb3JtTWF0cml4MmZ2LCBmX3VuaWZvcm1NYXRyaXgzZnYs
IGZfdW5pZm9ybU1hdHJpeDRmdgotfTsKLQotc3RhdGljIGJvb2wgZnVuY3Rpb25Gb3JVbmlmb3Jt
KERhdGFGdW5jdGlvblRvQ2FsbCBmKQotewotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91
bmlmb3JtMXY6Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICBjYXNlIGZfdW5pZm9ybTN2Ogot
ICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6
IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBKU0M6OkpTVmFs
dWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICAKLSAg
ICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSAwOwotICAgIGxvbmcgaW5kZXggPSAt
MTsKLSAgICAKLSAgICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3JtKGYpKSB7Ci0gICAgICAgIGxvY2F0
aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKLSAgICAgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcihleGVjKTsKLSAgICB9IGVsc2UKLSAgICAgICAgaW5kZXggPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0gICAgUmVmUHRy
PEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAgc3dpdGNoIChmKSB7Ci0gICAgICAg
IGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRp
b24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIGZfdW5pZm9ybTJ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2KGxvY2F0aW9u
LCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBmX3VuaWZvcm0zdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwg
d2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Zl91bmlmb3JtNHY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIHdl
YkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZf
dmVydGV4QXR0cmliMXY6Ci0gICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRl
eCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBm
X3ZlcnRleEF0dHJpYjJ2OgotICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5k
ZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Zl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliM2Z2KGlu
ZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IGZfdmVydGV4QXR0cmliNHY6Ci0gICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRmdihp
bmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7
Ci0gICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJy
YXkpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBzd2l0Y2gg
KGYpIHsKLSAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0xZnYo
bG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTJmdihsb2Nh
dGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2KGxvY2F0aW9u
LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIGZfdW5pZm9ybTR2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIGFy
cmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Zl92ZXJ0ZXhBdHRyaWIxdjoKLSAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgs
IGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBm
X3ZlcnRleEF0dHJpYjJ2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjJmdihpbmRleCwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZf
dmVydGV4QXR0cmliM3Y6Ci0gICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliM2Z2KGluZGV4LCBh
cnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl92
ZXJ0ZXhBdHRyaWI0djoKLSAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFy
cmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAot
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci19Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRhRnVuY3Rpb25Ub0Nh
bGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKLQotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpT
V2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwot
ICAKLSAgICBSZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvSW50MzJBcnJheShleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBpZiAod2ViR0xBcnJheSkgewotICAgICAgICBzd2l0Y2ggKGYpIHsKLSAgICAgICAgY2FzZSBm
X3VuaWZvcm0xdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTFpdihsb2NhdGlvbiwgd2Vi
R0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91
bmlmb3JtMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9jYXRpb24sIHdlYkdM
QXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5p
Zm9ybTN2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtM2l2KGxvY2F0aW9uLCB3ZWJHTEFy
cmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZv
cm00djoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwgd2ViR0xBcnJh
eS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0K
LSAgICBWZWN0b3I8aW50LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKGYpIHsKLSAgICBjYXNlIGZfdW5pZm9ybTF2Ogot
ICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXku
c2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAg
ICAgIGNvbnRleHQudW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXpl
KCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAg
Y29udGV4dC51bmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwg
ZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTR2OgotICAgICAgICBjb250
ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotfQotCi1zdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChEYXRhRnVu
Y3Rpb25NYXRyaXhUb0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDMp
Ci0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOwotCi0gICAgYm9vbCB0cmFuc3Bvc2UgPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAg
ICAKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIAotICAgIFJlZlB0cjxG
bG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgyKSk7Ci0gICAgICAgIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlm
ICh3ZWJHTEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikgewotICAgICAgICBjYXNlIGZfdW5p
Zm9ybU1hdHJpeDJmdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDJmdihsb2Nh
dGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6Ci0gICAgICAgICAgICBjb250ZXh0
LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwg
ZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4NGZ2
OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8ZmxvYXQsIDY0PiBhcnJh
eTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBh
cnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQotICAgIHN3aXRj
aCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgotICAgICAgICBjb250ZXh0LnVu
aWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6
Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBh
cnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IGZfdW5pZm9ybU1hdHJpeDRmdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4g
ZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0YXRlKiBl
eGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBs
KCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91
bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTJpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KEpTQzo6RXhlY1N0YXRl
KiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTN2LCBleGVjLCBp
bXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0zaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmko
Zl91bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm00diwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlND
OjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTR2LCBleGVj
LCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFG
dW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5p
Zm9ybU1hdHJpeDNmdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4NGZ2LCBleGVj
LCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3ZlcnRleEF0dHJpYjF2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjJ2LCBl
eGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjR2
LCBleGVjLCBpbXBsKCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTI5ODMsNyArMjk4Myw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkaW50ZXJmYWNlKSBlcSAiSW1wbCIpIHsK
ICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAgICR7aW1wbFR5cGV9KiByb290ID0g
JmpzJHtpbnRlcmZhY2VOYW1lfS0+aW1wbCgpO1xuIjsKICAgICAgICAgICAgIH0gZWxzaWYgKEdl
dEdlbmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEgIkltcGxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQiKSB7Ci0gICAgICAgICAgICAgICAgJHJvb3RTdHJpbmcgID0gIiAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIHJvb3QgPSBXVEY6OmdldFB0cihqcyR7aW50ZXJmYWNlTmFtZX0tPmltcGwo
KS5jb250ZXh0KCkpO1xuIjsKKyAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIHJvb3QgPSBXVEY6OmdldFB0cihqcyR7aW50ZXJmYWNl
TmFtZX0tPmltcGwoKS5jb250ZXh0KCkpO1xuIjsKICAgICAgICAgICAgIH0gZWxzaWYgKEdldEdl
bmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEgIkltcGxGcmFtZSIpIHsKICAgICAgICAg
ICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAgIEZyYW1lKiByb290ID0gV1RGOjpnZXRQdHIoanMk
e2ludGVyZmFjZU5hbWV9LT5pbXBsKCkuZnJhbWUoKSk7XG4iOwogICAgICAgICAgICAgICAgICRy
b290U3RyaW5nIC49ICIgICAgaWYgKCFyb290KVxuIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyAr
NTQsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKSAgICAKICNpbmNsdWRlICJXZWJHTENvbnRleHRB
dHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTIxMiw3ICsyMTIsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2Fu
dmFzRWxlbWVuCiAgICAgICAgICAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQtPmlzM2Qo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGlmICghbV9j
b250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGUodGhpcywgc3RhdGljX2Nhc3Q8V2ViR0xDb250ZXh0QXR0cmlidXRlcyo+KGF0
dHJzKSk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Y3JlYXRlKHRoaXMsIHN0YXRpY19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihh
dHRycyksIHR5cGUpOwogICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9z
aXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMKICAgICAgICAgICAgICAgICAg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CkBAIC0zMjcsNyAr
MzI3LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogCiAjaWYgRU5BQkxFKFdF
QkdMKQogICAgIGlmIChpczNEKCkgJiYgb2xkU2l6ZSAhPSBzaXplKCkpCi0gICAgICAgIHN0YXRp
Y19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSktPnJlc2hhcGUo
d2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKj4obV9jb250ZXh0LmdldCgpKS0+cmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7
CiAjZW5kaWYKIAogICAgIGlmIChhdXRvIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgewpA
QCAtMzk0LDcgKzM5NCw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNz
Q28KIAogI2lmIEVOQUJMRShXRUJHTCkgICAgCiAgICAgaWYgKGlzM0QoKSkKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKS0+bWFya0xh
eWVyQ29tcG9zaXRlZCgpOworICAgICAgICBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKj4obV9jb250ZXh0LmdldCgpKS0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwogI2VuZGlm
CiB9CiAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBIVE1MQ2FudmFzRWxl
bWVudDo6Z2V0CiAgICAgaWYgKCFpczNEKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHggPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UqIGN0eCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqPihtX2NvbnRl
eHQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGN0eC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFn
ZURhdGEoKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUlu
c3RhbmNlZEFycmF5cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1BTkdMRUluc3Rh
bmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRBcnJheXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQorQU5HTEVJbnN0YW5jZWRBcnJheXM6OkFOR0xFSW5zdGFuY2VkQXJyYXlzKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250
ZXh0KQogewogfQpAQCAtNDgsNyArNDgsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFt
ZSBBTkdMRUluc3RhCiAgICAgcmV0dXJuIEFOR0xFSW5zdGFuY2VkQXJyYXlzTmFtZTsKIH0KIAot
Ym9vbCBBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK2Jvb2wgQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZChXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogewogI2lmIFBMQVRGT1JNKElPUykgfHwgUExB
VEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAg
ICBVTlVTRURfUEFSQU0oY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9BTkdMRUluc3RhbmNlZEFycmF5cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmgJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDE2ICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7
CiAKIGNsYXNzIEFOR0xFSW5zdGFuY2VkQXJyYXlzIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5z
aW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBsaWNpdCBBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+QU5HTEVJbnN0YW5jZWRBcnJh
eXMoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Q7CiAKLSAg
ICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZv
aWQgZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3Qs
IEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7CiAgICAgdm9pZCBkcmF3RWxl
bWVudHNJbnN0YW5jZWRBTkdMRShHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw5IEBAIHB1
YmxpYzoKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9j
YW52YXM7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpczJkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIGlzV2ViR0wxKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNXZWJHTDIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXMz
ZCgpIGNvbnN0IHsgcmV0dXJuIGlzV2ViR0wxKCkgfHwgaXNXZWJHTDEoKTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpIHt9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguY3BwCShyZXZpc2lvbiAx
Nzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1FWFRCbGVuZE1pbk1heDo6RVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQorRVhUQmxlbmRNaW5NYXg6OkVYVEJsZW5kTWluTWF4KFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5oCShyZXZp
c2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1h
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRVhUQmxlbmRNaW5NYXggZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewog
cHVibGljOgotICAgIGV4cGxpY2l0IEVYVEJsZW5kTWluTWF4KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIGV4cGxpY2l0IEVYVEJsZW5kTWluTWF4KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UqKTsKICAgICB2aXJ0dWFsIH5FWFRCbGVuZE1pbk1heCgpOwogCiAgICAgdmlydHVhbCBFeHRl
bnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVEZyYWdEZXB0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhURnJhZ0RlcHRoLmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURnJhZ0RlcHRoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVEZyYWdEZXB0aDo6
RVhURnJhZ0RlcHRoKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK0VYVEZyYWdEZXB0
aDo6RVhURnJhZ0RlcHRoKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAg
OiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRVhURnJhZ0RlcHRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRVhURnJhZ0RlcHRoLmgJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0VYVEZyYWdEZXB0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRVhURnJhZ0RlcHRoIGZpbmFsIDog
cHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFWFRGcmFnRGVw
dGgoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgRVhURnJhZ0RlcHRoKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5FWFRGcmFnRGVwdGgoKTsK
IAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJl
TE9ELmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
RVhUU2hhZGVyVGV4dHVyZUxPRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FWFRTaGFkZXJUZXh0dXJlTE9EOjpFWFRTaGFkZXJU
ZXh0dXJlTE9EKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK0VYVFNoYWRlclRleHR1
cmVMT0Q6OkVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29u
dGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5oCShyZXZpc2lv
biAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJl
TE9ELmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBFWFRTaGFkZXJUZXh0dXJlTE9EIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5z
aW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFWFRTaGFkZXJUZXh0dXJlTE9EKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0IEVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVYVFNoYWRlclRleHR1cmVMT0Qo
KTsKIAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FWFRU
ZXh0dXJlRmlsdGVyQW5pc290cm9waWM6OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyhXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM6
OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBj
b250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYy5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OworICAgIGV4cGxpY2l0IEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUc1JHQi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUc1JHQi5jcHAJKHJldmlzaW9uIDE3
ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVHNSR0IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRVhUc1JH
Qjo6RVhUc1JHQihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitFWFRzUkdCOjpFWFRz
UkdCKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVu
c2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhU
c1JHQi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVHNSR0Iu
aAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUc1JH
Qi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRVhUc1JHQiBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgRVhUc1JHQihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBs
aWNpdCBFWFRzUkdCKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5F
WFRzUkdCKCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92
ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4
VWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxl
bWVudEluZGV4VWludC5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL09FU0VsZW1lbnRJbmRleFVpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotT0VTRWxlbWVudEluZGV4VWludDo6
T0VTRWxlbWVudEluZGV4VWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitPRVNF
bGVtZW50SW5kZXhVaW50OjpPRVNFbGVtZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU0VsZW1lbnRJbmRleFVpbnQu
aAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxl
bWVudEluZGV4VWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgT0VTRWxlbWVudEluZGV4VWludCBmaW5hbCA6IHB1YmxpYyBX
ZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgT0VTRWxlbWVudEluZGV4VWlu
dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBsaWNpdCBPRVNFbGVtZW50SW5kZXhV
aW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5PRVNFbGVtZW50
SW5kZXhVaW50KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmRE
ZXJpdmF0aXZlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
T0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotT0VTU3RhbmRh
cmREZXJpdmF0aXZlczo6T0VTU3RhbmRhcmREZXJpdmF0aXZlcyhXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQpCitPRVNTdGFuZGFyZERlcml2YXRpdmVzOjpPRVNTdGFuZGFyZERlcml2YXRp
dmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVu
c2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgT0VT
U3RhbmRhcmREZXJpdmF0aXZlcyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgT0VTU3RhbmRhcmREZXJpdmF0aXZlcyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqKTsKKyAgICBleHBsaWNpdCBPRVNTdGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5PRVNTdGFuZGFyZERlcml2YXRpdmVzKCk7
CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3Bw
CShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0
dXJlRmxvYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotT0VTVGV4dHVyZUZsb2F0OjpPRVNUZXh0dXJlRmxvYXQoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VTVGV4dHVyZUZsb2F0OjpPRVNUZXh0dXJlRmxvYXQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9u
KGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0
dXJlRmxvYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNU
ZXh0dXJlRmxvYXQuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvT0VTVGV4dHVyZUZsb2F0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNUZXh0dXJlRmxvYXQgZmluYWwgOiBwdWJs
aWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIE9FU1RleHR1cmVGbG9hdChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKKyAgICBPRVNUZXh0dXJlRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVGbG9hdCgpOwogCiAgICAgdmlydHVh
bCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVhci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcAko
cmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVy
ZUZsb2F0TGluZWFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUZsb2F0
TGluZWFyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU1RleHR1cmVGbG9hdExp
bmVhcjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNv
bnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgJKHJl
dmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVG
bG9hdExpbmVhci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgT0VTVGV4dHVyZUZsb2F0TGluZWFyIGZpbmFsIDogcHVibGljIFdl
YkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBPRVNUZXh0dXJlRmxvYXRMaW5l
YXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgT0VTVGV4dHVyZUZsb2F0
TGluZWFyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5PRVNUZXh0
dXJlRmxvYXRMaW5lYXIoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkg
Y29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0
dXJlSGFsZkZsb2F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNUZXh0dXJlSGFs
ZkZsb2F0OjpPRVNUZXh0dXJlSGFsZkZsb2F0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCkKK09FU1RleHR1cmVIYWxmRmxvYXQ6Ok9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhh
bGZGbG9hdC5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9PRVNUZXh0dXJlSGFsZkZsb2F0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0IGZpbmFsIDog
cHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBPRVNUZXh0dXJlSGFsZkZsb2F0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIE9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVIYWxmRmxvYXQo
KTsKIAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGlu
ZWFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0
dXJlSGFsZkZsb2F0TGluZWFyLmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNUZXh0dXJl
SGFsZkZsb2F0TGluZWFyOjpPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI6Ok9FU1RleHR1cmVI
YWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oCShyZXZpc2lv
biAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZs
b2F0TGluZWFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyIGZpbmFsIDogcHVibGlj
IFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFy
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVIYWxm
RmxvYXRMaW5lYXIoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29u
c3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhB
cnJheU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
T0VTVmVydGV4QXJyYXlPYmplY3QuY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNWZXJ0ZXhBcnJh
eU9iamVjdDo6T0VTVmVydGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQorT0VTVmVydGV4QXJyYXlPYmplY3Q6Ok9FU1ZlcnRleEFycmF5T2JqZWN0KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0
KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0
ZXhBcnJheU9iamVjdC5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCAr
MzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogY2xhc3MgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3Mg
T0VTVmVydGV4QXJyYXlPYmplY3QgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVi
bGljOgotICAgIE9FU1ZlcnRleEFycmF5T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwor
ICAgIE9FU1ZlcnRleEFycmF5T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAg
ICB2aXJ0dWFsIH5PRVNWZXJ0ZXhBcnJheU9iamVjdCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNp
b25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShXRUJHTCkKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5n
Q29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZShwYXNzZWRDYW52YXMsIGF0dHJpYnV0ZXMpCit7Cit9CisKK1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZh
cywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwKKyAgICBHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKSA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UocGFzc2VkQ2FudmFzLCBjb250ZXh0LCBhdHRyaWJ1dGVzKQoreworfQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
X2gKKyNkZWZpbmUgV2ViR0wyUmVuZGVyaW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlIHsKK3B1YmxpYzoKKyAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVt
ZW50KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOworICAgIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOworICAgIHZpcnR1YWwgYm9vbCBpc1dl
YkdMMigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5k
ZXJpbmdDb250ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitbCisgICAgQ29uZGl0aW9uYWw9V0VCR0wsCisgICAgSlNDdXN0b21NYXJrRnVuY3Rp
b24sCisgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKK10gaW50ZXJmYWNlIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIHsKK307CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCShyZXZpc2lvbiAxNzg2MDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDE2ICszMCwxNiBAQAogI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCiAKICNpbmNs
dWRlICJXZWJHTENvbnRleHRHcm91cC5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTEJ1ZmZlcjo6Y3JlYXRl
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQorUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2Vi
R0xCdWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTEJ1ZmZlcihjdHgpKTsKIH0KIAotV2ViR0xCdWZmZXI6
OldlYkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQorV2ViR0xCdWZmZXI6Oldl
YkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKICAgICA6IFdlYkdMU2hh
cmVkT2JqZWN0KGN0eCkKICAgICAsIG1fdGFyZ2V0KDApCiAgICAgLCBtX2J5dGVMZW5ndGgoMCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAkocmV2aXNpb24g
MTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBXZWJHTEJ1ZmZlciBmaW5hbCA6IHB1
YmxpYyBXZWJHTFNoCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xCdWZmZXIoKTsKIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZShXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICBib29sIGFzc29jaWF0ZUJ1ZmZlckRhdGEoR0Mz
RHNpemVpcHRyIHNpemUpOwogICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyRGF0YShKU0M6OkFycmF5
QnVmZmVyKik7CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0V2ZXJCZWVu
Qm91bmQoKSBjb25zdCB7IHJldHVybiBvYmplY3QoKSAmJiBtX3RhcmdldDsgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgV2ViR0xCdWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgV2ViR0xC
dWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyhXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpXZWJH
TENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQp
CiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogICAgIGNvbnRleHQtPmFkZENvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCX0FNRCk7
CkBAIC01MCw3ICs1MCw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMQ29t
cHIKICAgICByZXR1cm4gV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQ05hbWU7CiB9CiAKLWJvb2wg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK2Jvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6c3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBl
eHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygp
OwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU1EX2NvbXByZXNzZWRfQVRD
X3RleHR1cmUiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEwIEBAIGNsYXNzIFdlYkdMVGV4dHVyZTsKIAogY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7
CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyhXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5XZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDKCk7CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJp
bmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qg
b3ZlcnJpZGU7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVBWUlRDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwCShyZXZpc2lvbiAxNzg2MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZS
VEMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgot
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTENvbXByZXNz
ZWRUZXh0dXJlUFZSVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQpCitXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OldlYkdMQ29t
cHJlc3NlZFRleHR1cmVQVlJUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQog
ICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKICAgICBjb250ZXh0LT5hZGRDb21wcmVz
c2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBW
MV9JTUcpOwpAQCAtNTIsNyArNTIsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBX
ZWJHTENvbXByCiAgICAgcmV0dXJuIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQ05hbWU7CiB9
CiAKLWJvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQorYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6
OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogewogICAgIEV4
dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmdl
dEV4dGVuc2lvbnMoKTsKICAgICByZXR1cm4gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0lNR190
ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaAkocmV2aXNp
b24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEwICszMiwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyBmaW5hbCA6
IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0
IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAgICAgdmlydHVhbCB+V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCk7CiAKLSAgICBzdGF0
aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJv
b2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIEV4
dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDLmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwx
MSArMzAsMTEgQEAKICNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgogCiAj
aW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUzNUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUzNUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiAg
ICAgY29udGV4dC0+YWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUKTsKQEAgLTUyLDcgKzUyLDcgQEAgV2ViR0xFeHRlbnNp
b246OkV4dGVuc2lvbk5hbWUgV2ViR0xDb21wcgogICAgIHJldHVybiBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUzNUQ05hbWU7CiB9CiAKLWJvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1
cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitib29sIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29u
dGV4dCkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5ncmFwaGlj
c0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CiAgICAgcmV0dXJuIGV4dGVuc2lvbnMtPnN1
cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9zM3RjIikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMz
VEMuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEw
IEBAIGNsYXNzIFdlYkdMVGV4dHVyZTsKIAogY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMz
VEMgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0
IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAg
IGV4cGxpY2l0IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQygpOwogCi0g
ICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0
YXRpYyBib29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2
aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwogfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5jcHAJ
KHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29u
dGV4dEdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUg
IldlYkdMQ29udGV4dEdyb3VwLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgot
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuaCIKICNpbmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC01MywxNiArNTMsMTYgQEAgV2ViR0xDb250ZXh0R3JvdXA6On5X
ZWJHTENvbnRleHRHcm91cCgpCiBHcmFwaGljc0NvbnRleHQzRCogV2ViR0xDb250ZXh0R3JvdXA6
OmdldEFHcmFwaGljc0NvbnRleHQzRCgpCiB7CiAgICAgQVNTRVJUKCFtX2NvbnRleHRzLmlzRW1w
dHkoKSk7Ci0gICAgSGFzaFNldDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPjo6aXRlcmF0b3IgaXQg
PSBtX2NvbnRleHRzLmJlZ2luKCk7CisgICAgSGFzaFNldDxXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOwogICAgIHJldHVybiAoKml0
KS0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKIH0KIAotdm9pZCBXZWJHTENvbnRleHRHcm91cDo6YWRk
Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIFdlYkdMQ29udGV4
dEdyb3VwOjphZGRDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7
CiAgICAgbV9jb250ZXh0cy5hZGQoY29udGV4dCk7CiB9CiAKLXZvaWQgV2ViR0xDb250ZXh0R3Jv
dXA6OnJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBX
ZWJHTENvbnRleHRHcm91cDo6cmVtb3ZlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KiBjb250ZXh0KQogewogICAgIC8vIFdlIG11c3QgY2FsbCBkZXRhY2hBbmRSZW1vdmVBbGxPYmpl
Y3RzIGJlZm9yZSByZW1vdmluZyB0aGUgbGFzdCBjb250ZXh0LgogICAgIGlmIChtX2NvbnRleHRz
LnNpemUoKSA9PSAxICYmIG1fY29udGV4dHMuY29udGFpbnMoY29udGV4dCkpCkBAIC04OSw5ICs4
OSw5IEBAIHZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OmRldGFjaEFuZFJlbW92ZUEKICAgICB9CiB9
CiAKLXZvaWQgV2ViR0xDb250ZXh0R3JvdXA6Omxvc2VDb250ZXh0R3JvdXAoV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6
Omxvc2VDb250ZXh0R3JvdXAoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRN
b2RlIG1vZGUpCiB7Ci0gICAgZm9yIChIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+Ojpp
dGVyYXRvciBpdCA9IG1fY29udGV4dHMuYmVnaW4oKTsgaXQgIT0gbV9jb250ZXh0cy5lbmQoKTsg
KytpdCkKKyAgICBmb3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSo+OjppdGVy
YXRvciBpdCA9IG1fY29udGV4dHMuYmVnaW4oKTsgaXQgIT0gbV9jb250ZXh0cy5lbmQoKTsgKytp
dCkKICAgICAgICAgKCppdCktPmxvc2VDb250ZXh0SW1wbChtb2RlKTsKIAogICAgIGRldGFjaEFu
ZFJlbW92ZUFsbE9iamVjdHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQ29udGV4dEdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0R3JvdXAuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogI2lmbmRlZiBXZWJHTENvbnRleHRHcm91cF9oCiAjZGVmaW5lIFdlYkdMQ29u
dGV4dEdyb3VwX2gKIAotI2luY2x1ZGUgPFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oPgorI2luY2x1
ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7CiBjbGFzcyBXZWJHTEV4dGVuc2lvbjsKIGNsYXNzIFdlYkdMU2hhcmVkT2JqZWN0
OwotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIApAQCAtNDUsMTUgKzQ1LDE1
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gY3Jl
YXRlKCk7CiAgICAgfldlYkdMQ29udGV4dEdyb3VwKCk7CiAKLSAgICB2b2lkIGFkZENvbnRleHQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7Ci0gICAgdm9pZCByZW1vdmVDb250ZXh0KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCopOworICAgIHZvaWQgYWRkQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UqKTsKIAogICAgIHZvaWQgYWRkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CiAgICAgdm9p
ZCByZW1vdmVPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKIAogICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBnZXRBR3JhcGhpY3NDb250ZXh0M0QoKTsKIAotICAgIHZvaWQgbG9zZUNvbnRleHRHcm91
cChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSk7CisgICAgdm9pZCBsb3Nl
Q29udGV4dEdyb3VwKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Okxvc3RDb250ZXh0TW9kZSk7
CiAKICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV2ViR0xPYmplY3Q7CkBAIC02Miw3ICs2
Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwog
Ci0gICAgSGFzaFNldDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPiBtX2NvbnRleHRzOworICAgIEhh
c2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSo+IG1fY29udGV4dHM7CiAgICAgSGFzaFNl
dDxXZWJHTFNoYXJlZE9iamVjdCo+IG1fZ3JvdXBPYmplY3RzOwogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwCShyZXZp
c2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTEgQEAKIAogI2luY2x1ZGUg
IldlYkdMQ29udGV4dE9iamVjdC5oIgogCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVdlYkdMQ29udGV4dE9iamVjdDo6V2ViR0xDb250ZXh0T2JqZWN0KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdMQ29udGV4dE9iamVjdDo6V2ViR0xDb250
ZXh0T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJH
TE9iamVjdChjb250ZXh0KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaAkocmV2aXNp
b24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCiAvLyBXZWJHTENvbnRleHRP
YmplY3QgdGhlIGJhc2UgY2xhc3MgZm9yIG9iamVjdHMgdGhhdCBhcmUgb3duZWQgYnkgYSBzcGVj
aWZpYwogLy8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LgpAQCAtMzksOSArMzksOSBAQCBjbGFzcyBX
ZWJHTENvbnRleHRPYmplY3QgOiBwdWJsaWMgV2ViR0xPCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
V2ViR0xDb250ZXh0T2JqZWN0KCk7CiAKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAKLSAgICB2aXJ0
dWFsIGJvb2wgdmFsaWRhdGUoY29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpIGNvbnN0IG92ZXJyaWRlCisgICAgdmlydHVhbCBib29s
IHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwgY29uc3QgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVy
biBjb250ZXh0ID09IG1fY29udGV4dDsKICAgICB9CkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRldGFjaENvbnRleHQoKTsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMQ29udGV4
dE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBXZWJHTENvbnRleHRPYmplY3Qo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdmlydHVhbCBib29sIGhhc0dyb3Vw
T3JDb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CkBAIC01OSw3ICs1OSw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBnZXRBR3JhcGhpY3NDb250ZXh0
M0QoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIG1fY29udGV4dDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBtX2NvbnRleHQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcAkocmV2aXNpb24g
MTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVy
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBAQAogCiAjaW5jbHVkZSAi
V2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgogCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVdlYkdMRGVidWdSZW5kZXJlckluZm86OldlYkdMRGVidWdSZW5kZXJl
ckluZm8oV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorV2ViR0xEZWJ1Z1JlbmRlcmVy
SW5mbzo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBj
b250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgJ
KHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVi
dWdSZW5kZXJlckluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFVOTUFTS0VEX1JFTkRFUkVSX1dFQkdMID0gMHg5MjQ2CiAgICAgfTsKIAotICAg
IGV4cGxpY2l0IFdlYkdMRGVidWdSZW5kZXJlckluZm8oV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7
CisgICAgZXhwbGljaXQgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbygpOwogCiAgICAg
dmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAJKHJl
dmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdT
aGFkZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDEyIEBACiAjaW5jbHVkZSAi
V2ViR0xEZWJ1Z1NoYWRlcnMuaCIKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1
ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuaCIKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVdlYkdMRGVidWdTaGFkZXJzOjpXZWJHTERlYnVnU2hhZGVycyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQpCitXZWJHTERlYnVnU2hhZGVyczo6V2ViR0xEZWJ1Z1NoYWRlcnMo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9u
KGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERl
YnVnU2hhZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRGVidWdTaGFkZXJzLmgJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2
LDcgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgV2ViR0xEZWJ1Z1NoYWRl
cnMgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0
IFdlYkdMRGVidWdTaGFkZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0
IFdlYkdMRGVidWdTaGFkZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0
dWFsIH5XZWJHTERlYnVnU2hhZGVycygpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdl
dE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRGVwdGhUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMRGVwdGhU
ZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
CitXZWJHTERlcHRoVGV4dHVyZTo6V2ViR0xEZXB0aFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmgJ
KHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVw
dGhUZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBXZWJHTERlcHRoVGV4dHVyZSBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4
dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xEZXB0aFRleHR1cmUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xEZXB0aFRleHR1cmUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldlYkdMRGVwdGhUZXh0dXJlKCk7
CiAKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoR3JhcGhpY3NDb250ZXh0M0QqKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuY3BwCShy
ZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdC
dWZmZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVdlYkdMRHJhd0J1ZmZlcnM6OldlYkdMRHJhd0J1ZmZlcnMoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQorV2ViR0xEcmF3QnVmZmVyczo6V2ViR0xEcmF3QnVmZmVy
cyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNp
b24oY29udGV4dCkKIHsKIH0KQEAgLTQ4LDE0ICs0OCwxNCBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0
ZW5zaW9uTmFtZSBXZWJHTERyYXdCCiAKICNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMDAwKQogCi1ib29sIFdlYkdMRHJhd0J1ZmZlcnM6
OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKQorYm9vbCBXZWJHTERyYXdCdWZmZXJz
OjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopCiB7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCiAjZWxzZQogCi1ib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBvcnRlZChXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogewogICAgIEV4dGVuc2lv
bnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVu
c2lvbnMoKTsKICAgICByZXR1cm4gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9kcmF3X2J1
ZmZlcnMiKQpAQCAtOTksNyArOTksNyBAQCB2b2lkIFdlYkdMRHJhd0J1ZmZlcnM6OmRyYXdCdWZm
ZXJzV0VCR0woCiB9CiAKIC8vIHN0YXRpYwotYm9vbCBXZWJHTERyYXdCdWZmZXJzOjpzYXRpc2Zp
ZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIHdlYmdsQ29udGV4dCkK
K2Jvb2wgV2ViR0xEcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogd2ViZ2xDb250ZXh0KQogewogICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0ID0gd2ViZ2xDb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5oCShyZXZp
c2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZm
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE3ICszMiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFdlYkdMRHJhd0J1ZmZlcnMgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNp
b24gewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMRHJhd0J1ZmZlcnMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xEcmF3QnVmZmVycygpOwogCi0gICAg
c3RhdGljIGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRp
YyBib29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0
dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBk
cmF3QnVmZmVyc1dFQkdMKGNvbnN0IFZlY3RvcjxHQzNEZW51bT4mIGJ1ZmZlcnMpOwogCiBwcml2
YXRlOgotICAgIHN0YXRpYyBib29sIHNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRpYyBib29sIHNhdGlzZmllc1dlYkdMUmVxdWlyZW1l
bnRzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lv
bi5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRXh0ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMRXh0ZW5zaW9uOjpXZWJHTEV4dGVuc2lvbihXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTEV4dGVuc2lvbjo6V2ViR0xFeHRlbnNpb24o
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250
ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVu
c2lvbi5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVm
IFdlYkdMRXh0ZW5zaW9uX2gKICNkZWZpbmUgV2ViR0xFeHRlbnNpb25faAogCi0jaW5jbHVkZSAi
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYwLDE0ICs2MCwxNCBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHJlZigpIHsgbV9jb250ZXh0LT5yZWYoKTsgfQogICAgIHZvaWQgZGVy
ZWYoKSB7IG1fY29udGV4dC0+ZGVyZWYoKTsgfQotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAogICAgIHZpcnR1YWwgfldl
YkdMRXh0ZW5zaW9uKCk7CiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25z
dCA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICBXZWJHTEV4dGVuc2lvbihXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqKTsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBXZWJH
TEV4dGVuc2lvbihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CisgICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSogbV9jb250ZXh0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5j
cHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVk
ZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNs
dWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTI2OSwxMiArMjY5LDEyIEBAIFdlYkdMRnJhbWVidWZmZXI6OldlYkdM
QXR0YWNobWVudDo6fldlYkcKIHsKIH0KIAotUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBX
ZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNz
UmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZShXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJH
TEZyYW1lYnVmZmVyKGN0eCkpOwogfQogCi1XZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVm
ZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQorV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xG
cmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCiAgICAgOiBXZWJHTENv
bnRleHRPYmplY3QoY3R4KQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZhbHNlKQogewpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkocmV2
aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgfldlYkdMRnJhbWVidWZmZXIoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdM
RnJhbWVidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSopOwogCiAgICAgdm9pZCBzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQzNE
ZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQsIFdlYkdMVGV4dHVyZSosIEdDM0Rp
bnQgbGV2ZWwpOwogICAgIHZvaWQgc2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0Mz
RGVudW0gYXR0YWNobWVudCwgV2ViR0xSZW5kZXJidWZmZXIqKTsKQEAgLTEwMSw3ICsxMDEsNyBA
QCBwdWJsaWM6CiAgICAgR0MzRGVudW0gZ2V0RHJhd0J1ZmZlcihHQzNEZW51bSk7CiAKIHByb3Rl
Y3RlZDoKLSAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAg
IFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNE
T2JqZWN0KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xMb3NlQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xMb3NlQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMSArMjksMTEgQEAKIAogI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKIAotI2luY2x1
ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTExvc2VDb250ZXh0OjpX
ZWJHTExvc2VDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdMTG9z
ZUNvbnRleHQ6OldlYkdMTG9zZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29u
dGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkBAIC00OSw3ICs0OSw3
IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMTG9zZUMKIAogdm9pZCBXZWJH
TExvc2VDb250ZXh0Ojpsb3NlQ29udGV4dCgpCiB7Ci0gICAgbV9jb250ZXh0LT5mb3JjZUxvc3RD
b250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6U3ludGhldGljTG9zdENvbnRleHQpOworICAg
IG1fY29udGV4dC0+Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpT
eW50aGV0aWNMb3N0Q29udGV4dCk7CiB9CiAKIHZvaWQgV2ViR0xMb3NlQ29udGV4dDo6cmVzdG9y
ZUNvbnRleHQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMTG9z
ZUNvbnRleHQuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xMb3NlQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTEgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7Citj
bGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCiBjbGFzcyBXZWJHTExvc2VDb250ZXh0
IGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBX
ZWJHTExvc2VDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0IFdl
YkdMTG9zZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwg
fldlYkdMTG9zZUNvbnRleHQoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1l
KCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xPYmplY3QuY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxMSBAQAog
I2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKICNpbmNsdWRlICJXZWJHTERlYnVn
U2hhZGVycy5oIgogI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xPYmplY3Q6OldlYkdMT2JqZWN0KFdl
YkdMUmVuZGVyaW5nQ29udGV4dCopCitXZWJHTE9iamVjdDo6V2ViR0xPYmplY3QoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSopCiAgICAgOiBtX29iamVjdCgwKQogICAgICwgbV9hdHRhY2htZW50
Q291bnQoMCkKICAgICAsIG1fZGVsZXRlZChmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xPYmplY3QuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xh
c3MgV2ViR0xDb250ZXh0R3JvdXA7Ci1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CitjbGFz
cyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCiBjbGFzcyBXZWJHTE9iamVjdCA6IHB1Ymxp
YyBSZWZDb3VudGVkPFdlYkdMT2JqZWN0PiB7CiBwdWJsaWM6CkBAIC01NiwxMCArNTYsMTAgQEAg
cHVibGljOgogICAgIGJvb2wgaXNEZWxldGVkKCkgeyByZXR1cm4gbV9kZWxldGVkOyB9CiAKICAg
ICAvLyBUcnVlIGlmIHRoaXMgb2JqZWN0IGJlbG9uZ3MgdG8gdGhlIGdyb3VwIG9yIGNvbnRleHQu
Ci0gICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwgY29u
c3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0KikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCB2
YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqKSBjb25zdCA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICBXZWJHTE9iamVjdChXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBXZWJHTE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKik7CiAKICAgICAvLyBzZXRPYmplY3Qgc2hvdWxkIGJlIG9ubHkgY2FsbGVkIG9uY2Ug
cmlnaHQgYWZ0ZXIgY3JlYXRpbmcgYSBXZWJHTE9iamVjdC4KICAgICB2b2lkIHNldE9iamVjdChQ
bGF0Zm9ybTNET2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xQcm9ncmFtLmNwcAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE2IEBA
CiAjaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCiAKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91
cC5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVm
UHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xQcm9ncmFtOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xQcm9ncmFtOjpjcmVhdGUo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogewogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViR0xQcm9ncmFtKGN0eCkpOwogfQogCi1XZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbShX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKK1dlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0
eCkKICAgICAsIG1fbGlua1N0YXR1cyhmYWxzZSkKICAgICAsIG1fbGlua0NvdW50KDApCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNpb24gMTc4
NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgV2ViR0xQcm9ncmFtIGZpbmFsIDogcHVi
bGljIFdlYkdMUwogcHVibGljOgogICAgIHZpcnR1YWwgfldlYkdMUHJvZ3JhbSgpOwogCi0gICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdW5zaWduZWQgbnVtQWN0aXZlQXR0cmliTG9j
YXRpb25zKCk7CiAgICAgR0MzRGludCBnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihHQzNEdWludCBp
bmRleCk7CkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGRldGFjaFNoYWRlcihX
ZWJHTFNoYWRlciopOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCopOworICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQz
RCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAxNzg2MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVm
ZmVyLmgiCiAKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgotI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVy
PiBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQor
UGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZShX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXZWJHTFJlbmRlcmJ1ZmZlcihjdHgpKTsKIH0KQEAgLTQ0LDcgKzQ0LDcgQEAgV2ViR0xSZW5k
ZXJidWZmZXI6On5XZWJHTFJlbmRlcmJ1ZmZlcigpCiAgICAgZGVsZXRlT2JqZWN0KDApOwogfQog
Ci1XZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjdHgpCitXZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAg
ICwgbV9pbnRlcm5hbEZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQpCiAgICAgLCBtX2lu
aXRpYWxpemVkKGZhbHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIGNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyIGZpbmFsIDogcHVibGljIFcKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmJ1ZmZlcigpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZvaWQgc2V0SW50ZXJuYWxGb3JtYXQoR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQpCiAgICAgewpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRIYXNFdmVyQmVlbkJvdW5kKCkgeyBtX2hhc0V2ZXJCZWVuQm91bmQgPSB0cnVlOyB9CiAK
IHByb3RlY3RlZDoKLSAgICBXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQq
KTsKKyAgICBXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBs
YXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODYw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYzMTMgKzI2LDIwIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0KICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaCIKIAotI2luY2x1ZGUgIkFOR0xFSW5zdGFuY2VkQXJyYXlzLmgiCi0jaW5jbHVkZSAi
Q2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkVYVEJsZW5kTWluTWF4LmgiCi0jaW5jbHVkZSAiRVhURnJhZ0RlcHRo
LmgiCi0jaW5jbHVkZSAiRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgotI2luY2x1ZGUgIkVYVFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgotI2luY2x1ZGUgIkVYVHNSR0IuaCIKLSNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiRnJh
bWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSW1hZ2VF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgot
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYWluRnJhbWUuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVpbnQuaCIKLSNpbmNs
dWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0
LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiT0VTVGV4
dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIK
LSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIldl
YkdMQWN0aXZlSW5mby5oIgotI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5j
bHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIldlYkdMQ29udGV4dEV2
ZW50LmgiCi0jaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNpbmNsdWRlICJXZWJHTERl
YnVnUmVuZGVyZXJJbmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKLSNpbmNs
dWRlICJXZWJHTERlcHRoVGV4dHVyZS5oIgotI2luY2x1ZGUgIldlYkdMRHJhd0J1ZmZlcnMuaCIK
LSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4
dC5oIgotI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVm
ZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKLSNpbmNsdWRlICJXZWJHTFNoYWRlclBy
ZWNpc2lvbkZvcm1hdC5oIgotI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgotI2luY2x1ZGUgIldl
YkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4K
LSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9VaW50MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IGRvdWJsZSBzZWNvbmRzQmV0d2VlblJl
c3RvcmVBdHRlbXB0cyA9IDEuMDsKLWNvbnN0IGludCBtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNv
bGUgPSAyNTY7Ci0KLW5hbWVzcGFjZSB7Ci0KLSAgICBjbGFzcyBTY29wZWREcmF3aW5nQnVmZmVy
QmluZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIo
RHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZm
ZXJCaW5kaW5nKQotICAgICAgICAgICAgOiBtX2RyYXdpbmdCdWZmZXIoZHJhd2luZ0J1ZmZlcikK
LSAgICAgICAgICAgICwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcoZnJhbWVidWZmZXJCaW5kaW5nKQot
ICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQg
KGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQotICAgICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5jb21taXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIH5TY29wZWREcmF3aW5nQnVmZmVy
QmluZGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVy
IGlmIG5lZWRlZAotICAgICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Ry
YXdpbmdCdWZmZXIpCi0gICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0g
ICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIERyYXdpbmdCdWZmZXIqIG1fZHJhd2lu
Z0J1ZmZlcjsKLSAgICAgICAgV2ViR0xGcmFtZWJ1ZmZlciogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7
Ci0gICAgfTsKLQotICAgIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0T3JaZXJvKFdlYkdMT2JqZWN0
KiBvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gb2JqZWN0ID8gb2JqZWN0LT5vYmplY3Qo
KSA6IDA7Ci0gICAgfQotCi0gICAgdm9pZCBjbGlwMUQoR0MzRGludCBzdGFydCwgR0MzRHNpemVp
IHJhbmdlLCBHQzNEc2l6ZWkgc291cmNlUmFuZ2UsIEdDM0RpbnQqIGNsaXBwZWRTdGFydCwgR0Mz
RHNpemVpKiBjbGlwcGVkUmFuZ2UpCi0gICAgewotICAgICAgICBBU1NFUlQoY2xpcHBlZFN0YXJ0
ICYmIGNsaXBwZWRSYW5nZSk7Ci0gICAgICAgIGlmIChzdGFydCA8IDApIHsKLSAgICAgICAgICAg
IHJhbmdlICs9IHN0YXJ0OwotICAgICAgICAgICAgc3RhcnQgPSAwOwotICAgICAgICB9Ci0gICAg
ICAgIEdDM0RpbnQgZW5kID0gc3RhcnQgKyByYW5nZTsKLSAgICAgICAgaWYgKGVuZCA+IHNvdXJj
ZVJhbmdlKQotICAgICAgICAgICAgcmFuZ2UgLT0gZW5kIC0gc291cmNlUmFuZ2U7Ci0gICAgICAg
ICpjbGlwcGVkU3RhcnQgPSBzdGFydDsKLSAgICAgICAgKmNsaXBwZWRSYW5nZSA9IHJhbmdlOwot
ICAgIH0KLQotICAgIC8vIFJldHVybnMgZmFsc2UgaWYgbm8gY2xpcHBpbmcgaXMgbmVjZXNzYXJ5
LCBpLmUuLCB4LCB5LCB3aWR0aCwgaGVpZ2h0IHN0YXkgdGhlIHNhbWUuCi0gICAgYm9vbCBjbGlw
MkQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc291cmNlV2lkdGgsIEdDM0RzaXplaSBzb3Vy
Y2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgR0MzRGludCogY2xpcHBlZFgsIEdDM0RpbnQqIGNs
aXBwZWRZLCBHQzNEc2l6ZWkqIGNsaXBwZWRXaWR0aCwgR0MzRHNpemVpKmNsaXBwZWRIZWlnaHQp
Ci0gICAgewotICAgICAgICBBU1NFUlQoY2xpcHBlZFggJiYgY2xpcHBlZFkgJiYgY2xpcHBlZFdp
ZHRoICYmIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICBjbGlwMUQoeCwgd2lkdGgsIHNvdXJjZVdp
ZHRoLCBjbGlwcGVkWCwgY2xpcHBlZFdpZHRoKTsKLSAgICAgICAgY2xpcDFEKHksIGhlaWdodCwg
c291cmNlSGVpZ2h0LCBjbGlwcGVkWSwgY2xpcHBlZEhlaWdodCk7Ci0gICAgICAgIHJldHVybiAo
KmNsaXBwZWRYICE9IHggfHwgKmNsaXBwZWRZICE9IHkgfHwgKmNsaXBwZWRXaWR0aCAhPSB3aWR0
aCB8fCAqY2xpcHBlZEhlaWdodCAhPSBoZWlnaHQpOwotICAgIH0KLQotICAgIEdDM0RpbnQgY2xh
bXAoR0MzRGludCB2YWx1ZSwgR0MzRGludCBtaW4sIEdDM0RpbnQgbWF4KQotICAgIHsKLSAgICAg
ICAgaWYgKHZhbHVlIDwgbWluKQotICAgICAgICAgICAgdmFsdWUgPSBtaW47Ci0gICAgICAgIGlm
ICh2YWx1ZSA+IG1heCkKLSAgICAgICAgICAgIHZhbHVlID0gbWF4OwotICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgYSBjaGFyYWN0ZXIgYmVsb25n
cyB0byB0aGUgQVNDSUkgc3Vic2V0IGFzIGRlZmluZWQgaW4KLSAgICAvLyBHTFNMIEVTIDEuMCBz
cGVjIHNlY3Rpb24gMy4xLgotICAgIGJvb2wgdmFsaWRhdGVDaGFyYWN0ZXIodW5zaWduZWQgY2hh
ciBjKQotICAgIHsKLSAgICAgICAgLy8gUHJpbnRpbmcgY2hhcmFjdGVycyBhcmUgdmFsaWQgZXhj
ZXB0ICIgJCBgIEAgXCAnIERFTC4KLSAgICAgICAgaWYgKGMgPj0gMzIgJiYgYyA8PSAxMjYKLSAg
ICAgICAgICAgICYmIGMgIT0gJyInICYmIGMgIT0gJyQnICYmIGMgIT0gJ2AnICYmIGMgIT0gJ0An
ICYmIGMgIT0gJ1xcJyAmJiBjICE9ICdcJycpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgLy8gSG9yaXpvbnRhbCB0YWIsIGxpbmUgZmVlZCwgdmVydGljYWwgdGFiLCBmb3JtIGZl
ZWQsIGNhcnJpYWdlIHJldHVybgotICAgICAgICAvLyBhcmUgYWxzbyB2YWxpZC4KLSAgICAgICAg
aWYgKGMgPj0gOSAmJiBjIDw9IDEzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGlzUHJlZml4UmVzZXJ2ZWQoY29uc3Qg
U3RyaW5nJiBuYW1lKQotICAgIHsKLSAgICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgiZ2xfIikg
fHwgbmFtZS5zdGFydHNXaXRoKCJ3ZWJnbF8iKSB8fCBuYW1lLnN0YXJ0c1dpdGgoIl93ZWJnbF8i
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gU3RyaXBzIGNvbW1lbnRzIGZyb20gc2hhZGVyIHRleHQuIFRoaXMgYWxsb3dz
IG5vbi1BU0NJSSBjaGFyYWN0ZXJzCi0gICAgLy8gdG8gYmUgdXNlZCBpbiBjb21tZW50cyB3aXRo
b3V0IHBvdGVudGlhbGx5IGJyZWFraW5nIE9wZW5HTAotICAgIC8vIGltcGxlbWVudGF0aW9ucyBu
b3QgZXhwZWN0aW5nIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgR0xTTCBFUyBzZXQuCi0gICAgY2xh
c3MgU3RyaXBDb21tZW50cyB7Ci0gICAgcHVibGljOgotICAgICAgICBTdHJpcENvbW1lbnRzKGNv
bnN0IFN0cmluZyYgc3RyKQotICAgICAgICAgICAgOiBtX3BhcnNlU3RhdGUoQmVnaW5uaW5nT2ZM
aW5lKQotICAgICAgICAgICAgLCBtX3NvdXJjZVN0cmluZyhzdHIpCi0gICAgICAgICAgICAsIG1f
bGVuZ3RoKHN0ci5sZW5ndGgoKSkKLSAgICAgICAgICAgICwgbV9wb3NpdGlvbigwKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBwYXJzZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHJl
c3VsdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmco
KTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBoYXNNb3JlQ2hhcmFj
dGVycygpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAobV9wb3NpdGlvbiA8
IG1fbGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcGFyc2UoKQotICAgICAgICB7
Ci0gICAgICAgICAgICB3aGlsZSAoaGFzTW9yZUNoYXJhY3RlcnMoKSkgewotICAgICAgICAgICAg
ICAgIHByb2Nlc3MoY3VycmVudCgpKTsKLSAgICAgICAgICAgICAgICAvLyBwcm9jZXNzKCkgbWln
aHQgYWR2YW5jZSB0aGUgcG9zaXRpb24uCi0gICAgICAgICAgICAgICAgaWYgKGhhc01vcmVDaGFy
YWN0ZXJzKCkpCi0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcHJvY2VzcyhVQ2hhcik7Ci0KLSAgICAgICAgYm9v
bCBwZWVrKFVDaGFyJiBjaGFyYWN0ZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX3Bvc2l0aW9uICsgMSA+PSBtX2xlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBjaGFyYWN0ZXIgPSBtX3NvdXJjZVN0cmluZ1ttX3Bvc2l0aW9uICsg
MV07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFVDaGFy
IGN1cnJlbnQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihtX3Bvc2l0aW9uIDwgbV9sZW5ndGgpOwotICAgICAgICAgICAgcmV0
dXJuIG1fc291cmNlU3RyaW5nW21fcG9zaXRpb25dOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBhZHZhbmNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgKyttX3Bvc2l0aW9uOwotICAgICAg
ICB9Ci0KLSAgICAgICAgYm9vbCBpc05ld2xpbmUoVUNoYXIgY2hhcmFjdGVyKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBEb24ndCBhdHRlbXB0IHRvIGNhbm9uaWNhbGl6ZSBuZXds
aW5lIHJlbGF0ZWQgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIHJldHVybiAoY2hhcmFjdGVyID09
ICdcbicgfHwgY2hhcmFjdGVyID09ICdccicpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBl
bWl0KFVDaGFyIGNoYXJhY3RlcikKLSAgICAgICAgewotICAgICAgICAgICAgbV9idWlsZGVyLmFw
cGVuZChjaGFyYWN0ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZW51bSBQYXJzZVN0YXRlIHsK
LSAgICAgICAgICAgIC8vIEhhdmUgbm90IHNlZW4gYW4gQVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hh
cmFjdGVyIHlldCBvbgotICAgICAgICAgICAgLy8gdGhpcyBsaW5lLiBQb3NzaWJsZSB0aGF0IHdl
IG1pZ2h0IHNlZSBhIHByZXByb2Nlc3NvcgotICAgICAgICAgICAgLy8gZGlyZWN0aXZlLgotICAg
ICAgICAgICAgQmVnaW5uaW5nT2ZMaW5lLAotCi0gICAgICAgICAgICAvLyBIYXZlIHNlZW4gYXQg
bGVhc3Qgb25lIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcgotICAgICAgICAgICAgLy8g
b24gdGhpcyBsaW5lLgotICAgICAgICAgICAgTWlkZGxlT2ZMaW5lLAotCi0gICAgICAgICAgICAv
LyBIYW5kbGluZyBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFBhc3NlcyB0aHJvdWdoIGFsbAot
ICAgICAgICAgICAgLy8gY2hhcmFjdGVycyB1cCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLiBEaXNh
YmxlcyBjb21tZW50Ci0gICAgICAgICAgICAvLyBwcm9jZXNzaW5nLgotICAgICAgICAgICAgSW5Q
cmVwcm9jZXNzb3JEaXJlY3RpdmUsCi0KLSAgICAgICAgICAgIC8vIEhhbmRsaW5nIGEgc2luZ2xl
LWxpbmUgY29tbWVudC4gVGhlIGNvbW1lbnQgdGV4dCBpcwotICAgICAgICAgICAgLy8gcmVwbGFj
ZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4KLSAgICAgICAgICAgIEluU2luZ2xlTGluZUNvbW1lbnQs
Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsaW5nIGEgbXVsdGktbGluZSBjb21tZW50LiBOZXdsaW5l
cyBhcmUgcGFzc2VkCi0gICAgICAgICAgICAvLyB0aHJvdWdoIHRvIHByZXNlcnZlIGxpbmUgbnVt
YmVycy4KLSAgICAgICAgICAgIEluTXVsdGlMaW5lQ29tbWVudAotICAgICAgICB9OwotCi0gICAg
ICAgIFBhcnNlU3RhdGUgbV9wYXJzZVN0YXRlOwotICAgICAgICBTdHJpbmcgbV9zb3VyY2VTdHJp
bmc7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgICAgICB1bnNpZ25lZCBtX3Bvc2l0
aW9uOwotICAgICAgICBTdHJpbmdCdWlsZGVyIG1fYnVpbGRlcjsKLSAgICB9OwotCi0gICAgdm9p
ZCBTdHJpcENvbW1lbnRzOjpwcm9jZXNzKFVDaGFyIGMpCi0gICAgewotICAgICAgICBpZiAoaXNO
ZXdsaW5lKGMpKSB7Ci0gICAgICAgICAgICAvLyBObyBtYXR0ZXIgd2hhdCBzdGF0ZSB3ZSBhcmUg
aW4sIHBhc3MgdGhyb3VnaCBuZXdsaW5lcwotICAgICAgICAgICAgLy8gc28gd2UgcHJlc2VydmUg
bGluZSBudW1iZXJzLgotICAgICAgICAgICAgZW1pdChjKTsKLQotICAgICAgICAgICAgaWYgKG1f
cGFyc2VTdGF0ZSAhPSBJbk11bHRpTGluZUNvbW1lbnQpCi0gICAgICAgICAgICAgICAgbV9wYXJz
ZVN0YXRlID0gQmVnaW5uaW5nT2ZMaW5lOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBVQ2hhciB0ZW1wID0gMDsKLSAgICAgICAgc3dpdGNoIChtX3BhcnNlU3Rh
dGUpIHsKLSAgICAgICAgY2FzZSBCZWdpbm5pbmdPZkxpbmU6Ci0gICAgICAgICAgICBpZiAoV1RG
Ojppc0FTQ0lJU3BhY2UoYykpIHsKLSAgICAgICAgICAgICAgICBlbWl0KGMpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoYyA9PSAnIycp
IHsKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBJblByZXByb2Nlc3NvckRpcmVjdGl2
ZTsKLSAgICAgICAgICAgICAgICBlbWl0KGMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIG5vcm1hbCBzdGF0ZSBh
bmQgcmUtaGFuZGxlIGNoYXJhY3Rlci4KLSAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRs
ZU9mTGluZTsKLSAgICAgICAgICAgIHByb2Nlc3MoYyk7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIE1pZGRsZU9mTGluZToKLSAgICAgICAgICAgIGlmIChjID09ICcvJyAmJiBw
ZWVrKHRlbXApKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gJy8nKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluU2luZ2xlTGluZUNvbW1lbnQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGVtaXQoJyAnKTsKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAodGVtcCA9PSAnKicpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9wYXJzZVN0
YXRlID0gSW5NdWx0aUxpbmVDb21tZW50OwotICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IHRo
ZSBjb21tZW50IHN0YXJ0IGluIGNhc2UgdGhlIHVzZXIgaGFzCi0gICAgICAgICAgICAgICAgICAg
IC8vIGFuIHVuY2xvc2VkIGNvbW1lbnQgYW5kIHdlIHdhbnQgdG8gbGF0ZXIKLSAgICAgICAgICAg
ICAgICAgICAgLy8gc2lnbmFsIGFuIGVycm9yLgotICAgICAgICAgICAgICAgICAgICBlbWl0KCcv
Jyk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoJyonKTsKLSAgICAgICAgICAgICAgICAgICAg
YWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEluUHJlcHJvY2Vzc29yRGlyZWN0aXZlOgotICAgICAgICAgICAg
Ly8gTm8gbWF0dGVyIHdoYXQgdGhlIGNoYXJhY3RlciBpcywganVzdCBwYXNzIGl0Ci0gICAgICAg
ICAgICAvLyB0aHJvdWdoLiBEbyBub3QgcGFyc2UgY29tbWVudHMgaW4gdGhpcyBzdGF0ZS4gVGhp
cwotICAgICAgICAgICAgLy8gbWlnaHQgbm90IGJlIHRoZSByaWdodCB0aGluZyB0byBkbyBsb25n
IHRlcm0sIGJ1dCBpdAotICAgICAgICAgICAgLy8gc2hvdWxkIGhhbmRsZSB0aGUgI2Vycm9yIHBy
ZXByb2Nlc3NvciBkaXJlY3RpdmUuCi0gICAgICAgICAgICBlbWl0KGMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJblNpbmdsZUxpbmVDb21tZW50OgotICAgICAgICAgICAg
Ly8gVGhlIG5ld2xpbmUgY29kZSBhdCB0aGUgdG9wIG9mIHRoaXMgZnVuY3Rpb24gdGFrZXMgY2Fy
ZQotICAgICAgICAgICAgLy8gb2YgcmVzZXR0aW5nIG91ciBzdGF0ZSB3aGVuIHdlIGdldCBvdXQg
b2YgdGhlCi0gICAgICAgICAgICAvLyBzaW5nbGUtbGluZSBjb21tZW50LiBTd2FsbG93IGFsbCBv
dGhlciBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbk11
bHRpTGluZUNvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnKicgJiYgcGVlayh0ZW1wKSAm
JiB0ZW1wID09ICcvJykgewotICAgICAgICAgICAgICAgIGVtaXQoJyonKTsKLSAgICAgICAgICAg
ICAgICBlbWl0KCcvJyk7Ci0gICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gTWlkZGxlT2ZM
aW5lOwotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gU3dhbGxvdyBhbGwgb3RoZXIgY2hhcmFj
dGVycy4gVW5jbGVhciB3aGV0aGVyIHdlIG1heQotICAgICAgICAgICAgLy8gd2FudCBvciBuZWVk
IHRvIGp1c3QgZW1pdCBhIHNwYWNlIHBlciBjaGFyYWN0ZXIgdG8gdHJ5Ci0gICAgICAgICAgICAv
LyB0byBwcmVzZXJ2ZSBjb2x1bW4gbnVtYmVycyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19IC8vIG5hbWVzcGFjZSBhbm9ueW1v
dXMKLQotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrIDogcHVibGljIEdy
YXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRM
b3N0Q2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjYikgOiBtX2NvbnRleHQoY2IpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0KCkgb3ZlcnJpZGUgeyBtX2NvbnRleHQt
PmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpSZWFsTG9zdENvbnRleHQp
OyB9Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrKCkge30K
LXByaXZhdGU6Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7Ci19OwotCi1j
bGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjayA6IHB1YmxpYyBH
cmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2sgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEVycm9yTWVzc2FnZUNhbGxiYWNrKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY2IpIDogbV9jb250
ZXh0KGNiKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgb25FcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBHQzNEaW50KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKG1fY29udGV4
dC0+bV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+
cHJpbnRHTEVycm9yVG9Db25zb2xlKG1lc3NhZ2UpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJH
TFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjaygpIHsgfQotcHJpdmF0ZToKLSAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKLX07Ci0KLXN0ZDo6dW5pcXVlX3B0
cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKEhU
TUxDYW52YXNFbGVtZW50KiBjYW52YXMsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqIGF0dHJzKQot
ewotICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNhbnZhcy0+ZG9jdW1lbnQoKTsKLSAgICBGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgLy8gVGhlIEZyYW1lTG9hZGVyQ2xpZW50IG1pZ2h0IGJsb2Nr
IGNyZWF0aW9uIG9mIGEgbmV3IFdlYkdMIGNvbnRleHQgZGVzcGl0ZSB0aGUgcGFnZSBzZXR0aW5n
czsgaW4KLSAgICAvLyBwYXJ0aWN1bGFyLCBpZiBXZWJHTCBjb250ZXh0cyB3ZXJlIGxvc3Qgb25l
IG9yIG1vcmUgdGltZXMgdmlhIHRoZSBHTF9BUkJfcm9idXN0bmVzcyBleHRlbnNpb24uCi0gICAg
aWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0dGluZ3Mo
KS53ZWJHTEVuYWJsZWQoKSkpIHsKLSAgICAgICAgY2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdM
Q29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJy
b3JFdmVudCwgZmFsc2UsIHRydWUsICJXZWIgcGFnZSB3YXMgbm90IGFsbG93ZWQgdG8gY3JlYXRl
IGEgV2ViR0wgY29udGV4dC4iKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
ICAgIGJvb2wgaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiA9IGZhbHNlOwotICAgIERvY3VtZW50
JiB0b3BEb2N1bWVudCA9IGRvY3VtZW50LnRvcERvY3VtZW50KCk7Ci0gICAgUGFnZSogcGFnZSA9
IHRvcERvY3VtZW50LnBhZ2UoKTsKLSAgICBpZiAocGFnZSAmJiAhdG9wRG9jdW1lbnQudXJsKCku
aXNMb2NhbEZpbGUoKSkgewotICAgICAgICBXZWJHTExvYWRQb2xpY3kgcG9saWN5ID0gcGFnZS0+
bWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkud2ViR0xQb2xpY3lGb3JVUkwodG9wRG9jdW1l
bnQudXJsKCkpOwotCi0gICAgICAgIGlmIChwb2xpY3kgPT0gV2ViR0xCbG9ja0NyZWF0aW9uKSB7
Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJUaGUgcG9saWN5IGZvciB0aGlzIFVSTCAoJXMpIGlz
IHRvIGJsb2NrIFdlYkdMLiIsIHRvcERvY3VtZW50LnVybCgpLmhvc3QoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHBvbGljeSA9PSBXZWJHTFBlbmRpbmdDcmVhdGlvbikgewotICAgICAgICAgICAgTE9HKFdlYkdM
LCAiV2ViR0wgcG9saWN5IGlzIHBlbmRpbmcuIE1heSBuZWVkIHRvIGJlIHJlc29sdmVkIGxhdGVy
LiIpOwotICAgICAgICAgICAgaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzID0gYXR0cnMgPyBhdHRycy0+YXR0cmlidXRlcygpIDogR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICBp
ZiAoIWZyYW1lLT5zZXR0aW5ncygpLm9wZW5HTE11bHRpc2FtcGxpbmdFbmFibGVkKCkpCi0gICAg
ICAgICAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgIH0KLQotICAgIGF0dHJp
YnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKLSAgICBhdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2Vz
ID0gZmFsc2U7Ci0gICAgYXR0cmlidXRlcy5wcmVmZXJEaXNjcmV0ZUdQVSA9IHRydWU7Ci0KLSAg
ICBpZiAoZnJhbWUtPnNldHRpbmdzKCkuZm9yY2VTb2Z0d2FyZVdlYkdMUmVuZGVyaW5nKCkpCi0g
ICAgICAgIGF0dHJpYnV0ZXMuZm9yY2VTb2Z0d2FyZVJlbmRlcmVyID0gdHJ1ZTsKLQotICAgIGlm
IChwYWdlKQotICAgICAgICBhdHRyaWJ1dGVzLmRldmljZVBpeGVsUmF0aW8gPSBwYWdlLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOwotCi0gICAgaWYgKGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsK
LSAgICAgICAgTE9HKFdlYkdMLCAiQ3JlYXRlIGEgV2ViR0wgY29udGV4dCB0aGF0IGxvb2tzIHJl
YWwsIGJ1dCB3aWxsIHJlcXVpcmUgYSBwb2xpY3kgcmVzb2x1dGlvbiBpZiB1c2VkLiIpOwotICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiByZW5kZXJpbmdDb250
ZXh0KG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1dGVzKSk7Ci0gICAg
ICAgIHJlbmRlcmluZ0NvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAgICAgICByZXR1cm4g
cmVuZGVyaW5nQ29udGV4dDsKLSAgICB9Ci0KLSAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0g
ZG9jdW1lbnQudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKTsKLSAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVz
LCBob3N0V2luZG93KSk7Ci0KLSAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKSB7Ci0gICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRl
eHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZl
bnQsIGZhbHNlLCB0cnVlLCAiQ291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBFeHRlbnNpb25zM0QqIGV4dGVu
c2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7Ci0gICAgaWYgKGV4dGVuc2lvbnMtPnN1
cHBvcnRzKCJHTF9FWFRfZGVidWdfbWFya2VyIikpCi0gICAgICAgIGV4dGVuc2lvbnMtPnB1c2hH
cm91cE1hcmtlckVYVCgiV2ViR0xSZW5kZXJpbmdDb250ZXh0Iik7Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiByZW5kZXJpbmdDb250ZXh0KG5ldyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQoY2FudmFzLCBjb250ZXh0LCBhdHRyaWJ1dGVzKSk7Ci0gICAgcmVuZGVy
aW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7Ci0KLSAgICByZXR1cm4gcmVuZGVyaW5nQ29u
dGV4dDsKLX0KLQogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQo
SFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cmlidXRlcykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2Fu
dmFzKQotICAgICwgQWN0aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCi0g
ICAgLCBtX2NvbnRleHQoMCkKLSAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQotICAgICwgbV9kaXNw
YXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KQotICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkK
LSAgICAsIG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXli
ZVJlc3RvcmVDb250ZXh0KQotICAgICwgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlKDApCi0gICAgLCBt
X2NvbnRleHRMb3N0KGZhbHNlKQotICAgICwgbV9jb250ZXh0TG9zdE1vZGUoU3ludGhldGljTG9z
dENvbnRleHQpCi0gICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAsIG1fc3ludGhl
c2l6ZWRFcnJvcnNUb0NvbnNvbGUodHJ1ZSkKLSAgICAsIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVB
bGxvd2VkKG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSkKLSAgICAsIG1faXNQZW5kaW5nUG9s
aWN5UmVzb2x1dGlvbih0cnVlKQotICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9u
KGZhbHNlKQorICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShwYXNzZWRDYW52YXMsIGF0
dHJpYnV0ZXMpCiB7CiB9CiAKIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQsCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
YXR0cmlidXRlcykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQot
ICAgICwgQWN0aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCi0gICAgLCBt
X2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQotICAgICwgbV9kaXNw
YXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KQotICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkK
LSAgICAsIG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXli
ZVJlc3RvcmVDb250ZXh0KQotICAgICwgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlKDQpCi0gICAgLCBt
X2NvbnRleHRMb3N0KGZhbHNlKQotICAgICwgbV9jb250ZXh0TG9zdE1vZGUoU3ludGhldGljTG9z
dENvbnRleHQpCi0gICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAsIG1fc3ludGhl
c2l6ZWRFcnJvcnNUb0NvbnNvbGUodHJ1ZSkKLSAgICAsIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVB
bGxvd2VkKG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSkKLSAgICAsIG1faXNQZW5kaW5nUG9s
aWN5UmVzb2x1dGlvbihmYWxzZSkKLSAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlv
bihmYWxzZSkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLSAgICBtX2NvbnRleHRHcm91cCA9
IFdlYkdMQ29udGV4dEdyb3VwOjpjcmVhdGUoKTsKLSAgICBtX2NvbnRleHRHcm91cC0+YWRkQ29u
dGV4dCh0aGlzKTsKLQotICAgIG1fbWF4Vmlld3BvcnREaW1zWzBdID0gbV9tYXhWaWV3cG9ydERp
bXNbMV0gPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9WSUVXUE9SVF9ESU1TLCBtX21heFZpZXdwb3J0RGltcyk7Ci0KLSAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLQotICAgIHNldHVw
RmxhZ3MoKTsKLSAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQotewotICAgIEFTU0VSVCghbV9j
b250ZXh0TG9zdCk7Ci0gICAgbV9uZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgbV9tYXJrZWRDYW52
YXNEaXJ0eSA9IGZhbHNlOwotICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQgPSAwOwotICAgIG1fcGFj
a0FsaWdubWVudCA9IDQ7Ci0gICAgbV91bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1fdW5wYWNr
RmxpcFkgPSBmYWxzZTsKLSAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKLSAg
ICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dT
RVJfREVGQVVMVF9XRUJHTDsKLSAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOwotICAgIG1fY3Vy
cmVudFByb2dyYW0gPSAwOwotICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKLSAgICBtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmcgPSAwOwotICAgIG1fZGVwdGhNYXNrID0gdHJ1ZTsKLSAgICBtX3N0
ZW5jaWxFbmFibGVkID0gZmFsc2U7Ci0gICAgbV9zdGVuY2lsTWFzayA9IDB4RkZGRkZGRkY7Ci0g
ICAgbV9zdGVuY2lsTWFza0JhY2sgPSAweEZGRkZGRkZGOwotICAgIG1fc3RlbmNpbEZ1bmNSZWYg
PSAwOwotICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gMDsKLSAgICBtX3N0ZW5jaWxGdW5jTWFz
ayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gMHhGRkZGRkZGRjsK
LSAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOwotICAgIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVB
bGxvd2VkID0gbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlOwotICAgIAotICAgIG1fY2xlYXJD
b2xvclswXSA9IG1fY2xlYXJDb2xvclsxXSA9IG1fY2xlYXJDb2xvclsyXSA9IG1fY2xlYXJDb2xv
clszXSA9IDA7Ci0gICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgIG1fY2xlYXJEZXB0
aCA9IDE7Ci0gICAgbV9jbGVhclN0ZW5jaWwgPSAwOwotICAgIG1fY29sb3JNYXNrWzBdID0gbV9j
b2xvck1hc2tbMV0gPSBtX2NvbG9yTWFza1syXSA9IG1fY29sb3JNYXNrWzNdID0gdHJ1ZTsKLQot
ICAgIEdDM0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVf
SU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBtX3RleHR1
cmVVbml0cy5jbGVhcigpOwotICAgIG1fdGV4dHVyZVVuaXRzLnJlc2l6ZShudW1Db21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzKTsKLQotICAgIEdDM0RpbnQgbnVtVmVydGV4QXR0cmlicyA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9B
VFRSSUJTLCAmbnVtVmVydGV4QXR0cmlicyk7Ci0gICAgbV9tYXhWZXJ0ZXhBdHRyaWJzID0gbnVt
VmVydGV4QXR0cmliczsKLSAgICAKLSAgICBtX21heFRleHR1cmVTaXplID0gMDsKLSAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAm
bV9tYXhUZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6
OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpOwot
ICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbV9tYXhD
dWJlTWFwVGV4dHVyZVNpemUpOwotICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCA9IFdlYkdM
VGV4dHVyZTo6Y29tcHV0ZUxldmVsQ291bnQobV9tYXhDdWJlTWFwVGV4dHVyZVNpemUsIG1fbWF4
Q3ViZU1hcFRleHR1cmVTaXplKTsKLSAgICBtX21heFJlbmRlcmJ1ZmZlclNpemUgPSAwOwotICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZG
RVJfU0laRSwgJm1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7Ci0KLSAgICAvLyBUaGVzZSB0d28gdmFs
dWVzIGZyb20gRVhUX2RyYXdfYnVmZmVycyBhcmUgbGF6aWx5IHF1ZXJpZWQuCi0gICAgbV9tYXhE
cmF3QnVmZmVycyA9IDA7Ci0gICAgbV9tYXhDb2xvckF0dGFjaG1lbnRzID0gMDsKLQotICAgIG1f
YmFja0RyYXdCdWZmZXIgPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzsKLSAgICBtX2RyYXdCdWZm
ZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkID0gZmFsc2U7Ci0gICAgbV9kcmF3QnVmZmVyc1N1
cHBvcnRlZCA9IGZhbHNlOwotCi0gICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBXZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTOjpjcmVhdGUodGhpcywgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUzo6VmFvVHlwZURlZmF1bHQpOwotICAgIGFkZENvbnRleHRPYmplY3QobV9kZWZhdWx0VmVy
dGV4QXJyYXlPYmplY3QuZ2V0KCkpOwotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1f
ZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0OwotICAgIAotICAgIG1fdmVydGV4QXR0cmliVmFsdWUu
cmVzaXplKG1fbWF4VmVydGV4QXR0cmlicyk7Ci0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0
KCkpCi0gICAgICAgIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwotICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwotCi0gICAg
SW50U2l6ZSBjYW52YXNTaXplID0gY2xhbXBlZENhbnZhc1NpemUoKTsKLSAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOwot
Ci0gICAgbV9jb250ZXh0LT5yZXNoYXBlKGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXNTaXplLndpZHRo
KCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwotICAgIG1fY29udGV4dC0+c2Npc3NvcigwLCAwLCBj
YW52YXNTaXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwotCi0gICAgbV9jb250ZXh0
LT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdD
b250ZXh0TG9zdENhbGxiYWNrPih0aGlzKSk7Ci0gICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3Nh
Z2VDYWxsYmFjayhzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVz
c2FnZUNhbGxiYWNrPih0aGlzKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
ZXR1cEZsYWdzKCkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLQotICAgIGlmIChQYWdlKiBw
YWdlID0gY2FudmFzKCktPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICBtX3N5bnRoZXNpemVk
RXJyb3JzVG9Db25zb2xlID0gcGFnZS0+c2V0dGluZ3MoKS53ZWJHTEVycm9yc1RvQ29uc29sZUVu
YWJsZWQoKTsKLQotICAgIG1faXNHTEVTMkNvbXBsaWFudCA9IG1fY29udGV4dC0+aXNHTEVTMkNv
bXBsaWFudCgpOwotICAgIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcyA9
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3N0cmlj
dF9hdHRyaWJzIik7Ci0gICAgbV9pc1Jlc291cmNlU2FmZSA9IG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUiKTsKLSAgICBpZiAo
bV9pc0dMRVMyQ29tcGxpYW50KSB7Ci0gICAgICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfbnBvdCIp
OwotICAgICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIik7
Ci0gICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICB9
Ci0gICAgbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcm9idXN0bmVzcyIpOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNvbnN0Ci17Ci0gICAg
aWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJl
dHVybiBwYWdlLT5zZXR0aW5ncygpLnByaXZpbGVnZWRXZWJHTEV4dGVuc2lvbnNFbmFibGVkKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRk
Q29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQotewotICAgIGlmICghbV9j
b21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KSkKLSAgICAgICAgbV9jb21w
cmVzc2VkVGV4dHVyZUZvcm1hdHMuYXBwZW5kKGZvcm1hdCk7Ci19Ci0KLVdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6fldlYkdMUmVuZGVyaW5nQ29udGV4dCgpCi17Ci0gICAgLy8gUmVtb3ZlIGFsbCBy
ZWZlcmVuY2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVu
Y2UKLSAgICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVmb3JlIHRoZSBsYXN0IGNvbnRleHQgaXMg
cmVtb3ZlZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgotICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9
IG51bGxwdHI7Ci0gICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBudWxscHRyOwotICAg
IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRQcm9ncmFtID0gbnVsbHB0cjsKLSAgICBt
X2ZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxwdHI7Ci0gICAgbV9yZW5kZXJidWZmZXJCaW5kaW5n
ID0gbnVsbHB0cjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmluZGlu
ZyA9IG51bGxwdHI7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmlu
ZGluZyA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9ibGFja1RleHR1cmUyRCA9IG51bGxwdHI7
Ci0gICAgbV9ibGFja1RleHR1cmVDdWJlTWFwID0gbnVsbHB0cjsKLQotICAgIGlmICghbV9pc1Bl
bmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVj
dHMoKTsKLSAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgICAgIG1fY29u
dGV4dEdyb3VwLT5yZW1vdmVDb250ZXh0KHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgpCi17Ci0gICAgaWYgKG1f
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhl
IGRyYXdpbmcgYnVmZmVyIGhvbGRzIGEgY29udGV4dCByZWZlcmVuY2UuIEl0IG11c3QgYWxzbyBi
ZSBkZXN0cm95ZWQKLSAgICAvLyBpbiBvcmRlciBmb3IgdGhlIGNvbnRleHQgdG8gYmUgcmVsZWFz
ZWQuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLmNs
ZWFyKCk7Ci0KLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c2V0Q29u
dGV4dExvc3RDYWxsYmFjayhudWxscHRyKTsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1l
c3NhZ2VDYWxsYmFjayhudWxscHRyKTsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7Ci0gICAg
fQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkK
LXsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29udGV4dC0+bWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsKLQot
ICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7Ci0gICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBj
YW52YXMoKS0+cmVuZGVyQm94KCk7Ci0gICAgaWYgKGlzQWNjZWxlcmF0ZWQoKSAmJiByZW5kZXJC
b3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAg
bV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7Ci0gICAgICAgIGNhbnZhcygpLT5jbGVhckNvcGll
ZEltYWdlKCk7Ci0gICAgICAgIHJlbmRlckJveC0+Y29udGVudENoYW5nZWQoQ2FudmFzQ2hhbmdl
ZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KSB7Ci0g
ICAgICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGNhbnZh
cygpLT5kaWREcmF3KEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCBjbGFtcGVkQ2FudmFzU2l6
ZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjbGVhcklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1f
Y29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFyZWQKLSAgICAgICAgfHwg
bV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFzayAmJiBtX2ZyYW1lYnVm
ZmVyQmluZGluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxXZWJHTENv
bnRleHRBdHRyaWJ1dGVzPiBjb250ZXh0QXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVz
KCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBj
bGVhciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCi0gICAgYm9vbCBjb21iaW5l
ZENsZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKLQotICAgIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpZiAoY29tYmluZWRD
bGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKLSAg
ICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9y
WzBdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzFdID8g
bV9jbGVhckNvbG9yWzFdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29s
b3JNYXNrWzJdID8gbV9jbGVhckNvbG9yWzJdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY29sb3JNYXNrWzNdID8gbV9jbGVhckNvbG9yWzNdIDogMCk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgbV9jb250ZXh0
LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgR0MzRGJpdGZpZWxkIGNs
ZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIGlmIChj
b250ZXh0QXR0cmlidXRlcy0+ZGVwdGgoKSkgewotICAgICAgICBpZiAoIWNvbWJpbmVkQ2xlYXIg
fHwgIW1fZGVwdGhNYXNrIHx8ICEobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZG
RVJfQklUKSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxLjBmKTsKLSAgICAg
ICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOwotICAg
ICAgICBtX2NvbnRleHQtPmRlcHRoTWFzayh0cnVlKTsKLSAgICB9Ci0gICAgaWYgKGNvbnRleHRB
dHRyaWJ1dGVzLT5zdGVuY2lsKCkpIHsKLSAgICAgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1h
c2sgJiBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkKLSAgICAgICAgICAg
IG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsICYgbV9zdGVuY2lsTWFzayk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOwot
ICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJ
VDsKLSAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4
dDNEOjpGUk9OVCwgMHhGRkZGRkZGRik7Ci0gICAgfQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y2xlYXJGcmFtZWJ1ZmZlcnMoY2xlYXJNYXNrKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCAwKTsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOwotICAgIH0KLQot
ICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcpCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7
Ci0gICAgbV9sYXllckNsZWFyZWQgPSB0cnVlOwotCi0gICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVBZnRlckNsZWFy
KCkKLXsKLSAgICAvLyBSZXN0b3JlIHRoZSBzdGF0ZSB0aGF0IHRoZSBjb250ZXh0IHNldC4KLSAg
ICBpZiAobV9zY2lzc29yRW5hYmxlZCkKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1f
Y2xlYXJDb2xvclswXSwgbV9jbGVhckNvbG9yWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NsZWFyQ29sb3JbMl0sIG1fY2xlYXJDb2xvclszXSk7Ci0gICAgbV9jb250ZXh0LT5jb2xv
ck1hc2sobV9jb2xvck1hc2tbMF0sIG1fY29sb3JNYXNrWzFdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY29sb3JNYXNrWzJdLCBtX2NvbG9yTWFza1szXSk7Ci0gICAgbV9jb250ZXh0LT5j
bGVhckRlcHRoKG1fY2xlYXJEZXB0aCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwobV9j
bGVhclN0ZW5jaWwpOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGlj
c0NvbnRleHQzRDo6RlJPTlQsIG1fc3RlbmNpbE1hc2spOwotICAgIG1fY29udGV4dC0+ZGVwdGhN
YXNrKG1fZGVwdGhNYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtM
YXllckNvbXBvc2l0ZWQoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoY2FudmFzKCktPmRvY3VtZW50KCkucHJpbnRpbmcoKSkKLSAgICAgICAg
Y2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOwotCi0gICAgLy8gVW50aWwgdGhlIGNh
bnZhcyBpcyB3cml0dGVuIHRvIGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhlIGNsZWFyIHRoYXQKLSAg
ICAvLyBoYXBwZW5lZCBhZnRlciBpdCB3YXMgY29tcG9zaXRlZCBzaG91bGQgYmUgaWdub3JlZCBi
eSB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAobV9jb250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAm
JiAhbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcikgewotICAgICAgICBtX2NvbnRl
eHQtPnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhjYW52YXMoKS0+YnVmZmVyKCkpOwot
Ci0gICAgICAgIGNhbnZhcygpLT5tYWtlUHJlc2VudGF0aW9uQ29weSgpOwotICAgIH0gZWxzZQot
ICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgY2xlYXJJZkNv
bXBvc2l0ZWQoKTsKLQotICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNs
ZWFyZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdl
KCk7Ci0gICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotCi0gICAgaWYgKG1fZHJhd2lu
Z0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKLSAgICBtX2NvbnRl
eHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSwgbV9k
cmF3aW5nQnVmZmVyLmdldCgpKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8o
bV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPEltYWdlRGF0
YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0
YSgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIFJlZlB0cjxJbWFn
ZURhdGE+IGltYWdlRGF0YSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFn
ZURhdGEobV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
IHsKLSAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmpl
Y3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlt
YWdlRGF0YTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoaXMgaXMgYW4gYXBwcm94aW1hdGlvbiBiZWNhdXNl
IGF0IFdlYkdMUmVuZGVyaW5nQ29udGV4dCBsZXZlbCB3ZSBkb24ndAotICAgIC8vIGtub3cgaWYg
dGhlIHVuZGVybHlpbmcgRkJPIHVzZXMgdGV4dHVyZXMgb3IgcmVuZGVyYnVmZmVycy4KLSAgICBH
QzNEaW50IG1heFNpemUgPSBzdGQ6Om1pbihtX21heFRleHR1cmVTaXplLCBtX21heFJlbmRlcmJ1
ZmZlclNpemUpOwotICAgIC8vIExpbWl0IGRyYXdpbmcgYnVmZmVyIHNpemUgdG8gNGsgdG8gYXZv
aWQgbWVtb3J5IGV4aGF1c3Rpb24uCi0gICAgY29uc3QgaW50IHNpemVVcHBlckxpbWl0ID0gNDA5
NjsKLSAgICBtYXhTaXplID0gc3RkOjptaW4obWF4U2l6ZSwgc2l6ZVVwcGVyTGltaXQpOwotICAg
IEdDM0RpbnQgbWF4V2lkdGggPSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdwb3J0RGltc1sw
XSk7Ci0gICAgR0MzRGludCBtYXhIZWlnaHQgPSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdw
b3J0RGltc1sxXSk7Ci0gICAgd2lkdGggPSBjbGFtcCh3aWR0aCwgMSwgbWF4V2lkdGgpOwotICAg
IGhlaWdodCA9IGNsYW1wKGhlaWdodCwgMSwgbWF4SGVpZ2h0KTsKLQotICAgIGlmIChtX25lZWRz
VXBkYXRlKSB7Ci0gICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRl
ckJveCgpOwotICAgICAgICBpZiAocmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZygpKQotICAgICAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChD
YW52YXNDaGFuZ2VkKTsKLSAgICAgICAgbV9uZWVkc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0
aGUgbmV3bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgotICAgIC8v
IGNsZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KLSAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwotCi0g
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
b2JqZWN0T3JaZXJvKG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUy
REJpbmRpbmcuZ2V0KCkpKTsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fcmVuZGVyYnVmZmVyQmlu
ZGluZy5nZXQoKSkpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2Jq
ZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci19Ci0KLWludCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndp
ZHRoKCk7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLndpZHRoKCk7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZm
ZXJIZWlnaHQoKSBjb25zdAotewotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgIHJl
dHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKLQotICAgIHJldHVybiBtX2Nv
bnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXVuc2ln
bmVkIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUp
Ci17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllU
RToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEYnl0ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdWJ5dGUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKEdDM0RzaG9ydCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVzaG9ydCk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RpbnQpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihHQzNEdWludCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoR0MzRGZsb2F0KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3Rp
dmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUw
ID49IG1fdGV4dHVyZVVuaXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0dXJl
IHVuaXQgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9hY3Rp
dmVUZXh0dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7Ci0g
ICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotCi0gICAgaWYgKG1fZHJhd2lu
Z0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRBY3RpdmVUZXh0dXJlVW5pdCh0
ZXh0dXJlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcihX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgcHJvZ3JhbSkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImF0dGFjaFNoYWRlciIsIHNoYWRlcikpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIXByb2dyYW0tPmF0dGFjaFNoYWRlcihzaGFkZXIpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImF0dGFjaFNoYWRlciIsICJzaGFkZXIgYXR0YWNobWVudCBhbHJlYWR5IGhhcyBzaGFkZXIi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihv
YmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXIt
Pm9uQXR0YWNoZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRy
aWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVj
dCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiYmluZEF0dHJpYkxvY2F0
aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChu
YW1lKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJiaW5kQXR0cmliTG9jYXRpb24iLCAicmVzZXJ2ZWQgcHJlZml4Iik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0
cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlv
bihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKLX0KLQotYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCwgYm9vbCYgZGVsZXRlZCkKLXsKLSAgICBkZWxldGVk
ID0gZmFsc2U7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChvYmplY3QpIHsKLSAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlk
YXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJv
YmplY3Qgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlZCA9ICFvYmplY3QtPm9iamVjdCgpOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRC
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBp
ZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kQnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBidWZmZXIgPSAwOwot
ICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAmJiBidWZmZXItPmdldFRhcmdl
dCgpICE9IHRhcmdldCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQnVmZmVyIiwgImJ1ZmZlcnMgY2FuIG5vdCBi
ZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKLSAgICAg
ICAgbV9ib3VuZEFycmF5QnVmZmVyID0gYnVmZmVyOwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+c2V0RWxlbWVudEFycmF5QnVmZmVyKGJ1ZmZlcik7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJiaW5kQnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8o
YnVmZmVyKSk7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgYnVmZmVyLT5zZXRUYXJnZXQodGFy
Z2V0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYg
KCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVk
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBidWZmZXIgPSAw
OwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJiaW5kRnJhbWVidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGlu
ZyhvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBpZiAoIW1f
ZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBJbnN0
ZWFkIG9mIGJpbmRpbmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCi0gICAgICAgIG1f
ZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NvbnRleHQtPmJp
bmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKLSAgICBpZiAoYnVm
ZmVyKQotICAgICAgICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKLSAgICBhcHBseVN0
ZW5jaWxUZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVy
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRl
bGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFJlbmRlcmJ1ZmZlciIs
IHJlbmRlckJ1ZmZlciwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRl
ZCkKLSAgICAgICAgcmVuZGVyQnVmZmVyID0gMDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRSZW5kZXJidWZmZXIiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3JlbmRlcmJ1ZmZlckJp
bmRpbmcgPSByZW5kZXJCdWZmZXI7Ci0gICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHRh
cmdldCwgb2JqZWN0T3JaZXJvKHJlbmRlckJ1ZmZlcikpOwotICAgIGlmIChyZW5kZXJCdWZmZXIp
Ci0gICAgICAgIHJlbmRlckJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJH
TFRleHR1cmUqIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQo
ImJpbmRUZXh0dXJlIiwgdGV4dHVyZSwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoZGVsZXRlZCkKLSAgICAgICAgdGV4dHVyZSA9IDA7Ci0gICAgaWYgKHRleHR1cmUgJiYgdGV4
dHVyZS0+Z2V0VGFyZ2V0KCkgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImJpbmRUZXh0dXJlIiwgInRleHR1cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRp
cGxlIHRhcmdldHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHQzNEaW50IG1heExl
dmVsID0gMDsKLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
KSB7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUy
REJpbmRpbmcgPSB0ZXh0dXJlOwotICAgICAgICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVs
OwotCi0gICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIgJiYgIW1fYWN0aXZlVGV4dHVyZVVuaXQp
Ci0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmcob2JqZWN0
T3JaZXJvKHRleHR1cmUpKTsKLQotICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0
aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IHRleHR1cmU7Ci0gICAgICAg
IG1heExldmVsID0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJi
aW5kVGV4dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkp
OwotICAgIGlmICh0ZXh0dXJlKQotICAgICAgICB0ZXh0dXJlLT5zZXRUYXJnZXQodGFyZ2V0LCBt
YXhMZXZlbCk7Ci0KLSAgICAvLyBOb3RlOiBwcmV2aW91c2x5IHdlIHVzZWQgdG8gYXV0b21hdGlj
YWxseSBzZXQgdGhlIFRFWFRVUkVfV1JBUF9SCi0gICAgLy8gcmVwZWF0IG1vZGUgdG8gQ0xBTVBf
VE9fRURHRSBmb3IgY3ViZSBtYXAgdGV4dHVyZXMsIGJlY2F1c2UgT3BlbkdMCi0gICAgLy8gRVMg
Mi4wIGRvZXNuJ3QgZXhwb3NlIHRoaXMgZmxhZyAoYSBidWcgaW4gdGhlIHNwZWNpZmljYXRpb24p
IGFuZAotICAgIC8vIG90aGVyd2lzZSB0aGUgYXBwbGljYXRpb24gaGFzIG5vIGNvbnRyb2wgb3Zl
ciB0aGUgc2VhbXMgaW4gdGhpcwotICAgIC8vIGRpbWVuc2lvbi4gSG93ZXZlciwgaXQgYXBwZWFy
cyB0aGF0IHN1cHBvcnRpbmcgdGhpcyBwcm9wZXJseSBvbiBhbGwKLSAgICAvLyBwbGF0Zm9ybXMg
aXMgZmFpcmx5IGludm9sdmVkICh3aWxsIHJlcXVpcmUgYSBIYXNoTWFwIGZyb20gdGV4dHVyZSBJ
RAotICAgIC8vIGluIGFsbCBwb3J0cyksIGFuZCB3ZSBoYXZlIG5vdCBoYWQgYW55IGNvbXBsYWlu
dHMsIHNvIHRoZSBsb2dpYyBoYXMKLSAgICAvLyBiZWVuIHJlbW92ZWQuCi19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBn
cmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVu
ZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRp
b24iLCBtb2RlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlv
bihtb2RlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25T
ZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVu
ZEVxdWF0aW9uIiwgbW9kZVJHQikgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVh
dGlvbiIsIG1vZGVBbHBoYSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5k
RXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotfQotCi0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZh
Y3RvcikKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJs
ZW5kRnVuY0ZhY3RvcnMoImJsZW5kRnVuYyIsIHNmYWN0b3IsIGRmYWN0b3IpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBz
cmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFs
cGhhKQotewotICAgIC8vIE5vdGU6IEFscGhhIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgcmVzdHJp
Y3Rpb25zIGFzIFJHQi4KLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5kRnVuYyIsIHNyY1JHQiwgZHN0UkdCKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RS
R0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUsIEdDM0RlbnVtIHVz
YWdlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTEJ1
ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIs
IHRhcmdldCwgdXNhZ2UpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKHNpemUgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplIDwgMCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmICghc2l6ZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA9
PSAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVk
T25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0
ZUJ1ZmZlckRhdGEoc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihzaXplKSkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
YnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxH
QzNEc2l6ZWlwdHI+KHNpemUpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVu
Y3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0
IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEo
KTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTEJ1ZmZlciogYnVmZmVy
ID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNh
Z2UpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFkYXRhKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiYnVmZmVyRGF0YSIsICJubyBkYXRhIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKLSAgICAg
ICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVm
ZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3Ro
KCksIGRhdGEtPmRhdGEoKSwgdXNhZ2UpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJEYXRhIGZ1bmN0
aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0
aGlua3MgaXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7
Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNE
ZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1
c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRhdGEp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJEYXRhIiwgIm5vIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAg
ICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJi
dWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9y
TGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5n
dGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSwgdXNhZ2UpOwotICAgIGlmIChtX2NvbnRleHQtPm1v
dmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJE
YXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUg
ZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZm
ZXJEYXRhKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVy
U3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyKiBk
YXRhLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTEJ1
ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0
YSIsIHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKLSAgICBpZiAoIWJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChvZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVy
U3ViRGF0YSIsICJvZmZzZXQgPCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KCFkYXRhKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRP
ZkJvdW5kc0FjY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZl
clN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YSkpIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5
bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQs
IHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0
YS0+ZGF0YSgpKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyU3ViRGF0YSBmdW5jdGlvbiBmYWlsZWQu
IFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRv
ZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwotICAgIH0KLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2
YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0LCBHcmFw
aGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNl
dCA8IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWRhdGEpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMo
KSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0aWNf
Y2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRh
IiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0Mz
RGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygp
KTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkg
ewotICAgICAgICAvLyBUaGUgYnVmZmVyU3ViRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhl
IGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAg
ICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwotICAgIH0KLX0KLQotR0MzRGVu
dW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVt
IHRhcmdldCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgIGlm
ICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQ09NUExFVEU7Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGlu
Y29tcGxldGUiOwotICAgIEdDM0RlbnVtIHJlc3VsdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5j
aGVja1N0YXR1cygmcmVhc29uKTsKLSAgICBpZiAocmVzdWx0ICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICBwcmludEdMV2FybmluZ1RvQ29uc29s
ZSgiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIHJlc3VsdCA9IG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyh0YXJnZXQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1hc2sgJiB+KEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JV
RkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImNsZWFyIiwgImludmFsaWQgbWFzayIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNv
bnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFw
aGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OLCAiY2xlYXIiLCByZWFzb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmICghY2xlYXJJZkNvbXBvc2l0ZWQobWFzaykpCi0gICAgICAgIG1fY29udGV4dC0+Y2xlYXIo
bWFzayk7Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpjbGVhckNvbG9yKEdDM0RmbG9hdCByLCBHQzNEZmxvYXQgZywgR0MzRGZsb2F0
IGIsIEdDM0RmbG9hdCBhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoc3RkOjppc25hbihyKSkKLSAgICAgICAgciA9IDA7Ci0g
ICAgaWYgKHN0ZDo6aXNuYW4oZykpCi0gICAgICAgIGcgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFu
KGIpKQotICAgICAgICBiID0gMDsKLSAgICBpZiAoc3RkOjppc25hbihhKSkKLSAgICAgICAgYSA9
IDE7Ci0gICAgbV9jbGVhckNvbG9yWzBdID0gcjsKLSAgICBtX2NsZWFyQ29sb3JbMV0gPSBnOwot
ICAgIG1fY2xlYXJDb2xvclsyXSA9IGI7Ci0gICAgbV9jbGVhckNvbG9yWzNdID0gYTsKLSAgICBt
X2NvbnRleHQtPmNsZWFyQ29sb3IociwgZywgYiwgYSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpjbGVhckRlcHRoKEdDM0RmbG9hdCBkZXB0aCkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGVhckRlcHRoID0g
ZGVwdGg7Ci0gICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGRlcHRoKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xlYXJTdGVu
Y2lsID0gczsKLSAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChzKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFu
IGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKLXsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb2xvck1h
c2tbMF0gPSByZWQ7Ci0gICAgbV9jb2xvck1hc2tbMV0gPSBncmVlbjsKLSAgICBtX2NvbG9yTWFz
a1syXSA9IGJsdWU7Ci0gICAgbV9jb2xvck1hc2tbM10gPSBhbHBoYTsKLSAgICBtX2NvbnRleHQt
PmNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiY29tcGlsZVNoYWRlciIsIHNo
YWRlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIob2Jq
ZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIEdDM0RpbnQgdmFsdWU7Ci0gICAgbV9jb250ZXh0LT5n
ZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJ
TEVfU1RBVFVTLCAmdmFsdWUpOwotICAgIHNoYWRlci0+c2V0VmFsaWQodmFsdWUpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgdGFy
Z2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdmFsaWRhdGVDb21wcmVz
c2VkVGV4Rm9ybWF0KGludGVybmFsZm9ybWF0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleEltYWdlMkQi
LCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChib3JkZXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJib3JkZXIgbm90IDAi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRl
eERpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgs
IGhlaWdodCwgaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxp
ZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YSgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB3aWR0aCwg
aGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZGF0YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdl
YkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleElt
YWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7Ci0gICAgICAgIGlmIChsZXZlbCAmJiBXZWJH
TFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVzc2VkVGV4
SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgIGJvcmRlciwg
ZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKLSAgICBpZiAobV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUg
Y29tcHJlc3NlZFRleEltYWdlMkQgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1
cmUgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGZvciB0aGlzIGxldmVsLgotICAgICAgICB0ZXgt
Pm1hcmtJbnZhbGlkKHRhcmdldCwgbGV2ZWwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLSAgICB0ZXgtPnNl
dENvbXByZXNzZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVRl
eEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KGZvcm1h
dCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgImludmFsaWQgZm9ybWF0Iik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5j
RGF0YSgiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRh
dGEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRl
VGV4dHVyZUJpbmRpbmcoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsK
LSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGZvcm1hdCAhPSB0ZXgt
PmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEIiwgImZvcm1hdCBkb2VzIG5vdCBtYXRjaCB0ZXh0dXJlIGZvcm1hdCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhT
dWJEaW1lbnNpb25zKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdGV4KSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0M0QoKS0+Y29tcHJlc3NlZFRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRhdGEtPmJ5
dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7Ci0gICAgdGV4LT5zZXRDb21wcmVzc2Vk
KCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVNldHRhYmxlVGV4
Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0KQorICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIDogV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZShwYXNzZWRDYW52YXMsIGNvbnRleHQsIGF0dHJpYnV0ZXMpCiB7Ci0gICAgaWYg
KEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpICYgKEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQlVGRkVSX0JJVCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBi
ZSBzZXQsIG9ubHkgcmVuZGVyZWQgdG8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlU
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRl
cnMoImNvcHlUZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1h
dCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4
dHVyZUJpbmRpbmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRl
eCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVm
ZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNv
bG9yRm9ybWF0KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlz
IGluY29tcGF0aWJsZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
IWlzR0xFUzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lk
dGgsIGhlaWdodCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2Vy
IG9mIDIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24g
PSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwg
IWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlU
ZXhJbWFnZTJEIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjbGVhcklm
Q29tcG9zaXRlZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7Ci0gICAgICAgIFNjb3Bl
ZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmlu
ZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwot
ICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKLSAgICAgICAgR0MzRHNpemVpIGNs
aXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKLSAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZl
ckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRI
ZWlnaHQpKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1h
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsK
LSAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7
Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBjbGlwcGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBj
bGlwcGVkSGVpZ2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIH0KLSAgICAvLyBGSVhNRTogaWYg
dGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxk
IGJlIGV4ZWN1dGVkLgotICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIs
IHRhcmdldCwgbGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1
ZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6
ZSgiY29weVRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXpl
KCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0g
ICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3Zl
cmZsb3cgaGFwcGVucyBmaXJzdC4KLSAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zm
c2V0ICsgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNp
b25zIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+
IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+
Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAicmVj
dGFuZ2xlIG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVs
KTsKLSAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhTdWJJbWFnZTJE
IiwgaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc1RleEludGVy
bmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRC
b3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdl
MkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBs
ZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJl
YXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCByZWFzb24p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAg
aWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRl
ciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQo
KSk7Ci0gICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7Ci0gICAgICAgIEdDM0RzaXplaSBjbGlw
cGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7Ci0gICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJI
ZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVp
Z2h0KSkgewotICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZv
cm1hdCh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUgPSB0ZXgtPmdl
dFR5cGUodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWdu
ZWQgY2hhcltdPiB6ZXJvOwotICAgICAgICAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkgewotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplOwotICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUs
IHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAg
ICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJbWFnZTJE
IiwgImJhZCBkaW1lbnNpb25zIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91bmlxdWU8dW5z
aWduZWQgY2hhcltdPihzaXplKTsKLSAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
bWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
bV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7Ci0gICAgICAgICAgICBp
ZiAoY2xpcHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgewotICAgICAgICAgICAg
ICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQo
KSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICAgICAgICAgIG1fY29udGV4
dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBwZWRYIC0g
eCwgeW9mZnNldCArIGNsaXBwZWRZIC0geSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVk
SGVpZ2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNj
b3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9m
cmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxX
ZWJHTEJ1ZmZlcj4gbyA9IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkU2hhcmVk
T2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMRnJh
bWVidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3Jl
YXRlKHRoaXMpOwotICAgIGFkZENvbnRleHRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87
Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZVRleHR1cmUoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRl
eHR1cmU6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAg
cmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8g
PSBXZWJHTFByb2dyYW06OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQo
KSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQ
dHI8V2ViR0xSZW5kZXJidWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRoaXMp
OwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFz
c1JlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIo
R0MzRGVudW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAm
JiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0
ZVNoYWRlciIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVh
dGUodGhpcywgdHlwZSk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVy
biBvOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UoR0MzRGVudW0g
bW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQotewotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG9iamVjdC0+b2JqZWN0
KCkpCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiBjb250ZXh0IGhlcmUgYmVjYXVzZSB3
ZSB3YW50Ci0gICAgICAgIC8vIHRoaW5ncyBpbiB0aGlzIGNvbnRleHQgdW5ib3VuZC4KLSAgICAg
ICAgb2JqZWN0LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIoV2Vi
R0xCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChidWZmZXIpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCi0gICAg
ICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7Ci0KLSAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPnVuYmluZEJ1ZmZlcihidWZmZXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0g
ICAgaWYgKCFkZWxldGVPYmplY3QoZnJhbWVidWZmZXIpKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKGZyYW1lYnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7Ci0gICAgICAgIG1fZnJh
bWVidWZmZXJCaW5kaW5nID0gMDsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAg
ICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7Ci0gICAg
ICAgICAgICAvLyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNr
IHRvIGludGVybmFsIGZiby4KLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCi17
Ci0gICAgZGVsZXRlT2JqZWN0KHByb2dyYW0pOwotICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3Vy
cmVudFByb2dyYW0gdG8gMCBoZXJlIGJlY2F1c2UgdGhlIGRlbGV0aW9uIG9mIHRoZQotICAgIC8v
IGN1cnJlbnQgcHJvZ3JhbSBpcyBkZWxheWVkLgotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIp
Ci17Ci0gICAgaWYgKCFkZWxldGVPYmplY3QocmVuZGVyYnVmZmVyKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChyZW5kZXJidWZmZXIgPT0gbV9yZW5kZXJidWZmZXJCaW5kaW5nKQotICAgICAg
ICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAwOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91
bmRGcmFtZWJ1ZmZlcihyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCi17Ci0gICAgZGVsZXRlT2Jq
ZWN0KHNoYWRlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0
dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0
dXJlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0
dXJlVW5pdHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJl
VW5pdHNbaV0udGV4dHVyZTJEQmluZGluZykKLSAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ld
LnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRyOwotICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3Rl
eHR1cmVVbml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpCi0gICAgICAgICAgICBtX3RleHR1
cmVVbml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOwotICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5y
ZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZXh0LT5kZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9kZXB0aE1hc2sgPSBmbGFnOwotICAgIG1f
Y29udGV4dC0+ZGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVwdGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQotewotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoek5l
YXIgPiB6RmFyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFy
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXByb2dyYW0tPmRldGFjaFNoYWRlcihzaGFkZXIpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRl
dGFjaFNoYWRlciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBv
YmplY3RPclplcm8oc2hhZGVyKSk7Ci0gICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29u
dGV4dDNEKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNE
ZW51bSBjYXApCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVDYXBhYmlsaXR5KCJkaXNhYmxlIiwgY2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChj
YXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewotICAgICAgICBtX3N0ZW5j
aWxFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpIHsKLSAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29y
RW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5kaXNhYmxl
KGNhcCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRy
aWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJp
YlN0YXRlKGluZGV4KTsKLSAgICBzdGF0ZS5lbmFibGVkID0gZmFsc2U7Ci0KLSAgICBpZiAoaW5k
ZXggPiAwIHx8IGlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlw
ZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50
QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1
ZmZlcigpOwotICAgIAotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAob2Zmc2V0IDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgewotICAg
ICAgICAvLyBGb3IgYW4gdW5zaWduZWQgaW50IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2li
bGUgYnkgNCBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCi0gICAgICAgIGlmIChvZmZzZXQgJSA0KQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBl
bGVtZW50IG9mZnNldC4KLSAgICAgICAgb2Zmc2V0IC89IDQ7Ci0KLSAgICAgICAgR0MzRHNpemVp
cHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7Ci0gICAgICAgIGlm
IChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUKSB7Ci0gICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0
IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVudCByZWFzb25zLgotICAgICAgICBp
ZiAob2Zmc2V0ICUgMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBN
YWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCi0gICAgICAgIG9mZnNldCAvPSAyOwotCi0g
ICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LyAyOwotICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVu
dEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNv
dW50ID4gbiAtIG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUlu
ZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQmIG51bUVsZW1lbnRz
UmVxdWlyZWQpCi17Ci0gICAgLy8gUGVyZm9ybXMgY29uc2VydmF0aXZlIHZhbGlkYXRpb24gYnkg
Y2FjaGluZyBhIG1heGltdW0gaW5kZXggb2YKLSAgICAvLyB0aGUgZ2l2ZW4gdHlwZSBwZXIgZWxl
bWVudCBhcnJheSBidWZmZXIuIElmIGFsbCBvZiB0aGUgYm91bmQKLSAgICAvLyBhcnJheSBidWZm
ZXJzIGhhdmUgZW5vdWdoIGVsZW1lbnRzIHRvIHNhdGlzZnkgdGhhdCBtYXhpbXVtCi0gICAgLy8g
aW5kZXgsIHNraXBzIHRoZSBleHBlbnNpdmUgcGVyLWRyYXctY2FsbCBpdGVyYXRpb24gaW4KLSAg
ICAvLyB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlLgotICAgIAotICAgIFJlZlB0cjxXZWJHTEJ1
ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRF
bGVtZW50QXJyYXlCdWZmZXIoKTsKLQotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVt
ZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAgICAvLyBUaGUgY2FzZSBjb3VudD09MCBp
cyBhbHJlYWR5IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxpZGF0ZUluZGV4
QXJyYXlDb25zZXJ2YXRpdmUuCi0gICAgaWYgKCFudW1FbGVtZW50cykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50QXJyYXlCdWZm
ZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgIEFTU0VSVChidWZmZXIpOwotCi0gICAgaW50
IG1heEluZGV4ID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRDYWNoZWRNYXhJbmRleCh0eXBlKTsK
LSAgICBpZiAobWF4SW5kZXggPCAwKSB7Ci0gICAgICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0g
aW5kZXggaW4gdGhlIGVudGlyZSBidWZmZXIgZm9yIHRoZSBnaXZlbiB0eXBlIG9mIGluZGV4Lgot
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURTogewotICAgICAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0MzRHVieXRlKj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAgZm9y
IChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAg
ICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQ6IHsKLSAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNp
emVvZihHQzNEdXNob3J0KTsKLSAgICAgICAgICAgIGNvbnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0
aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAg
Zm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAg
ICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtp
XSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UOiB7Ci0gICAgICAgICAgICBpZiAoIW1fb2VzRWxlbWVu
dEluZGV4VWludCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBu
dW1FbGVtZW50cyAvPSBzaXplb2YoR0MzRHVpbnQpOwotICAgICAgICAgICAgY29uc3QgR0MzRHVp
bnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGJ1ZmZlci0+ZGF0YSgpKTsKLSAg
ICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykK
LSAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2Fz
dDxpbnQ+KHBbaV0pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxl
bWVudEFycmF5QnVmZmVyLT5zZXRDYWNoZWRNYXhJbmRleCh0eXBlLCBtYXhJbmRleCk7Ci0gICAg
fQotCi0gICAgaWYgKG1heEluZGV4ID49IDApIHsKLSAgICAgICAgLy8gVGhlIG51bWJlciBvZiBy
ZXF1aXJlZCBlbGVtZW50cyBpcyBvbmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtCi0gICAgICAgIC8v
IGluZGV4IHRoYXQgd2lsbCBiZSBhY2Nlc3NlZC4KLSAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJl
ZCA9IG1heEluZGV4ICsgMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRl
eEFycmF5UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIg
b2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKLXsKLSAgICBBU1NFUlQoY291
bnQgPj0gMCAmJiBvZmZzZXQgPj0gMCk7Ci0gICAgdW5zaWduZWQgbGFzdEluZGV4ID0gMDsKLSAg
ICAKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0KLSAgICBpZiAoIWVs
ZW1lbnRBcnJheUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjb3Vu
dCkgewotICAgICAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gMDsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1
ZmZlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBsb25nIHVvZmZz
ZXQgPSBvZmZzZXQ7Ci0gICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7Ci0KLSAgICBpZiAodHlw
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7Ci0gICAgICAgIC8vIE1ha2Ug
dW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KLSAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0Mz
RHVpbnQpOwotICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdD
M0R1aW50Kj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgp
KSArIHVvZmZzZXQ7Ci0gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAo
KnAgPiBsYXN0SW5kZXgpCi0gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7Ci0gICAgICAg
ICAgICArK3A7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUKSB7Ci0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVt
ZW50IG9mZnNldC4KLSAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7Ci0gICAg
ICAgIGNvbnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4o
ZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZz
ZXQ7Ci0gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPiBsYXN0
SW5kZXgpCi0gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7Ci0gICAgICAgICAgICArK3A7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUpIHsKLSAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0MzRHVieXRlKj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIo
KS0+ZGF0YSgpKSArIHVvZmZzZXQ7Ci0gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAg
ICAgICBpZiAoKnAgPiBsYXN0SW5kZXgpCi0gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7
Ci0gICAgICAgICAgICArK3A7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGVuIHNldCB0
aGUgbGFzdCBpbmRleCBpbiB0aGUgaW5kZXggYXJyYXkgYW5kIG1ha2Ugc3VyZSBpdCBpcyB2YWxp
ZC4KLSAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gbGFzdEluZGV4ICsgMTsKLSAgICByZXR1cm4g
bnVtRWxlbWVudHNSZXF1aXJlZCA+IDA7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25l
ZCBwcmltaXRpdmVDb3VudCkKLXsKLSAgICBpZiAoIW1fY3VycmVudFByb2dyYW0pCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRy
aWIgYW5kIGNoZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKLSAgICAgICAg
aWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZh
bGlkYXRlQmluZGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChlbGVtZW50Q291bnQgPD0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLQotICAgIC8v
IExvb2sgaW4gZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUgY3VycmVudCBwcm9n
cmFtKS4KLSAgICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNlOwotICAgIGJvb2wg
c2F3RW5hYmxlZEF0dHJpYiA9IGZhbHNlOwotICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlv
bnMgPSBtX2N1cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsgKytpKSB7Ci0gICAg
ICAgIGludCBsb2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihp
KTsKLSAgICAgICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0PGludD4obV9tYXhW
ZXJ0ZXhBdHRyaWJzKSkgewotICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShsb2MpOwotICAgICAgICAgICAgaWYgKHN0YXRlLmVuYWJs
ZWQpIHsKLSAgICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAvLyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVtZW50cyBjb21wdXRh
dGlvbi4KLSAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVudCwgd2Ugd2lsbCBv
bmx5IHRvdWNoIHRoZSBkYXRhIGZvciB0aGUKLSAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGFu
ZCBub3RoaW5nIGJleW9uZCBpdC4KLSAgICAgICAgICAgICAgICBpbnQgYnl0ZXNSZW1haW5pbmcg
PSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgoKSAtIHN0
YXRlLm9mZnNldCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKLSAgICAgICAgICAgICAg
ICBpZiAoYnl0ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KQotICAgICAgICAg
ICAgICAgICAgICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcgLSBzdGF0ZS5ieXRl
c1BlckVsZW1lbnQpIC8gc3RhdGUuc3RyaWRlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
c3RhbmNlc1JlcXVpcmVkID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGl2aXNvcikg
ewotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNlaWwoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFzYXdOb25JbnN0YW5jZWRBdHRyaWIgJiYg
c2F3RW5hYmxlZEF0dHJpYikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCkKLXsKLSAgICBp
ZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8g
b2JqZWN0IG9yIG9iamVjdCBkZWxldGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RzaXplaSBwcmltaXRpdmVDb3VudCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3Mo
ZnVuY3Rpb25OYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGZpcnN0IDwg
MCB8fCBjb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAg
ICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGlmIChwcmltaXRpdmVDb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1j
b3VudCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3Vy
ZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCi0gICAgICAgIENoZWNrZWQ8R0MzRGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7Ci0gICAgICAgIENoZWNrZWQ8
R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7Ci0gICAgICAgIENo
ZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3Qg
KyBjaGVja2VkQ291bnQ7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+
IGNoZWNrZWRQcmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgIGlmIChjaGVj
a2VkU3VtLmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZs
b3dlZCgpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQo
KSwgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJh
bWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVz
b3VyY2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCByZWFzb24pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVt
IG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLQotICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlz
KCJkcmF3QXJyYXlzIiwgbW9kZSwgZmlyc3QsIGNvdW50LCAwKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVs
YXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICB2ZXJ0
ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQg
LSAxKTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVy
ZUNvbXBsZXRlbmVzcygiZHJhd0FycmF5cyIsIHRydWUpOwotCi0gICAgbV9jb250ZXh0LT5kcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0KLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
LSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOwot
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQs
IHVuc2lnbmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rp
b25OYW1lLCBtb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCF2YWxpZGF0
ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Ci0g
ICAgICAgIGlmIChtX29lc0VsZW1lbnRJbmRleFVpbnQpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAiY291bnQgb3Igb2Zmc2V0IDwgMCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENo
YW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChwcmltaXRp
dmVDb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5v
IEVMRU1FTlRfQVJSQVlfQlVGRkVSIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkg
ewotICAgICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAg
ICAgICBpZiAoIXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAicmVx
dWVzdCBvdXQgb2YgYm91bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFjb3VudCkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOwotICAgICAgICBDaGVja2VkPEdDM0Rp
bnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQp
OwotICAgICAgICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJp
bWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJh
eUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmli
dXRlcyhudW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewot
ICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNoZWNrZWRDb3VudC51
bnNhZmVHZXQoKSwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxl
bWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQ
cmltaXRpdmVDb3VudC51bnNhZmVHZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBy
ZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJC
aW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0
M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCByZWFzb24pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxl
bWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25n
IGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOwotICAgIGlmICghdmFsaWRhdGVEcmF3
RWxlbWVudHMoImRyYXdFbGVtZW50cyIsIG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVs
ZW1lbnRzLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsK
LQotICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNH
TEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAg
ICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNE
aW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11
bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBp
ZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVz
cygiZHJhd0VsZW1lbnRzIiwgdHJ1ZSk7Ci0KLSAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyht
b2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7Ci0KLSAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAg
ICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KCJkcmF3RWxlbWVudHMiLCBmYWxzZSk7Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5h
YmxlIiwgY2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewotICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsK
LSAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBt
X3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5h
YmxlZCk7Ci0gICAgfQotICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4
ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5Iiwg
ImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0gICAgc3Rh
dGUuZW5hYmxlZCA9IHRydWU7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fY29udGV4dC0+ZmluaXNoKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpm
bHVzaCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fY29udGV4dC0+Zmx1c2goKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
YXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZl
ciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJG
dW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1l
bnQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChi
dWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZy
b20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3Qg
YWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQK
LSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9m
IHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJPLgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
fHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJv
KGJ1ZmZlcik7Ci0gICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FU
VEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
YnVmZmVyT2JqZWN0KTsKLSAgICB9Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFj
aG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7Ci0gICAgYXBwbHlT
dGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZy
YW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChsZXZlbCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5v
dCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgIXRleHR1
cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZl
clRleHR1cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1
bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1l
bnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0g
ICAgLy8gRkJPLgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJu
byBmcmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKLSAgICBz
d2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0
ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4
dHVyZU9iamVjdCwgbGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZm
ZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3Qs
IGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4
dHVyZU9iamVjdCwgbGV2ZWwpOwotICAgIH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0
QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlLCBsZXZlbCk7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZnJv
bnRGYWNlKG1vZGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVN
aXBtYXAoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4
dHVyZUJpbmRpbmcoImdlbmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0
ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBu
b3QgYWxsIHRoZSBzYW1lIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29t
cHJlc3NlZCB0ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAyOgotICAgIGlmICh0
ZXgtPmlzQ29tcHJlc3NlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0
byBnZW5lcmF0ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0
ZU1pcG1hcCIsIHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIGdlbmVyYXRlTWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWlu
RmlsdGVyIGlzIG5vdCBORUFSRVNUX01JUE1BUF9MSU5FQVIKLSAgICAvLyBvbiBNYWMuICBSZW1v
dmUgdGhlIGhhY2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCi0jaWYgT1MoREFSV0lO
KQotICAgIGJvb2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5n
ZXRNaW5GaWx0ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFS
KSB7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01J
UE1BUF9MSU5FQVIpOwotICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7Ci0gICAg
fQotI2VuZGlmCi0gICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotI2lmIE9T
KERBUldJTikKLSAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9G
SUxURVIsIHRleC0+Z2V0TWluRmlsdGVyKCkpOwotI2VuZGlmCi0gICAgdGV4LT5nZW5lcmF0ZU1p
cG1hcExldmVsSW5mbygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KCJnZXRBY3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRy
aWIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6
ICVzIiwgaW5kZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKLQotICAgIHJldHVybiBXZWJH
TEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0K
LQotUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZv
cm0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwot
ICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgaW5kZXgsIGluZm8pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkKLSAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5l
bmRzV2l0aCgiWzBdIikpCi0gICAgICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKLQot
ICAgIExPRyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwg
aW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6
Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwotfQotCi1ib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIHNoYWRlck9iamVjdHMuY2xl
YXIoKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdM
T2JqZWN0KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZVtdID0gewotICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQUdNRU5UX1NIQURFUgotICAgIH07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emVvZihzaGFkZXJUeXBlKSAvIHNpemVvZihHQzNEZW51bSk7ICsraSkgewotICAgICAgICBXZWJH
TFNoYWRlciogc2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtp
XSk7Ci0gICAgICAgIGlmIChzaGFkZXIpCi0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVu
ZChzaGFkZXIpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0MzRGludCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0g
ICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0
dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlk
YXRlU3RyaW5nKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gLTE7
Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAg
ICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2Nh
dGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0K
LSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJv
Z3JhbSksIG5hbWUpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYg
KHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBh
cmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgfQotCi0gICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJf
U0laRSAmJiBwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUp
OwotICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCi0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdM
Q29udGV4dEF0dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJp
YnV0ZXMoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJH
TENvbnRleHRBdHRyaWJ1dGVzIG9iamVjdCB0bwotICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJv
bSBtdXRhdGluZyBhbnkgY2FjaGVkIHZlcnNpb24uCi0KLSAgICAvLyBBbHNvLCB3ZSBuZWVkIHRv
IGVuZm9yY2UgcmVxdWVzdGVkIHZhbHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAotICAgIC8vIGFu
ZCBzdGVuY2lsLCByZWdhcmRsZXNzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5n
Ci0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KLSAgICBSZWZQdHI8
V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXM6OmNyZWF0ZShtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOwotICAgIGlmICgh
bV9hdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7
Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgYXR0cmlidXRlcy0+c2V0
U3RlbmNpbChmYWxzZSk7Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBU
aGUgRHJhd2luZ0J1ZmZlciBvYnRhaW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250
ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCksCi0gICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBp
dHMgb3duIGRldGVybWluYXRpb24gb2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRl
ZC4KLSAgICAgICAgYXR0cmlidXRlcy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVs
dGlzYW1wbGUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKLX0K
LQotR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYg
KG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dDNEOjpOT19FUlJPUjsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwotfQot
Ci1XZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJFWFRfYmxlbmRfbWlubWF4IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpIHsKLSAgICAgICAgaWYgKCFtX2V4
dEJsZW5kTWluTWF4KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIpOwotICAgICAgICAgICAgbV9leHRC
bGVuZE1pbk1heCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOwotICAgIH0KLSAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKLSAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7Ci0gICAg
ICAgIGlmICghbV9leHRzUkdCKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsKLSAgICAgICAgICAgIG1fZXh0c1JH
QiA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG1fZXh0c1JHQi5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJFWFRfZnJhZ19kZXB0aCIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgewotICAgICAgICBpZiAoIW1f
ZXh0RnJhZ0RlcHRoKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKLSAgICAgICAgICAgIG1fZXh0RnJh
Z0RlcHRoID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKLSAgICAgICAg
JiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90
ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
QVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKSkgewotICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4
dHVyZUxPRCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3Vy
ZUVuYWJsZWQoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICAgICAgICAgIG1fZXh0
U2hhZGVyVGV4dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4o
dGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5n
ZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhU
X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMi
KSkgewotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhU
X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0gICAgICAgICAgICBtX2V4dFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmls
dGVyQW5pc290cm9waWMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkg
ewotICAgICAgICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgewotICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0g
c3RkOjptYWtlX3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOwotICAgIH0K
LSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKLSAg
ICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4
dHVyZV9mbG9hdCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNf
dGV4dHVyZV9mbG9hdCIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1h
a2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIG1fb2VzVGV4dHVyZUZsb2F0LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGlu
ZWFyIikpIHsKLSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgewotICAgICAg
ICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190
ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5l
YXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOwotICAg
IH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxv
YXQiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhh
bGZGbG9hdCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3Vy
ZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICAgICAgICAgIG1fb2Vz
VGV4dHVyZUhhbGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4o
dGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5n
ZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVy
ZV9oYWxmX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgewotICAg
ICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hh
bGZfZmxvYXRfbGluZWFyIik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0
KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKLSAgICAgICAgaWYgKCFtX29l
c1ZlcnRleEFycmF5T2JqZWN0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKLSAgICAg
ICAgICAgIG1fb2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRl
eEFycmF5T2JqZWN0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNWZXJ0
ZXhBcnJheU9iamVjdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJPRVNfZWxlbWVudF9pbmRleF91aW50IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKLSAg
ICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKLSAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91
aW50Iik7Ci0gICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9FU0VsZW1lbnRJbmRleFVpbnQ+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBtX29lc0VsZW1lbnRJbmRleFVpbnQuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKLSAgICAgICAgaWYgKCFtX3dl
YmdsTG9zZUNvbnRleHQpCi0gICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1h
a2VfdW5pcXVlPFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJn
bExvc2VDb250ZXh0LmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQotICAgICAgICAmJiBX
ZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYg
KCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJl
c3NlZFRleHR1cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEM+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdl
dCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VC
R0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIikpCi0gICAgICAgICYmIFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbENv
bXByZXNzZWRUZXh0dXJlUFZSVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1
cmVQVlJUQyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0
aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgp
OwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNz
ZWRfdGV4dHVyZV9zM3RjIikKLSAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6
OnN1cHBvcnRlZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVy
ZVMzVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjpt
YWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7Ci0gICAgICAgIHJl
dHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOwotICAgIH0KLSAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQotICAgICAgICAm
JiBXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7Ci0g
ICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1
cmUiKTsKLSAgICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdlYkdMRGVwdGhUZXh0dXJlPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV93
ZWJnbERlcHRoVGV4dHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJXRUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsK
LSAgICAgICAgaWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKLSAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7
Ci0gICAgICAgICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdM
RHJhd0J1ZmZlcnM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX3dlYmdsRHJh
d0J1ZmZlcnMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
QU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0
ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7Ci0gICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5H
TEVfaW5zdGFuY2VkX2FycmF5cyIpOwotICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5
cyA9IHN0ZDo6bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOwotICAgIH0K
LSAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAgICAgICAgICAgICBt
X3dlYmdsRGVidWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5k
ZXJlckluZm8+KHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVy
SW5mby5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIldFQkdMX2RlYnVnX3NoYWRlcnMiKQotICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2Ui
KSkgewotICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQotICAgICAgICAgICAg
ICAgIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFk
ZXJzPih0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1l
dGVycygiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2ht
ZW50KSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotCi0gICAgaWYgKCFtX2ZyYW1l
YnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBi
b3VuZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgV2Vi
R0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2ht
ZW50T2JqZWN0KGF0dGFjaG1lbnQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmIChw
bmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
VFlQRSkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PTkUpOwotICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0g
aW4gdGhpcyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgICAgIC8vIHNwZWNpZmllcyBJTlZB
TElEX09QRVJBVElPTi4KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
LSAgICB9Ci0KLSAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBvYmplY3QtPmlzUmVu
ZGVyYnVmZmVyKCkpOwotICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7Ci0gICAgICAgIHN3
aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgotICAgICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4ocmVpbnRlcnByZXRf
Y2FzdDxXZWJHTFRleHR1cmUqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVf
TUFQX0ZBQ0U6Ci0gICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogewotICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAocG5h
bWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUik7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0
X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogewotICAg
ICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpOwotICAgICAgICAgICAgR0MzRGVudW0gcmVu
ZGVyQnVmZmVyRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotICAg
ICAgICAgICAgQVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0Jf
RVhUICYmIHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhU
KTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpT
UkdCOF9BTFBIQThfRVhUKQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRXh0
ZW5zaW9uczNEOjpTUkdCX0VYVCk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7Ci0gICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY29u
c3QgaW50IGludFplcm8gPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VE
X0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRf
U0laRV9SQU5HRToKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoKLSAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFz
c1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQ6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICAg
ICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5z
aWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EX0RTVF9SR0I6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0g
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgotICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EX1NSQ19BTFBIQToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgotICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMVUVfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6
Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJu
IGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oVWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRh
KCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNVTExfRkFDRToKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgot
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKLSAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50UHJvZ3JhbSkpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oaW50WmVybyk7Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgot
ICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0ZVTkM6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6
Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRC
b29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9XUklURU1BU0s6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgICAgIHJldHVybiBnZXRC
b29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVN
RU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBh
c3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVu
dEFycmF5QnVmZmVyKCkpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xG
cmFtZWJ1ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGUk9OVF9GQUNFOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9I
SU5UOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lE
VEg6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVO
VF9VTklGT1JNX1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJF
X1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBn
ZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
RVJURVhfQVRUUklCUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
OgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9G
T1JNQVRTOgotICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3Ig
dGhpcz8KLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZG
U0VUX0ZBQ1RPUjoKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgotICAgICAgICBy
ZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6Ci0gICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IFdlYkdMIikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNBTVBMRV9CVUZGRVJTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJU
OgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgotICAgICAgICByZXR1cm4g
Z2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRVM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJ
bnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4
dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04p
ICsgIikiKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdl
dFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNL
X1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6Ci0gICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRl
cy5zdGVuY2lsKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgot
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX1BBU1NfREVQVEhfRkFJTDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQ
VEhfUEFTUzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKLSAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9URVNUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVM
X0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3Rp
dmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24p
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhTdHJpbmcoIldlYktpdCIpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJTSU9OOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBt
X2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgotICAgICAgICByZXR1cm4gZ2V0
V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZS
QUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMKLSAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKLSAgICAgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NI
QURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVy
SW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdS
ZW5kZXJlckluZm8pCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+
Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOwotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90
IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2Vi
R0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgotICAgICAgICBpZiAo
bV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKSk7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVy
ZXJfaW5mbyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3Zl
cnRleF9hcnJheV9vYmplY3QKLSAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsK
LSAgICAgICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmpl
Y3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7Ci0gICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3Qg
ZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3BpYykKLSAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNp
b25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
IG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVm
ZmVycyBCRUdJTgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQotICAgICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpOwotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3Qg
ZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgotICAgICAgICBpZiAobV93ZWJnbERyYXdC
dWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVy
cygpKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9k
cmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAg
ICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAg
ICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JV
RkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQg
dmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZykKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKLSAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQg
YmFja2J1ZmZlcgotICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0g
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0
UHJvZ3JhbVBhcmFtZXRlciIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0KLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQoKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VkFMSURBVEVfU1RBVFVTOgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihv
YmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TElOS19TVEFUVVM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3Jh
bS0+Z2V0TGlua1N0YXR1cygpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hF
RF9TSEFERVJTOgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8o
cHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZh
bHVlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6Ci0gICAgICAgIG1fY29u
dGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotU3Ry
aW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJv
Z3JhbSkpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2Nv
bnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSkpOwotfQotCi1X
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwot
ICAgIH0KLSAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAi
bm8gcmVuZGVyYnVmZmVyIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
LSAgICB9Ci0KLSAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1h
dCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCi0gICAgICAgICYmICFtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkgewotICAgICAgICBBU1NFUlQoIWlzRGVwdGhT
dGVuY2lsU3VwcG9ydGVkKCkpOwotICAgICAgICBpbnQgdmFsdWUgPSAwOwotICAgICAgICBzd2l0
Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9XSURUSDoKLSAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRX
aWR0aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVm
ZmVyQmluZGluZy0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAg
ICB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDI0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDg7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
X0lOVEVSTkFMX0ZPUk1BVDoKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5k
ZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSIpOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIH0KLQotICAgIEdDM0RpbnQgdmFs
dWUgPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfV0lEVEg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSX0hFSUdIVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJf
UkVEX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVO
X1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0la
RToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgotICAg
ICAgICBtX2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUs
ICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZv
cm1hdCgpKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwot
ICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVy
UGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIs
IHNoYWRlcikpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZh
bHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlz
RGVsZXRlZCgpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoK
LSAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5h
bWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9v
bD4odmFsdWUpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKLSAg
ICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUs
ICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50Pih2YWx1ZSkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
Ci0gICAgfQotfQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZv
TG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVy
SW5mb0xvZyIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJl
Tm90TnVsbChtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikp
KTsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlw
ZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hf
RkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpNRURJVU1fSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkhJR0hfSU5UOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJl
Y2lzaW9uRm9ybWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKLSAgICBH
QzNEaW50IHByZWNpc2lvbiA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25G
b3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAg
IHJldHVybiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5n
ZVsxXSwgcHJlY2lzaW9uKTsKLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgi
Z2V0U2hhZGVyU291cmNlIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVy
biBlbnN1cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOwotfQotCi1WZWN0b3I8U3RyaW5n
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQotewotICAg
IFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLQotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb24pCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAobV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpCi0gICAgICAgIHJl
c3VsdC5hcHBlbmQoIkVYVF9ibGVuZF9taW5tYXgiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKQotICAgICAgICByZXN1bHQuYXBw
ZW5kKCJFWFRfc1JHQiIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX0VYVF9mcmFnX2RlcHRoIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9m
cmFnX2RlcHRoIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0
cygiR0xfT0VTX3RleHR1cmVfZmxvYXQiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3Rl
eHR1cmVfZmxvYXQiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBv
cnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpKQotICAgICAg
ICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7Ci0gICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9h
dF9saW5lYXIiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9h
dF9saW5lYXIiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgi
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIp
KQotICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7Ci0gICAg
aWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9FWFRf
dGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpKQotICAgICAg
ICByZXN1bHQuYXBwZW5kKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpOwotICAgIGlmIChtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3Vp
bnQiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOwot
ICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2xvc2VfY29udGV4dCIpOwotICAgIGlmIChXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIik7Ci0gICAgaWYgKFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7Ci0gICAgaWYg
KFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJl
c3VsdC5hcHBlbmQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7Ci0gICAgaWYgKFdl
YkdMRGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpCi0gICAgICAg
IHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTsKLSAgICBpZiAoc3VwcG9ydHNE
cmF3QnVmZmVycygpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kcmF3X2J1ZmZlcnMi
KTsKLSAgICBpZiAoQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwotCi0gICAgaWYgKGFs
bG93UHJpdmlsZWdlZEV4dGVuc2lvbnMoKSkgewotICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2Ui
KSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOwotICAgIH0K
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdldFRleFBhcmFt
ZXRlciIsIHRhcmdldCwgZmFsc2UpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkg
ewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYo
dGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRF
WFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMKLSAgICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dD4odmFsdWUpKTsKLSAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRl
eFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOwotICAgIGlmICghdW5pZm9ybUxvY2F0aW9uIHx8IHVuaWZvcm1Mb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IHByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybSIsICJubyB1
bmlmb3JtbG9jYXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHByb2dyYW0iKTsKLSAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICBHQzNEaW50IGxvY2F0aW9uID0gdW5p
Zm9ybUxvY2F0aW9uLT5sb2NhdGlvbigpOwotCi0gICAgR0MzRGVudW0gYmFzZVR5cGU7Ci0gICAg
dW5zaWduZWQgbGVuZ3RoOwotICAgIHN3aXRjaCAodW5pZm9ybUxvY2F0aW9uLT50eXBlKCkpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOgotICAgICAgICBiYXNlVHlwZSA9IEdy
YXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzI6Ci0gICAgICAgIGJhc2VU
eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMzoKLSAgICAg
ICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0g
MzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUM0
OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAgICAgICBs
ZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKLSAgICAgICAg
bGVuZ3RoID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKLSAg
ICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UX1ZFQzM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklO
VDsKLSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UX1ZFQzQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
M0Q6OklOVDsKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMyOgotICAgICAgICBiYXNlVHlwZSA9IEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMzoKLSAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDM7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzQ6Ci0g
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5n
dGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VF9NQVQyOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAg
ICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVRfTUFUMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAxNjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVSX0NVQkU6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250
ZXh0M0Q6OklOVDsKLSAgICAgICAgbGVuZ3RoID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgLy8gQ2FuJ3QgaGFuZGxlIHRoaXMgdHlwZQotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0i
LCAidW5oYW5kbGVkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAg
IH0KLSAgICBzd2l0Y2ggKGJhc2VUeXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ6IHsKLSAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzE2XSA9IHswfTsKLSAgICAgICAgaWYg
KG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmdldG5Vbmlmb3JtZnZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2Nh
dGlvbiwgMTYgKiBzaXplb2YoR0MzRGZsb2F0KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxv
Y2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLSAgICB9Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6SU5UOiB7Ci0gICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07
Ci0gICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwotICAgICAgICBpZiAobGVuZ3RoID09IDEpCi0gICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotICAgIH0KLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOiB7Ci0gICAgICAgIEdDM0RpbnQgdmFsdWVb
NF0gPSB7MH07Ci0gICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwotICAgICAgICBpZiAobGVuZ3RoID4g
MSkgewotICAgICAgICAgICAgYm9vbCBib29sVmFsdWVbMTZdID0gezB9OwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKQotICAgICAgICAgICAgICAgIGJv
b2xWYWx1ZVtqXSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2pdKTsKLSAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oYm9vbFZhbHVlLCBsZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbMF0pKTsKLSAgICB9
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICAv
LyBJZiB3ZSBnZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRl
bHkgY29tcGxleCBsb2dpYyBhYm92ZQotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7Ci0g
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxv
Y2F0aW9uPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3Ro
KCJnZXRVbmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlv
biA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwg
bmFtZSk7Ci0gICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBHQzNEaW50IGFjdGl2ZVVuaWZvcm1zID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIEdy
YXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7Ci0gICAg
Zm9yIChHQzNEaW50IGkgPSAwOyBpIDwgYWN0aXZlVW5pZm9ybXM7IGkrKykgewotICAgICAgICBB
Y3RpdmVJbmZvIGluZm87Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3Jt
KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaSwgaW5mbykpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgLy8gU3RyaXAgIlswXSIgZnJvbSB0aGUgbmFtZSBpZiBpdCdzIGFuIGFy
cmF5LgotICAgICAgICBpZiAoaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKLSAgICAgICAgICAg
IGluZm8ubmFtZSA9IGluZm8ubmFtZS5sZWZ0KGluZm8ubmFtZS5sZW5ndGgoKSAtIDMpOwotICAg
ICAgICAvLyBJZiBpdCdzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBlYWNo
IGVsZW1lbnQsIGFwcGVuZGluZyAiW2luZGV4XSIgdG8gdGhlIG5hbWUuCi0gICAgICAgIGZvciAo
R0MzRGludCBpbmRleCA9IDA7IGluZGV4IDwgaW5mby5zaXplOyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICBTdHJpbmcgdW5pZm9ybU5hbWUgPSBpbmZvLm5hbWUgKyAiWyIgKyBTdHJpbmc6Om51bWJl
cihpbmRleCkgKyAiXSI7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lID09IHVuaWZvcm1OYW1lIHx8
IG5hbWUgPT0gaW5mby5uYW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTFVuaWZvcm1M
b2NhdGlvbjo6Y3JlYXRlKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbiwgaW5mby50eXBlKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNE
ZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsK
LQotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLQotICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKLQotICAgIGlmIChtX2FuZ2xlSW5zdGFu
Y2VkQXJyYXlzICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FS
UkFZX0RJVklTT1JfQU5HTEUpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuZGl2
aXNvcik7Ci0KLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgaWYgKCghaXNH
TEVTMkNvbXBsaWFudCgpICYmICFpbmRleCAmJiBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKDApLmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyKQotICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmcKLSAgICAgICAgICAgIHx8
ICFzdGF0ZS5idWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdM
QnVmZmVyPihzdGF0ZS5idWZmZXJCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRlLmVuYWJsZWQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9B
VFRSSUJfQVJSQVlfTk9STUFMSVpFRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0
ZS5ub3JtYWxpemVkKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklC
X0FSUkFZX1NJWkU6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuc2l6ZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6Ci0g
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUub3JpZ2luYWxTdHJpZGUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKLSAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS50eXBlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpDVVJSRU5UX1ZFUlRFWF9BVFRSSUI6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
RmxvYXQzMkFycmF5OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF0udmFsdWUsIDQp
KTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmliIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotbG9u
ZyBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1
aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9j
b250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8bG9uZyBsb25nPihyZXN1bHQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJvb2wgaXNW
YWxpZCA9IGZhbHNlOwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0gICAgICAgIGlzVmFsaWQgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RF
UklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcwotICAgICAgICBp
ZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKQotICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAi
aW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQt
PmhpbnQodGFyZ2V0LCBtb2RlKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojppc0J1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghYnVmZmVyIHx8
IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAo
IWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiBtX2NvbnRleHQtPmlzQnVmZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOwotfQotCi1ib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fY29udGV4dExvc3Q7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
ICYmICFtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgTE9HKFdlYkdM
LCAiQ29udGV4dCBpcyBiZWluZyB1c2VkLiBBdHRlbXB0IHRvIHJlc29sdmUgdGhlIHBvbGljeS4i
KTsKLSAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCkudG9w
RG9jdW1lbnQoKTsKLSAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKTsKLSAgICAg
ICAgaWYgKHBhZ2UgJiYgIWRvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAg
ICBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5yZXNvbHZlV2ViR0xQb2xpY3lG
b3JVUkwoZG9jdW1lbnQudXJsKCkpOwotICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVu
dGx5IGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdCBmcm9tIHJlc29sdXRpb24uIEEgbW9yZQot
ICAgICAgICAvLyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCB0cnkgdG8gY29uc3RydWN0
IGEgcmVhbCBjb250ZXh0LCBldGMgYW5kIHByb2NlZWQKLSAgICAgICAgLy8gd2l0aCBub3JtYWwg
b3BlcmF0aW9uLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI5MTIyCi0gICAgICAgIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbiA9IHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xp
Y3lSZXNvbHV0aW9uOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omlz
RW5hYmxlZChHQzNEZW51bSBjYXApCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJpc0VuYWJsZWQiLCBjYXApKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpCi0g
ICAgICAgIHJldHVybiBtX3N0ZW5jaWxFbmFibGVkOwotICAgIHJldHVybiBtX2NvbnRleHQtPmlz
RW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omlz
RnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFm
cmFtZWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgaWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzRnJhbWVidWZmZXIoZnJhbWVidWZm
ZXItPm9iamVjdCgpKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSB8fCBp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IG1fY29udGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKLX0KLQotR0MzRGJvb2xl
YW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZl
ciogcmVuZGVyYnVmZmVyKQotewotICAgIGlmICghcmVuZGVyYnVmZmVyIHx8IGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIXJlbmRlcmJ1ZmZl
ci0+aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBt
X2NvbnRleHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOwotfQotCi1H
QzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBz
aGFkZXIpCi17Ci0gICAgaWYgKCFzaGFkZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRl
ci0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omlz
VGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlIHx8IGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIXRl
eHR1cmUtPmhhc0V2ZXJCZWVuQm91bmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1
cm4gbV9jb250ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZXh0LT5saW5lV2lkdGgod2lkdGgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
bGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImxpbmtQcm9ncmFtIiwgcHJvZ3JhbSkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBXZWJHTFNo
YWRlciogdmVydGV4U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOwotICAgICAgICBXZWJHTFNoYWRlciogZnJhZ21lbnRT
aGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
R01FTlRfU0hBREVSKTsKLSAgICAgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRl
ci0+aXNWYWxpZCgpIHx8ICFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzVmFs
aWQoKSB8fCAhbV9jb250ZXh0LT5wcmVjaXNpb25zTWF0Y2gob2JqZWN0T3JaZXJvKHZlcnRleFNo
YWRlciksIG9iamVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpIHx8ICFtX2NvbnRleHQtPmNoZWNr
VmFyeWluZ3NQYWNraW5nKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclplcm8o
ZnJhZ21lbnRTaGFkZXIpKSkgewotICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhm
YWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2Nv
bnRleHQtPmxpbmtQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7Ci0gICAgcHJvZ3JhbS0+
aW5jcmVhc2VMaW5rQ291bnQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBp
eGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKHBuYW1l
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAg
ICAgICAgbV91bnBhY2tGbGlwWSA9IHBhcmFtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAg
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdM
OgotICAgICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVM
VF9XRUJHTCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKLSAgICAgICAgICAg
IG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFy
YW0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgZm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfQUxJR05NRU5UOgotICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAyIHx8
IHBhcmFtID09IDQgfHwgcGFyYW0gPT0gOCkgewotICAgICAgICAgICAgaWYgKHBuYW1lID09IEdy
YXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKLSAgICAgICAgICAgICAgICBtX3BhY2tB
bGlnbm1lbnQgPSBwYXJhbTsKLSAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQ6Ci0gICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQgPSBw
YXJhbTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgZm9yIGFsaWdubWVudCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFt
ZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1
bml0cykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9jb250ZXh0LT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikKLXsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAg
Ly8gRHVlIHRvIFdlYkdMJ3Mgc2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9z
c2libGUgdG8KLSAgICAvLyB0YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCi0g
ICAgQVNTRVJUKGNhbnZhcygpLT5vcmlnaW5DbGVhbigpKTsKLSAgICAvLyBWYWxpZGF0ZSBpbnB1
dCBwYXJhbWV0ZXJzLgotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVscyIsICJubyBk
ZXN0aW5hdGlvbiBBcnJheUJ1ZmZlclZpZXciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIs
ICJpbnZhbGlkIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8
IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVh
ZFBpeGVscyIsICJmb3JtYXQgbm90IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5z
dCBwaXhlbCB0eXBlLgotICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50
OCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJh
eSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJm
cmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNS
ZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVs
cyIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gQ2FsY3VsYXRlIGFy
cmF5IHNpemUsIHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCi0g
ICAgdW5zaWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZCA9IDA7Ci0gICAgdW5zaWduZWQgaW50
IHBhZGRpbmcgPSAwOwotICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsKLSAg
ICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVz
KGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRl
c1JlcXVpcmVkLCAmcGFkZGluZyk7Ci0gICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9fRVJST1IpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAi
cmVhZFBpeGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVz
UmVxdWlyZWQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5v
dCBsYXJnZSBlbm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgdm9pZCogZGF0
YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKLQotICAgIHsKLSAgICAgICAgU2NvcGVkRHJhd2lu
Z0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSk7Ci0gICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkK
LSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZWFkblBpeGVsc0VYVCh4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBk
YXRhKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgs
IHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci0gICAgfQotCi0jaWYgT1Mo
REFSV0lOKQotICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgLy8gd2UgaGF2ZW4n
dCBjb21wdXRlZCBwYWRkaW5nCi0gICAgICAgIG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUlu
Qnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3Rh
bEJ5dGVzUmVxdWlyZWQsICZwYWRkaW5nKTsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2Vj
dGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xFUyBkcml2ZXIgYnVnCi0g
ICAgLy8gb24gUUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxz
IHNob3VsZAotICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgotICAgIGlmICgh
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KS5hbHBoYSkgewotICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKTsKLSAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXkgPSAw
OyBpeSA8IGhlaWdodDsgKytpeSkgewotICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXggPSAw
OyBpeCA8IHdpZHRoOyArK2l4KSB7Ci0gICAgICAgICAgICAgICAgcGl4ZWxzWzNdID0gMjU1Owot
ICAgICAgICAgICAgICAgIHBpeGVscyArPSA0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cGl4ZWxzICs9IHBhZGRpbmc7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+cmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHRhcmdl
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJT
dG9yYWdlIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKCFtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2Jq
ZWN0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJi
dWZmZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgi
cmVuZGVyYnVmZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0g
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0NPTVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5E
RVg4OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUOgotICAgICAgICBp
ZiAoaW50ZXJuYWxmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUICYmICFt
X2V4dHNSR0IpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJu
YWxmb3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2Nv
bnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElz
VmFsaWQodHJ1ZSk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTDoKLSAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVu
c2lvbnMzRDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAg
ICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBw
b3J0ZWQoKSk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVu
ZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVh
biBpbnZlcnQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVT
aXplKCJzY2lzc29yIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVj
dCgic2hhZGVyU291cmNlIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFN0cmluZyBz
dHJpbmdXaXRob3V0Q29tbWVudHMgPSBTdHJpcENvbW1lbnRzKHN0cmluZykucmVzdWx0KCk7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVN0cmluZygic2hhZGVyU291cmNlIiwgc3RyaW5nV2l0aG91dENvbW1l
bnRzKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHNoYWRlci0+c2V0U291cmNlKHN0cmluZyk7Ci0g
ICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZ1dp
dGhvdXRDb21tZW50cyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2ls
RnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2
YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9
IHJlZjsKLSAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAgbV9zdGVuY2lsRnVuY01h
c2tCYWNrID0gbWFzazsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFz
ayk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1NlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNr
KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5j
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAoZmFjZSkgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZST05UX0FORF9CQUNLOgotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0g
cmVmOwotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAgICAgICAgbV9zdGVu
Y2lsRnVuY01hc2sgPSBtYXNrOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNr
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKLSAg
ICAgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sg
PSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNL
OgotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAgICAgICAgbV9zdGVuY2ls
RnVuY01hc2tCYWNrID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0
ZW5jaWxGdW5jU2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwg
bWFzayk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayhHQzNE
dWludCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKLSAgICBtX3N0ZW5jaWxNYXNrQmFj
ayA9IG1hc2s7Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwg
R0MzRHVpbnQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAg
ICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAg
ICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZST05UOgotICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKLSAgICAg
ICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAic3RlbmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFz
ayk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AoR0MzRGVudW0g
ZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnN0ZW5j
aWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVu
dW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRl
KGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQq
IHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRklYTUU6IEZvciBub3cgd2Ug
aWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQuCi0gICAgZWMgPSAwOwotICAgIFdlYkdMVGV4dHVy
ZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1
ZSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBO
b3RUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUpKTsKLSAgICBBU1NFUlQodGV4KTsKLSAgICBBU1NF
UlQoIWxldmVsIHx8ICFXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAg
aWYgKCFwaXhlbHMpIHsKLSAgICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVt
ZW50YXRpb24gY2xlYXJzIHRleHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9y
ZSB0cnVlLgotICAgICAgICAvLyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFy
ZSB1c2luZyBBTkdMRV9kZXB0aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcwotICAgICAg
ICAvLyBjYW4gbm90IGJlIGNsZWFyZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJlIGNsZWFy
ZWQgYnkgYmluZGluZyB0byBhbiBmYm8gYW5kIGNhbGxpbmcKLSAgICAgICAgLy8gY2xlYXIuCi0g
ICAgICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQotICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
Ym9vbCBzdWNjZWVkID0gbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0
LCB0eXBlLCBtX3VucGFja0FsaWdubWVudCk7Ci0gICAgICAgICAgICBpZiAoIXN1Y2NlZWQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZv
cm1hdCkpOwotICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpOwotICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+bW92
ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSB0ZXhJ
bWFnZTJEIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3Qg
aGF2ZSB0aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KLSAgICAgICAgICAgIHRleC0+bWFya0ludmFs
aWQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIHR5cGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2Us
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZs
aXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVj
ID0gMDsKLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlw
bHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQz
RDo6Tk9ORSk7Ci0gICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9
IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0Q6OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwotICAg
IGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERh
dGEoKTsKLQotICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05v
dGhpbmcgJiYgIWZsaXBZKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVs
c2UgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQ
aXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQs
IGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQo
KSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAx
KQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBB
Q0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0
eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsK
LSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhl
bFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGln
bm1lbnQpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5j
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUg
ZnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCkK
LXsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBmdW5j
dGlvblR5cGUsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkdM
VGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoZnVuY3Rpb25OYW1lLCB0
YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKGZ1bmN0aW9uVHlwZSA9PSBOb3RUZXhTdWJJbWFnZTJEKSB7Ci0gICAgICAgIGlm
IChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZl
clZpZXcsIGZ1bmN0aW9uIHZhbGlkYXRlVGV4RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhl
ciB0byB2YWxpZGF0ZSB0aGUgU2V0dGFibGVUZXhGb3JtYXQKLSAgICAgICAgLy8gYnkgY2hlY2tp
bmcgaWYgdGhlIEFycmF5QnVmZmVyVmlldyBpcyBudWxsIG9yIG5vdC4KLSAgICAgICAgaWYgKHNv
dXJjZVR5cGUgIT0gU291cmNlQXJyYXlCdWZmZXJWaWV3KSB7Ci0gICAgICAgICAgICBpZiAoIXZh
bGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
ICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9u
TmFtZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92
ZXJmbG93IGhhcHBlbnMgZmlyc3QuCi0gICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8
IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVu
c2lvbnMiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoeG9mZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwg
eW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRleHR1cmUtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBl
KHRhcmdldCwgbGV2ZWwpICE9IHR5cGUpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlw
ZSBhbmQgZm9ybWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzLCBOdWxsQWxsb3dlZCkKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVu
YygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywg
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZvaWQqIGRhdGEgPSBwaXhl
bHMgPyBwaXhlbHMtPmJhc2VBZGRyZXNzKCkgOiAwOwotICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1w
RGF0YTsKLSAgICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOwotICAgIGlmIChk
YXRhICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKLSAg
ICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV91bnBhY2tBbGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcERhdGEpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOwotICAgICAgICBjaGFuZ2VVbnBhY2tB
bGlnbm1lbnQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQot
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5ULCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgIGZvcm1h
dCwgdHlwZSwgZGF0YSwgZWMpOwotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAg
ICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElH
Tk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAw
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGJvb2wg
bmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlz
IGFsd2F5cyBvZiBmb3JtYXQgUkdCQTguCi0gICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQg
aWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFu
ZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAo
IW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsK
LSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQs
IHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQot
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5ULCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgp
LCBlYyk7Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5w
YWNrQWxpZ25tZW50KTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBpbnQgZGV2aWNlU2NhbGVGYWN0b3IpCi17Ci0gICAgSW50U2l6ZSBzaXplKHdpZHRoLCBo
ZWlnaHQpOwotICAgIHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgIEltYWdlQnVm
ZmVyKiBidWYgPSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7Ci0gICAg
aWYgKCFidWYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
Ok9VVF9PRl9NRU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2lu
dCgpLCBpbWFnZS0+c2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgp
LCBzaXplKTsKLSAgICBidWYtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdl
KEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdl
MkQiLCBpbWFnZSwgZWMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlRm9yUmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1h
Z2UtPnJlbmRlcmVyKCkpOwotICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQot
ICAgICAgICBpbWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5k
ZXIuZ2V0KCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOwotCi0gICAgaWYg
KCFpbWFnZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4
U3ViSW1hZ2UyRCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0
KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRleElt
YWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGlt
YWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0Vs
ZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQo
InRleEltYWdlMkQiLCBjYW52YXMsIGVjKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJE
IiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQs
IHRydWUpOwotICAgIC8vIElmIHBvc3NpYmxlLCBjb3B5IGZyb20gdGhlIGNhbnZhcyBlbGVtZW50
IGRpcmVjdGx5IHRvIHRoZSB0ZXh0dXJlCi0gICAgLy8gdmlhIHRoZSBHUFUsIHdpdGhvdXQgYSBy
ZWFkLWJhY2sgdG8gc3lzdGVtIG1lbW9yeS4KLSAgICAvLwotICAgIC8vIEZJWE1FOiByZXN0cmlj
dGlvbiBvZiAoUkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZVEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVu
Ci0gICAgLy8gSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlv
bnMgYXJlIGZ1bGx5IGZ1bmN0aW9uYWwuCi0gICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJEID09IHRhcmdldCAmJiB0ZXh0dXJlICYmIHR5cGUgPT0gdGV4dHVyZS0+Z2V0VHlwZSh0
YXJnZXQsIGxldmVsKQotICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpS
R0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSAmJiB0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBidWZm
ZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwotICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29w
eVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBp
bnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkg
ewotICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5cGUpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVmUHRyPEltYWdlRGF0
YT4gaW1hZ2VEYXRhID0gY2FudmFzLT5nZXRJbWFnZURhdGEoKTsKLSAgICBpZiAoaW1hZ2VEYXRh
KQotICAgICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwotICAgIGVsc2UKLSAgICAgICAgdGV4SW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2Fu
dmFzLT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91
bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLSNpZiBFTkFC
TEUoVklERU8pCi1QYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVv
RnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJh
Y2tpbmdTdG9yZUNvcHksIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIEludFNpemUgc2l6ZSh2aWRl
by0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7Ci0gICAgSW1hZ2VCdWZmZXIq
IGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKLSAgICBpZiAo
IWJ1ZikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VU
X09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpOwotICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1H
UFUgdGV4dHVyZSBjb3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgotICAgIHZpZGVvLT5wYWlu
dEN1cnJlbnRGcmFtZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOwotICAgIHJl
dHVybiBidWYtPmNvcHlJbWFnZShiYWNraW5nU3RvcmVDb3B5KTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVu
dCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleElt
YWdlMkQiLCB2aWRlbywgZWMpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdl
MkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVp
Z2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IEdvIHRocm91Z2ggdGhlIGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3
aXRob3V0IGEgcmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KLSAgICAvLyBP
dGhlcndpc2UsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgU1cgcGF0aC4KLSAgICAv
LyBGSVhNRTogVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3JtYXQgc2hv
dWQgYmUgUkdCIG9yIFJHQkEsCi0gICAgLy8gdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBh
bmQgbGV2ZWwgc2hvdWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KLSAg
ICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFn
ZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQgPT0gdGFyZ2V0ICYmIHRleHR1cmUKLSAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKLSAgICAg
ICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAm
JiAodGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkKLSAgICAg
ICAgJiYgIWxldmVsKSB7Ci0gICAgICAgIGlmICh2aWRlby0+Y29weVZpZGVvVGV4dHVyZVRvUGxh
dGZvcm1UZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGxldmVsLCB0
eXBlLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0Zs
aXBZKSkgewotICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQo
KSwgdHlwZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBOb3JtYWwgcHVyZSBTVyBwYXRoLgotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0Zy
YW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsK
LSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgdGV4SW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdy
YXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgZWMpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZs
b2F0IHBhcmFtZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKLXsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJl
KiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZh
bHNlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAocG5hbWUp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKLSAgICAgICAgaWYgKChpc0Zsb2F0
ICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFUEVBVCkKLSAgICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpSRVBFQVQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMKLSAgICAgICAgaWYgKCFtX2V4dFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgRVhU
X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKGlzRmxvYXQpIHsKLSAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJmKHBuYW1l
LCBwYXJhbWYpOwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFt
ZSwgcGFyYW1mKTsKLSAgICB9IGVsc2UgewotICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5h
bWUsIHBhcmFtaSk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBu
YW1lLCBwYXJhbWkpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBh
cmFtKQotewotICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBwYXJhbSwgMCwgdHJ1ZSk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgdGV4UGFyYW1l
dGVyKHRhcmdldCwgcG5hbWUsIDAsIHBhcmFtLCBmYWxzZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qg
dm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogRm9yIG5v
dyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAotICAgIGVjID0gMDsKLSAgICBBU1NFUlQo
IWlzQ29udGV4dExvc3QoKSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMo
InRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSkpOwotICAgIEFTU0VSVCh2YWxpZGF0ZVNpemUo
InRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRl
U2V0dGFibGVUZXhGb3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQpKTsKLSAgICBXZWJHTFRl
eHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJn
ZXQsIHRydWUpOwotICAgIGlmICghdGV4KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVCgoeG9mZnNldCArIHdpZHRoKSA+
PSAwKTsKLSAgICBBU1NFUlQoKHlvZmZzZXQgKyBoZWlnaHQpID49IDApOwotICAgIEFTU0VSVCh0
ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpID49ICh4b2Zmc2V0ICsgd2lkdGgpKTsKLSAgICBB
U1NFUlQodGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkgPj0gKHlvZmZzZXQgKyBoZWlnaHQp
KTsKLSAgICBBU1NFUlQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSA9PSBm
b3JtYXQpOwotICAgIEFTU0VSVCh0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gdHlwZSk7
Ci0gICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdl
RXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29s
b3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOyAgCi0gICAgaWYg
KCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJE
IiwgImJhZCBpbWFnZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFn
ZVNvdXJjZUZvcm1hdCgpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3Ag
PSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKLSAgICBjb25zdCB2b2lkKiBpbWFnZVBp
eGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7Ci0KLSAgICBib29sIG5l
ZWRDb252ZXJzaW9uID0gdHJ1ZTsKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFs
cGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKLSAg
ICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFt
X2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5
cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFn
ZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmlt
YWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQi
LCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQt
PnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAg
ICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFn
ZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsICBuZWVkQ29udmVyc2lv
biA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKLSAgICBpZiAobV91bnBhY2tB
bGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0Nv
bnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVUZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIHBpeGVscywgTnVsbE5vdEFsbG93ZWQpCi0gICAgICAgIHx8ICF2YWxp
ZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1
ZmZlclZpZXcsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0
LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZvaWQqIGRh
dGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRh
OwotICAgIGJvb2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0gICAgaWYgKGRhdGEg
JiYgKG1fdW5wYWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgewotICAgICAg
ICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Vu
cGFja0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7Ci0gICAgICAgIGNoYW5nZVVucGFja0FsaWdu
bWVudCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAg
ICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElH
Tk1FTlQsIDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOwotICAgIGlm
IChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWko
R3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhl
bHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNv
dXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBw
aXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBib29sIG5lZWRD
b252ZXJzaW9uID0gdHJ1ZTsKLSAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdh
eXMgb2YgZm9ybWF0IFJHQkE4LgotICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRl
c3RpbmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8g
RmxpcCBvciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgaWYgKGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEpCi0gICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBl
LCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVCwgMSk7Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCBmb3JtYXQsIHR5
cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgp
LCBlYyk7Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5w
YWNrQWxpZ25tZW50KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQi
LCBpbWFnZSwgZWMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
Rm9yUmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2Ut
PnJlbmRlcmVyKCkpOwotICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQotICAg
ICAgICBpbWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIu
Z2V0KCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOwotCi0gICAgaWYgKCFp
bWFnZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3Vi
SW1hZ2UyRCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBp
bWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3Jt
YXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0ZXhT
dWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5
cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdl
LCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlSFRNTENhbnZhc0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCBjYW52YXMsIGVjKQotICAgICAg
ICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291
cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgY2FudmFzLT53aWR0
aCgpLCBjYW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBj
YW52YXMtPmdldEltYWdlRGF0YSgpOwotICAgIGlmIChpbWFnZURhdGEpCi0gICAgICAgIHRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBp
bWFnZURhdGEuZ2V0KCksIGVjKTsKLSAgICBlbHNlCi0gICAgICAgIHRleFN1YkltYWdlMkRJbXBs
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5j
b3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLSNpZiBFTkFCTEUoVklE
RU8pCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAg
ICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQs
IFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdmlkZW8tPnZp
ZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNl
dCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Ug
PSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2Rl
KCksIGVjKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgdGV4U3ViSW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBp
bWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9u
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1
cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0
LT51bmlmb3JtMWYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYtPmxlbmd0aCgpLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAx
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCBzaXplLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQg
eCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ1bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVSX0NVQkUpICYmIHggPj0gKGludCltX3RleHR1cmVVbml0cy5zaXpl
KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJ1bmlmb3JtMWkiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB4KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0x
aXYiLCBsb2NhdGlvbiwgdiwgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlv
bi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50
eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHYtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh2
LT5kYXRhKClbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7
Ci0gICAgICAgICAgICAgICAgTE9HKFdlYkdMLCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVk
XT0lZC4gTG9jYXRpb24gdHlwZSA9ICUwNFguIiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2
LT5kYXRhKClbaV0sIGxvY2F0aW9uLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIs
ICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdy
YXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSX0NVQkUpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7ICsraSkgewotICAgICAgICAgICAg
aWYgKCgoR0MzRGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5z
aXplKCkpKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0
Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVu
aWZvcm0yZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHgsIHkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlm
b3JtMmZ2IiwgbG9jYXRpb24sIHYsIDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRl
eHQtPnVuaWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+
ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAv
IDIsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
dW5pZm9ybTJpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9j
YXRpb24oKSwgeCwgeSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
Mml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlm
b3JtMml2IiwgbG9jYXRpb24sIHYsIDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRl
eHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+
ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJz
KCJ1bmlmb3JtMml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAy
LCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwg
R0MzRGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dy
YW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9n
cmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0z
Zihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgMykpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
di0+bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAz
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxv
Y2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAh
PSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zaSIsICJsb2NhdGlvbiBub3Qg
Zm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtM2kobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAz
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9u
LCB2LCBzaXplLCAzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3Jt
M2l2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQg
dywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ1bmlmb3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9u
LT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycygidW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCA0KSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5n
dGgoKSAvIDQsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0
KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHNpemUgLyA0LCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFt
KCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24g
bm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fY29udGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlv
biwgdiwgNCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBs
b2NhdGlvbiwgdiwgc2l6ZSwgNCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+
dW5pZm9ybTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5
KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxv
YXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
VW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJh
bnNwb3NlLCB2LCBzaXplLCA0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHRyYW5zcG9zZSwg
dik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIHYsIDkpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDksIHRyYW5zcG9zZSwgdi0+
ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgz
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIs
IGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8g
OSwgdHJhbnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2IiwgbG9j
YXRpb24sIHRyYW5zcG9zZSwgdiwgMTYpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDE2
LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVu
aWZvcm1NYXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHNpemUgLyAxNiwgdHJhbnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAg
ICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJ1c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRl
ZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkKLSAgICAgICAgcHJvZ3JhbSA9
IDA7Ci0gICAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ1c2VQcm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKG1fY3VycmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgewotICAgICAgICBp
ZiAobV9jdXJyZW50UHJvZ3JhbSkKLSAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0
YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBw
cm9ncmFtOwotICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dy
YW0pKTsKLSAgICAgICAgaWYgKHByb2dyYW0pCi0gICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFj
aGVkKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQ
cm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJ2YWxpZGF0ZVByb2dyYW0iLCBwcm9ncmFtKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9n
cmFtKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQotewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2
ZXJ0ZXhBdHRyaWIxZiIsIGluZGV4LCAxLCB2MCwgMC4wZiwgMC4wZiwgMS4wZik7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgs
IEZsb2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJp
YjFmdiIsIGluZGV4LCB2LCAxKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6
ZSkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2
LCBzaXplLCAxKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKLXsKLSAgICB2
ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAsIHYxLCAwLjBm
LCAxLjBmKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJm
dihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2
SW1wbCgidmVydGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQq
IHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0
cmliMmZ2IiwgaW5kZXgsIHYsIHNpemUsIDIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZs
b2F0IHYxLCBHQzNEZmxvYXQgdjIpCi17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0
dHJpYjNmIiwgaW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJy
YXkqIHYpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRl
eCwgdiwgMyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIz
ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAg
dmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgc2l6ZSwgMyk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZs
b2F0IHYzKQotewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZiIsIGluZGV4
LCA0LCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKLXsKLSAgICB2
ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCA0KTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdklt
cGwoInZlcnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCBzaXplLCA0KTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdD
M0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNp
emVpIHN0cmlkZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAg
ICAgICByZXR1cm47Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QllURToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
OgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIs
ICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXgg
Pj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbmRl
eCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc2l6ZSA8
IDEgfHwgc2l6ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUgfHwgb2Zmc2V0IDwg
MCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIHNpemUsIHN0cmlkZSBvciBvZmZz
ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZl
cikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZF
UiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQs
IHNpemUsIHR5cGUgYW5kIHN0cmlkZQotICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IHNpemVJ
bkJ5dGVzKHR5cGUpOwotICAgIGlmICghdHlwZVNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50
ZXIiLCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKChz
dHJpZGUgJSB0eXBlU2l6ZSkgfHwgKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkgJSB0
eXBlU2l6ZSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zm
c2V0IG5vdCB2YWxpZCBmb3IgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdD
M0RzaXplaSBieXRlc1BlckVsZW1lbnQgPSBzaXplICogdHlwZVNpemU7Ci0KLSAgICBtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVs
ZW1lbnQsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPnZlcnRl
eEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3Rh
dGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwg
aGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwg
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxv
c3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4
dCIsICJjb250ZXh0IGFscmVhZHkgbG9zdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbV9jb250ZXh0R3JvdXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKLSAgICBtX2NvbnRleHRM
b3N0TW9kZSA9IG1vZGU7Ci0KLSAgICBpZiAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpIHsKLSAg
ICAgICAgLy8gSW5mb3JtIHRoZSBlbWJlZGRlciB0aGF0IGEgbG9zdCBjb250ZXh0IHdhcyByZWNl
aXZlZC4gSW4gcmVzcG9uc2UsIHRoZSBlbWJlZGRlciBtaWdodAotICAgICAgICAvLyBkZWNpZGUg
dG8gdGFrZSBhY3Rpb24gc3VjaCBhcyBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gdG8g
dXNlIFdlYkdMIGFnYWluLgotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY2FudmFzKCktPmRv
Y3VtZW50KCkuZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5k
aWRMb3NlV2ViR0xDb250ZXh0KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGlj
c1Jlc2V0U3RhdHVzQVJCKCkpOwotICAgIH0KLQotICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVj
dHMoKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgLy8gTWFrZSBhYnNv
bHV0ZWx5IHN1cmUgd2UgZG8gbm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRlZCB0ZXh0dXJl
IG9yIGZyYW1lYnVmZmVyLgotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJp
bmRpbmcoMCk7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5n
KDApOwotICAgIH0KLQotICAgIC8vIFRoZXJlIGlzIG5vIGRpcmVjdCB3YXkgdG8gY2xlYXIgZXJy
b3JzIGZyb20gYSBHTCBpbXBsZW1lbnRhdGlvbiBhbmQKLSAgICAvLyBsb29waW5nIHVudGlsIGdl
dEVycm9yKCkgYmVjb21lcyBOT19FUlJPUiBtaWdodCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGlm
Ci0gICAgLy8gdGhlIGRyaXZlciBvciBjb250ZXh0IGltcGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4g
U28sIGxvb3AgYSByZWFzb25hYmx5Ci0gICAgLy8gbGFyZ2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNs
ZWFyIGFueSBleGlzdGluZyBlcnJvcnMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsr
aSkgewotICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUikKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBDb25zb2xlRGlz
cGxheVByZWZlcmVuY2UgZGlzcGxheSA9IChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgPyBEaXNw
bGF5SW5Db25zb2xlOiBEb250RGlzcGxheUluQ29uc29sZTsKLSAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMLCAibG9zZUNvbnRleHQiLCAi
Y29udGV4dCBsb3N0IiwgZGlzcGxheSk7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyByZXN0b3JhdGlv
biB1bmxlc3MgdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVuCi0gICAgLy8gZGlz
cGF0Y2hlZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgotICAgIG1fcmVzdG9y
ZUFsbG93ZWQgPSBmYWxzZTsKLQotICAgIC8vIEFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2ggb2Yg
dGhlIGNvbnRleHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50Ci0gICAgLy8gdGhlIHNwZWMgYmVo
YXZpb3Igb2YgcXVldWVpbmcgYSB0YXNrLgotICAgIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50
VGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Zm9yY2VSZXN0b3JlQ29udGV4dCgpCi17Ci0gICAgaWYgKCFpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCBub3QgbG9zdCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKSB7Ci0gICAg
ICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgInJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQgcmVzdG9yYXRpb24gbm90IGFsbG93ZWQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXN0b3JlVGltZXIuaXNB
Y3RpdmUoKSkKLSAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi1Q
bGF0Zm9ybUxheWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25z
dAotewotICAgIHJldHVybiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lS
ZXNvbHV0aW9uKSA/IG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpIDogMDsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVj
dCogb2JqZWN0KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdChXZWJHTFNo
YXJlZE9iamVjdCogb2JqZWN0KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24pCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAg
ICBtX2NvbnRleHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2Jq
ZWN0KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29udGV4dE9iamVjdHMucmVtb3ZlKG9iamVjdCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVj
dCogb2JqZWN0KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBtX2NvbnRl
eHRPYmplY3RzLmFkZChvYmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKG1fY29udGV4dE9iamVj
dHMuc2l6ZSgpID4gMCkgewotICAgICAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+Ojpp
dGVyYXRvciBpdCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKLSAgICAgICAgKCppdCktPmRl
dGFjaENvbnRleHQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0b3AoKQotewotICAgIGlmICghaXNDb250ZXh0TG9z
dCgpICYmICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgZm9yY2VMb3N0
Q29udGV4dChTeW50aGV0aWNMb3N0Q29udGV4dCk7Ci0gICAgICAgIGRlc3Ryb3lHcmFwaGljc0Nv
bnRleHQzRCgpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEYm9vbGVh
biB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgJnZhbHVlKTsK
LSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci19Ci0K
LVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5BcnJheVBhcmFt
ZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX1dSSVRFTUFTSykgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKDAsIDApOwotICAgIH0KLSAgICBHQzNEYm9vbGVhbiB2YWx1
ZVs0XSA9IHswfTsKLSAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Ci0g
ICAgYm9vbCBib29sVmFsdWVbNF07Ci0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDQ7ICsraWkp
Ci0gICAgICAgIGJvb2xWYWx1ZVtpaV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtpaV0pOwot
ICAgIHJldHVybiBXZWJHTEdldEluZm8oYm9vbFZhbHVlLCA0KTsKLX0KLQotV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUp
Ci17Ci0gICAgR0MzRGZsb2F0IHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEZsb2F0dihw
bmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLX0KLQotV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW50UGFyYW1ldGVyKEdDM0RlbnVt
IHBuYW1lKQotewotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYocG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci19
Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIG1f
Y29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNE
ZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07Ci0gICAgbV9jb250
ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwot
ICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VE
X1BPSU5UX1NJWkVfUkFOR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9M
SU5FX1dJRFRIX1JBTkdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdF
OgotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9DTEVBUl9WQUxVRToKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci19Ci0KLVdl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0
ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlZJRVdQT1JUOgotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja1RleHR1cmVDb21wbGV0ZW5lc3Mo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCi17Ci0gICAgYm9v
bCByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKLSAgICBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRl
bnNpb25GbGFnIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxXZWJHTFRleHR1cmU6OlRleHR1cmVF
eHRlbnNpb25GbGFnPigobV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRl
eHR1cmVFeHRlbnNpb25GbG9hdExpbmVhckVuYWJsZWQgOiAwKSB8IChtX29lc1RleHR1cmVIYWxm
RmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25IYWxmRmxvYXRMaW5l
YXJFbmFibGVkIDogMCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0
dXJlVW5pdHMuc2l6ZSgpOyArK2lpKSB7Ci0gICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNbaWld
LnRleHR1cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmct
Pm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKLSAgICAgICAgICAgIHx8IChtX3Rl
eHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lp
XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25z
KSkpIHsKLSAgICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7Ci0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKLSAgICAgICAgICAgICAg
ICByZXNldEFjdGl2ZVVuaXQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNldEFj
dGl2ZVVuaXQpIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkp
OwotICAgICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXgyRDsKLSAgICAgICAgICAgIFdlYkdMVGV4
dHVyZSogdGV4Q3ViZU1hcDsKLSAgICAgICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7Ci0gICAg
ICAgICAgICAgICAgU3RyaW5nIG1zZyhTdHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVyZSB1
bml0ICIpICsgU3RyaW5nOjpudW1iZXIoaWkpCi0gICAgICAgICAgICAgICAgICAgICsgIiBpcyBu
b3QgcmVuZGVyYWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21wYXRp
YmxlIHRleHR1cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgotICAg
ICAgICAgICAgICAgICAgICArICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUgd2l0
aCBsaW5lYXIgZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxmLWZs
b2F0IGxpbmVhciBleHRlbnNpb24gZW5hYmxlZC4iKTsKLSAgICAgICAgICAgICAgICBwcmludEdM
V2FybmluZ1RvQ29uc29sZShmdW5jdGlvbk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgICAgICAgICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7Ci0gICAgICAgICAgICAg
ICAgdGV4Q3ViZU1hcCA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4
dHVyZTJEQmluZGluZy5nZXQoKTsKLSAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90ZXh0
dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBt
X3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJl
KGV4dGVuc2lvbnMpKQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOwotICAgICAg
ICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90
ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0
dXJlKGV4dGVuc2lvbnMpKQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhDdWJl
TWFwKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKLSAgICAg
ICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgx
KCkKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGJsYWNrW10gPSB7MCwgMCwgMCwgMjU1fTsKLSAgICBt
X2JsYWNrVGV4dHVyZTJEID0gY3JlYXRlVGV4dHVyZSgpOwotICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmxhY2tUZXh0dXJlMkQtPm9i
amVjdCgpKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKLSAgICBtX2JsYWNrVGV4dHVyZUN1YmVN
YXAgPSBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgbV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmpl
Y3QoKSk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAx
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQt
PnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0g
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
MSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsRm9ybWF0Q29s
b3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpCi17Ci0gICAgdW5zaWdu
ZWQgbmVlZCA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KHRleElu
dGVybmFsRm9ybWF0KTsKLSAgICB1bnNpZ25lZCBoYXZlID0gR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dENoYW5uZWxCaXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3JtYXQpOwotICAgIHJldHVybiAobmVl
ZCAmIGhhdmUpID09IG5lZWQ7Ci19Ci0KLUdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkKLXsKLSAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICByZXR1
cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7Ci0gICAgaWYg
KG1fYXR0cmlidXRlcy5hbHBoYSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOwotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwotfQotCi1pbnQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQotewotICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCi0g
ICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgp
OwotICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53
aWR0aCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7
Ci19Ci0KLWludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWln
aHQoKQotewotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0
Q29sb3JCdWZmZXJIZWlnaHQoKTsKLSAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3
aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVi
dWZmZXJTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLVdlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKLXsKLSAgICBXZWJH
TFRleHR1cmUqIHRleHR1cmUgPSBudWxscHRyOwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgdGV4dHVyZSA9IG1f
dGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcuZ2V0KCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBpZiAoIXVzZVNpeEVudW1zRm9yQ3ViZU1h
cCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgdGV4dHVyZSA9IG1f
dGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5n
ZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUDoKLSAgICAgICAgaWYgKHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRz
W21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJl
IHRhcmdldCIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKCF0ZXh0
dXJlKQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1cmUiKTsKLSAgICByZXR1cm4gdGV4
dHVyZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlTG9jYXRpb25M
ZW5ndGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsK
LSAgICBjb25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2OwotICAgIGlm
IChzdHJpbmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlU2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGlu
dCB5KQotewotICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic2l6
ZSA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RyaW5nKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoIXZhbGlk
YXRlQ2hhcmFjdGVyKHN0cmluZ1tpXSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzdHJpbmcg
bm90IEFTQ0lJIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQotewotICAgIHN3aXRjaCAo
Zm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkxVTUlOQU5DRV9BTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0
cyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OlNSR0JfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoK
LSAgICBkZWZhdWx0OgotICAgICAgICBpZiAoKGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0Jf
RVhUIHx8IGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKQotICAgICAgICAg
ICAgJiYgbV9leHRzUkdCKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgaWYg
KG1fb2VzVGV4dHVyZUZsb2F0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgaWYgKG1fb2VzVGV4
dHVyZUhhbGZGbG9hdCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0lOVF8yNF84OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUOgotICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0
dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFZlcmlm
eSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgot
ICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpIQUxGX0ZMT0FUX09FUykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHR5cGUgZm9yIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQ6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAgICAgJiYgdHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdHlwZSBmb3IgUkdCIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgotICAgICAgICBpZiAo
dHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAgICAgJiYg
dHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNAotICAgICAg
ICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVf
MQotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKLSAgICAg
ICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgIGlmICgh
bV93ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3Jt
YXQuIERFUFRIX0NPTVBPTkVOVCBub3QgZW5hYmxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfSU5UKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBm
b3IgREVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOwotICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0
aFRleHR1cmUpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9T
VEVOQ0lMIG5vdCBlbmFibGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8y
NF84KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhf
U1RFTkNJTCBmb3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAobGV2ZWwgPiAwKSB7Ci0gICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBt
dXN0IGJlIDAgZm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7Ci0gICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgaWYg
KGxldmVsIDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgotICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0
dXJlTGV2ZWwpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKLSAgICAgICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBUaGlz
IGZ1bmN0aW9uIG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1
ZSBhbmQgZG9uJ3QKLSAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGls
bGVnYWwuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleEZ1
bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkK
LXsKLSAgICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQg
dHlwZSBjb21iaW5hdGlvbi4KLSAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFr
aW5nIEhUTUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKLSAgICAvLyB0ZW1wb3JhcnkgZGF0YSBi
YXNlZCBvbiB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgotICAgIGlmICgh
dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwg
bGV2ZWwpIHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2
ZWwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdo
dCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVGb3JM
ZXZlbCA9IHBvdygyLjAsIG1fbWF4VGV4dHVyZUxldmVsIC0gMSAtIGxldmVsKTsKLSAgICBzd2l0
Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0g
ICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4
VGV4dHVyZVNpemVGb3JMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhl
aWdodCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhT
dWJJbWFnZTJEICYmIHdpZHRoICE9IGhlaWdodCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndp
ZHRoICE9IGhlaWdodCBmb3IgY3ViZSBtYXAiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBGb3Ig
dGV4SW1hZ2Ugd2lkdGggPT0gaGVpZ2h0LgotICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2UgdGhh
dCB3aWxsIGJlIGNoZWNrZWQgd2hlbiBjaGVja2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGluIHJh
bmdlLgotICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBt
YXAiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZv
cm1hdCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGJvcmRlcikgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAiYm9yZGVyICE9IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2
ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZl
clZpZXcqIHBpeGVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE51bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKLXsKLSAgICBpZiAoIXBpeGVscykg
ewotICAgICAgICBpZiAoZGlzcG9zaXRpb24gPT0gTnVsbEFsbG93ZWQpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBl
KGZ1bmN0aW9uTmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3Jt
YXQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgICAgICBpZiAocGl4ZWxz
LT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAidHlwZSBVTlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXki
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGlmIChw
aXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAidHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50
MTZBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVy
ZV9mbG9hdAotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQz
MikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZl
clZpZXcgbm90IEZsb2F0MzJBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZf
RkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Ci0gICAgICAgIC8vIEFzIHBlciB0
aGUgc3BlY2lmaWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdoZW4KLSAg
ICAgICAgLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgotICAgICAgICBpZiAo
cGl4ZWxzKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9BVF9PRVMg
YnV0IEFycmF5QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVz
UmVxdWlyZWQ7Ci0gICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNp
emVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQs
ICZ0b3RhbEJ5dGVzUmVxdWlyZWQsIDApOwotICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9fRVJST1IpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1Jl
cXVpcmVkKSB7Ci0gICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7Ci0gICAgICAg
ICAgZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlw
ZSwgd2lkdGgsIGhlaWdodCwgMSwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7Ci0gICAgICAgICAg
aWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpID09IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJl
cXVlc3Qgd2l0aCBVTlBBQ0tfQUxJR05NRU5UID4gMSIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5
QnVmZmVyVmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKLXsK
LSAgICByZXR1cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KTsK
LX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1
bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykK
LXsKLSAgICBpZiAoIXBpeGVscykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgYnl0ZXNSZXF1aXJlZCA9
IDA7Ci0KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9BVENfUkdCX0FNRDoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1Np
emUgPSA4OwotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKLSAgICAgICAg
ICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OwotICAgICAgICAgICAgaW50IG51bUJsb2Nr
c0Fjcm9zcyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKLSAgICAg
ICAgICAgIGludCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8g
a0Jsb2NrSGVpZ2h0OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9z
cyAqIG51bUJsb2Nrc0Rvd24gKiBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFf
QU1EOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9M
QVRFRF9BTFBIQV9BTUQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tT
aXplID0gMTY7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAg
ICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgICAgICBpbnQgbnVtQmxv
Y2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOwotICAg
ICAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkg
LyBrQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNy
b3NzICogbnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9J
TUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFf
SU1HOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7Ci0g
ICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4OwotICAgICAgICAgICAgY29uc3Qg
aW50IGtCbG9ja0hlaWdodCA9IDg7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6
bWF4KHdpZHRoLCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkg
KiA0ICsgNykgLyBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKLSAgICAg
ICAgewotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OwotICAgICAgICAgICAg
Y29uc3QgaW50IGtCbG9ja1dpZHRoID0gMTY7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2Nr
SGVpZ2h0ID0gODsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgs
IGtCbG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAv
IGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSAhPSBieXRlc1JlcXVpcmVkKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBjb3Jy
ZWN0IGZvciBkaW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
Q29tcHJlc3NlZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKLSAgICAgICAgY29uc3QgR0Mz
RHNpemVpIGtCbG9ja1dpZHRoID0gNDsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja0hl
aWdodCA9IDQ7Ci0gICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0YXJnZXQg
PyBtX21heFRleHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7Ci0gICAgICAgIGNv
bnN0IEdDM0RzaXplaSBtYXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVyZVNpemUgPj4g
bGV2ZWw7Ci0gICAgICAgIGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0aCA9PSAxKSB8
fCAobGV2ZWwgJiYgd2lkdGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tXaWR0aCkgJiYgd2lk
dGggPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7Ci0gICAgICAgIGJvb2wgaGVpZ2h0VmFsaWQg
PSAobGV2ZWwgJiYgaGVpZ2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQgPT0gMikgfHwgKCEo
aGVpZ2h0ICUga0Jsb2NrSGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lv
bik7Ci0gICAgICAgIGlmICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQ
VjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQ
VjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQ
UFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJC
UFBWMV9JTUc6Ci0gICAgICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBwb3dlcnMgb2Yg
Mi4KLSAgICAgICAgaWYgKCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0ICYgKGhlaWdo
dCAtIDEpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52
YWxpZCBmb3IgbGV2ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVz
c2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwg
V2ViR0xUZXh0dXJlKiB0ZXgpCi17Ci0gICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAw
KSB7Ci0gICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIpOwotICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKLSAgICAgICAgY29uc3QgaW50IGtC
bG9ja1dpZHRoID0gNDsKLSAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAg
ICAgIGlmICgoeG9mZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdo
dCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBt
dWx0aXBsZSBvZiA0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHdpZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkK
LSAgICAgICAgICAgIHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQs
IGxldmVsKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiBy
YW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0
LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICB9Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzogewotICAgICAgICBpZiAo
eG9mZnNldCB8fCB5b2Zmc2V0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQg
YW5kIHlvZmZzZXQgbXVzdCBiZSB6ZXJvIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZl
bCkKLSAgICAgICAgICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVs
KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhp
c3RpbmcgbGV2ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUs
IHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7Ci0gICAgfQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gbW9kZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpQT0lOVFM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9TVFJJUDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1A6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TElORVM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVf
U1RSSVA6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBkcmF3IG1vZGUiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAg
ICBpZiAobV9zdGVuY2lsTWFzayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5j
UmVmICE9IG1fc3RlbmNpbEZ1bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3Rl
bmNpbEZ1bmNNYXNrQmFjaykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNr
IHN0ZW5jaWxzIHNldHRpbmdzIGRvIG5vdCBtYXRjaCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IGZ1bmMpCi17Ci0gICAgc3dpdGNoIChmdW5jKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TkVWRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMRVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JF
QVRFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFV
QUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpwcmludEdMRXJyb3JUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewot
ICAgIGlmICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC0tbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQ7Ci0gICAgcHJpbnRXYXJuaW5n
VG9Db25zb2xlKG1lc3NhZ2UpOwotCi0gICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxs
b3dlZCkKLSAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDogdG9vIG1hbnkgZXJy
b3JzLCBubyBtb3JlIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBjb25zb2xlIGZvciB0
aGlzIGNvbnRleHQuIik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludFdh
cm5pbmdUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghY2FudmFz
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS5hZGRDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywg
bWVzc2FnZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1l
YnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCi17Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJn
ZXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzd2l0Y2ggKGF0dGFjaG1l
bnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIGF0
dGFjaG1lbnQgPiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKLSAgICAgICAg
ICAgICYmIGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RlVOQ19TVUJUUkFDVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1JF
VkVSU0VfU1VCVFJBQ1Q6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQ6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQ6Ci0gICAgICAgIGlmICgobW9kZSA9PSBFeHRlbnNpb25z
M0Q6Ok1JTl9FWFQgfHwgbW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJs
ZW5kTWluTWF4KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2Rl
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKLXsKLSAgICBpZiAoKChzcmMgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQotICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpP
TkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKQotICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfQ09OU1RBTlRfQ09MT1IpCi0gICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9N
SU5VU19DT05TVEFOVF9BTFBIQSkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRp
YmxlIHNyYyBhbmQgZHN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFi
aWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCi17Ci0gICAgc3dp
dGNoIChjYXApIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RF
U1Q6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgY2FwYWJpbGl0eSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAg
IGlmICghdikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVy
cyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwg
cmVxdWlyZWRNaW5TaXplKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1
aXJlZE1pblNpemUpCi17Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJh
eSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVu
aWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwg
R0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgcmV0dXJu
IHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwg
ZmFsc2UsIHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6
ZSkKLXsKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJp
eFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCks
IHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVk
TWluU2l6ZSkKLXsKLSAgICBpZiAoIWxvY2F0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghdikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAo
dHJhbnNwb3NlKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNp
emUgfHwgKHNpemUgJSByZXF1aXJlZE1pblNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZm
ZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7Ci0gICAg
c3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUjoKLSAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgotICAgICAgICBidWZmZXIgPSBtX2JvdW5k
QXJyYXlCdWZmZXIuZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgc3dpdGNoICh1c2FnZSkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZ
TkFNSUNfRFJBVzoKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKLSAgICB9Ci0gICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB1c2FnZSIpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJubyBpbWFnZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0
IFVSTCYgdXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7Ci0gICAg
aWYgKHVybC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7Ci0gICAgICAgIGVjID0g
U0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFz
RWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1
ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7Ci0gICAg
ICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBp
ZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQo
KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKLSAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0Rz
aXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQg
djIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVl
cy4KLSAgICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIHN3aXRj
aCAoZXhwZWN0ZWRTaXplKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIDI6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2
MCwgdjEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotICAgIFZlcnRleEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVy
dGV4QXR0cmliVmFsdWVbaW5kZXhdOwotICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7Ci0g
ICAgYXR0cmliVmFsdWUudmFsdWVbMV0gPSB2MTsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9
IHYyOwotICAgIGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXpl
KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgs
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNp
emVpIGV4cGVjdGVkU2l6ZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJh
eSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXpl
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlm
IChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3Rl
ZFNpemUpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhB
dHRyaWIxZnYoaW5kZXgsIHYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoK
LSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjNmdihpbmRleCwgdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSA0OgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmliVmFs
dWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0cmli
VmFsdWUuaW5pdFZhbHVlKCk7Ci0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6
ZTsgKytpaSkKLSAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWldID0gdltpaV07Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCi17Ci0gICAgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKLSAgICAKLSAgICBt
X3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJp
bmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyLT5vYmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcp
OwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKLSAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92
ZXJ0ZXhBdHRyaWIwQnVmZmVyOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KDApOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwotICAgIG1f
dmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKLSAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVsxXSA9IDAuMGY7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0g
PSAwLjBmOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKLSAgICBt
X2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgIG1fdmVydGV4QXR0cmliMFVz
ZWRCZWZvcmUgPSBmYWxzZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVs
YXRlVmVydGV4QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KQotewotICAgIGNvbnN0IFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7Ci0gICAgY29uc3QgVmVy
dGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKLSAg
ICBpZiAoIW1fY3VycmVudFByb2dyYW0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29s
IHVzaW5nVmVydGV4QXR0cmliMCA9IG1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRy
aWIwKCk7Ci0gICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMCkKLSAgICAgICAgbV92ZXJ0ZXhBdHRy
aWIwVXNlZEJlZm9yZSA9IHRydWU7Ci0gICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0
ZXhBdHRyaWIwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF1c2luZ1ZlcnRleEF0
dHJpYjAgJiYgIW1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyLT5vYmplY3QoKSk7Ci0gICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0g
KG51bVZlcnRleCArIDEpICogNCAqIHNpemVvZihHQzNEZmxvYXQpOwotICAgIGlmIChidWZmZXJE
YXRhU2l6ZSA+IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0
LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFT
aXplLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAgbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFTaXplOwotICAgICAgICBtX2ZvcmNlQXR0
cmliMEJ1ZmZlclJlZmlsbCA9IHRydWU7Ci0gICAgfQotICAgIGlmICh1c2luZ1ZlcnRleEF0dHJp
YjAKLSAgICAgICAgJiYgKG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsCi0gICAgICAgICAgICB8
fCBhdHRyaWJWYWx1ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQot
ICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyVmFsdWVbMV0KLSAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1
ZVszXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKLSAgICAgICAgYXV0byBi
dWZmZXJEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEp
ICogNCk7Ci0gICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAx
OyArK2lpKSB7Ci0gICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52
YWx1ZVswXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1
ZS52YWx1ZVsxXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJW
YWx1ZS52YWx1ZVsyXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRy
aWJWYWx1ZS52YWx1ZVszXTsKLSAgICAgICAgfQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVswXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOwotICAgICAgICBtX3ZlcnRleEF0dHJp
YjBCdWZmZXJWYWx1ZVsxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOwotICAgICAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwotICAgICAgICBt
X3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwotICAg
ICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgICAgICBtX2NvbnRl
eHQtPmJ1ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVm
ZmVyRGF0YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAw
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
c3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKLXsKLSAgICBjb25zdCBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIGlmIChz
dGF0ZS5idWZmZXJCaW5kaW5nICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgewotICAgICAgICBt
X2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2Jq
ZWN0T3JaZXJvKHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5v
cm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwotICAgIH0KLSAg
ICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwg
b2JqZWN0T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKLXsKLSAgICBSZWZQ
dHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOwotICAg
IGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKLSAgICBtX3Jlc3RvcmVBbGxvd2VkID0g
ZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLSAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0g
UmVhbExvc3RDb250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCi0gICAgICAgIG1fcmVzdG9yZVRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1h
eWJlUmVzdG9yZUNvbnRleHQoKQotewotICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKLSAgICBp
ZiAoIW1fY29udGV4dExvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSByZW5kZXJp
bmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9m
IHRoZQotICAgIC8vIHdlYmdsY29udGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVy
LgotICAgIC8vCi0gICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNl
dCB1cCBmb3IgcmVhbCB2cy4gc3ludGhldGljIGxvc3QKLSAgICAvLyBjb250ZXh0IGV2ZW50cywg
d2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZwot
ICAgIC8vIHRoZSByZXRyeSBsb29wIGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCi0gICAg
aWYgKCFtX3Jlc3RvcmVBbGxvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgY29udGV4
dExvc3RSZWFzb24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQigpOwotCi0gICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgotICAgICAgICAvLyBUaGUgR3JhcGhpY3ND
b250ZXh0M0QgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5Ci0gICAgICAgIC8vIHN1cHBv
cnQgR0xfQVJCX3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCi0g
ICAgICAgIC8vIFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVz
ZWQgdG8gZm9yY2UKLSAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCi0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6Ci0gICAgICAg
IC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0
IHdhcwotICAgICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCi0g
ICAgICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0
aGUgcGFnZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3Jpbmcg
dGhlIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJ
Tk5PQ0VOVF9DT05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBj
b250ZXh0IHRvIGJlIHJlc3RvcmVkLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6VU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gV2Fybi4gSWRlYWxs
eSwgcHJvbXB0IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCi0gICAgICAgIC8vIGNv
bnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8K
LSAgICAgICAgLy8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRp
bnVlIHJ1bm5pbmcKLSAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInll
cyIgc2hvdWxkIHdlIHN0YXJ0Ci0gICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUg
Y29udGV4dC4KLSAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBj
b250ZW50IG9uIHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRv
IHJlc2V0Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IGNh
bnZhcygpLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFt
ZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZy
YW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICBy
ZXR1cm47Ci0gICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3QoKTsKLSAgICBpZiAoIXJv
b3QpCi0gICAgICAgIHJldHVybjsKLSAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+
aG9zdFdpbmRvdygpOwotICAgIGlmICghaG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUobV9hdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0g
ICAgICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCi0gICAgICAg
ICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0
ZW1wdHMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRu
J3QgaGFwcGVuIGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBh
cHAuCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3
aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikg
ewotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKLSAgICAgICAg
RHJhd2luZ0J1ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1
dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJh
d2luZ0J1ZmZlcjo6RGlzY2FyZDsKLSAgICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJl
bWVudCBhbHBoYSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDog
RHJhd2luZ0J1ZmZlcjo6T3BhcXVlOwotICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5n
QnVmZmVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHBy
ZXNlcnZlLCBhbHBoYSk7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0K
LQotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwot
ICAgIHNldHVwRmxhZ3MoKTsKLSAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwotICAgIGNhbnZh
cygpLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmdsY29udGV4dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOwotfQotCi1TdHJp
bmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4
dCkgY29uc3QKLXsKLSAgICBpZiAodGV4dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6
ZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1cm4gdGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0
eSkKLSAgICA6IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj5bXT4oY2FwYWNpdHkpKQotICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKLXsKLX0K
LQotSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNo
ZTo6aW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpbnQgaTsKLSAgICBm
b3IgKGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBi
dWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghYnVmKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBidWJibGVUb0Zyb250KGkpOwotICAgICAgICByZXR1cm4g
YnVmOwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgMSk7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwotICAgIG1f
YnVmZmVyc1tpXSA9IFdURjo6bW92ZSh0ZW1wKTsKLQotICAgIEltYWdlQnVmZmVyKiBidWYgPSBt
X2J1ZmZlcnNbaV0uZ2V0KCk7Ci0gICAgYnViYmxlVG9Gcm9udChpKTsKLSAgICByZXR1cm4gYnVm
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6
YnViYmxlVG9Gcm9udChpbnQgaWR4KQotewotICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAt
LWkpCi0gICAgICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKLX0KLQotbmFt
ZXNwYWNlIHsKLQotICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgotICAgICAgICAg
ICAgcmV0dXJuICJJTlZBTElEX1ZBTFVFIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT046Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFU
SU9OIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKLSAg
ICAgICAgICAgIHJldHVybiAiT1VUX09GX01FTU9SWSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAgcmV0
dXJuICJJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiI7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKLSAgICAgICAgICAgIHJldHVybiAiQ09O
VEVYVF9MT1NUX1dFQkdMIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiV2ViR0wgRVJST1IoJTA0eCkiLCBlcnJvcik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLX0gLy8gbmFtZXNwYWNlIGFub255bW91cwotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5j
ZSBkaXNwbGF5KQotewotICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRp
c3BsYXkgPT0gRGlzcGxheUluQ29uc29sZSkgewotICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygi
V2ViR0w6ICIpICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rp
b25OYW1lKSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOwotICAgICAgcHJpbnRHTEVycm9y
VG9Db25zb2xlKHN0cik7Ci0gICAgfQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
ZXJyb3IpOwotfQotCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2Fybmlu
Z1RvQ29uc29sZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0
aW9uKQotewotICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7Ci0gICAgICAg
IFN0cmluZyBzdHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsg
IjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7Ci0gICAgICAgIHByaW50R0xFcnJvclRvQ29uc29s
ZShzdHIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3Rl
bmNpbFRlc3QoKQotewotICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKLQotICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1ZmZlcigpOwotICAgIGVsc2UgewotICAg
ICAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRl
eHRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+
c3RlbmNpbCgpOwotICAgIH0KLSAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfVEVTVCwKLSAgICAgICAgICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBo
YXZlU3RlbmNpbEJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFi
bGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCi17Ci0gICAgaWYg
KGVuYWJsZSkKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7Ci19Ci0KLUludFNpemUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2FudmFzU2l6ZSgpCi17Ci0gICAgcmV0dXJu
IEludFNpemUoY2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBd
KSwKLSAgICAgICAgICAgICAgICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4
Vmlld3BvcnREaW1zWzFdKSk7Ci19Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRNYXhEcmF3QnVmZmVycygpCi17Ci0gICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIGlmICghbV9tYXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAm
bV9tYXhEcmF3QnVmZmVycyk7Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAg
ICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNI
TUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKLSAgICAvLyBXRUJHTF9kcmF3X2J1
ZmZlcnMgcmVxdWlyZXMgTUFYX0NPTE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMu
Ci0gICAgcmV0dXJuIHN0ZDo6bWluKG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2ht
ZW50cyk7Ci19Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0
dGFjaG1lbnRzKCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhU
LCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKLSAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1l
bnRzOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIo
R0MzRGVudW0gYnVmKQotewotICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKLXsKLSAg
ICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCi17Ci0g
ICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJE
QmluZGluZy5nZXQoKSwgZWMpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Vw
cG9ydHNEcmF3QnVmZmVycygpCi17Ci0gICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJl
bWVudHNDaGVja2VkKSB7Ci0gICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0No
ZWNrZWQgPSB0cnVlOwotICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3
QnVmZmVyczo6c3VwcG9ydGVkKHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gbV9kcmF3QnVmZmVy
c1N1cHBvcnRlZDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJ
bnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBH
QzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGlmICghcHJpbWNvdW50KSB7Ci0gICAgICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2
YWxpZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291
bnQsIHByaW1jb3VudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVk
KCk7Ci0KLSAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNp
bXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7Ci0gICAgaWYgKCFpc0dMRVMy
TlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJh
eXNJbnN0YW5jZWQiLCB0cnVlKTsKLQotICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0luc3RhbmNl
ZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0KLSAgICBpZiAoIWlzR0xFUzJDb21w
bGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVz
QWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJp
Y3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFu
Y2VkIiwgZmFsc2UpOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVp
IHByaW1jb3VudCkKLXsKLSAgICBpZiAoIXByaW1jb3VudCkgewotICAgICAgICBtYXJrQ29udGV4
dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bUVs
ZW1lbnRzID0gMDsKLSAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJ
bnN0YW5jZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgcHJpbWNv
dW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLQotICAg
IGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpKSB7Ci0gICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxp
ZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRy
PihvZmZzZXQpLCBudW1FbGVtZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQg
PSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJh
d0VsZW1lbnRzSW5zdGFuY2VkIiwgdHJ1ZSk7Ci0KLSAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50
c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zm
c2V0KSwgcHJpbWNvdW50KTsKLQotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRl
eEF0dHJpYjBTaW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJp
YjBTaW11bGF0aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBj
aGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIGZhbHNlKTsK
LSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3Ip
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJp
YkRpdmlzb3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYkRpdmlzb3Io
aW5kZXgsIGRpdmlzb3IpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliRGl2aXNvcihpbmRl
eCwgZGl2aXNvcik7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Niw3OTEgKzI2LDE3IEBACiAjaWZuZGVmIFdlYkdMUmVuZGVyaW5nQ29udGV4dF9oCiAjZGVmaW5l
IFdlYkdMUmVuZGVyaW5nQ29udGV4dF9oCiAKLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
LSNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiRHJhd2luZ0J1
ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIldlYkdMR2V0SW5mby5oIgot
I2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSW50MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBBTkdMRUluc3RhbmNlZEFycmF5czsKLWNsYXNzIEVYVEJsZW5k
TWluTWF4OwotY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOwotY2xhc3MgRVhUU2hh
ZGVyVGV4dHVyZUxPRDsKLWNsYXNzIEVYVHNSR0I7Ci1jbGFzcyBFWFRGcmFnRGVwdGg7Ci1jbGFz
cyBIVE1MSW1hZ2VFbGVtZW50OwotY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKLWNsYXNzIEltYWdl
QnVmZmVyOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIE9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXM7Ci1jbGFzcyBPRVNUZXh0dXJlRmxvYXQ7Ci1jbGFzcyBPRVNUZXh0dXJl
RmxvYXRMaW5lYXI7Ci1jbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0OwotY2xhc3MgT0VTVGV4dHVy
ZUhhbGZGbG9hdExpbmVhcjsKLWNsYXNzIE9FU1ZlcnRleEFycmF5T2JqZWN0OwotY2xhc3MgT0VT
RWxlbWVudEluZGV4VWludDsKLWNsYXNzIFdlYkdMQWN0aXZlSW5mbzsKLWNsYXNzIFdlYkdMQnVm
ZmVyOwotY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7Ci1jbGFzcyBXZWJHTENvbnRleHRPYmplY3Q7
Ci1jbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOwotY2xhc3MgV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDOwotY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM7Ci1jbGFzcyBX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzOwotY2xhc3MgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzsKLWNs
YXNzIFdlYkdMRGVidWdTaGFkZXJzOwotY2xhc3MgV2ViR0xEZXB0aFRleHR1cmU7Ci1jbGFzcyBX
ZWJHTERyYXdCdWZmZXJzOwotY2xhc3MgV2ViR0xFeHRlbnNpb247Ci1jbGFzcyBXZWJHTEZyYW1l
YnVmZmVyOwotY2xhc3MgV2ViR0xMb3NlQ29udGV4dDsKLWNsYXNzIFdlYkdMT2JqZWN0OwotY2xh
c3MgV2ViR0xQcm9ncmFtOwotY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7Ci1jbGFzcyBXZWJHTFNo
YWRlcjsKLWNsYXNzIFdlYkdMU2hhcmVkT2JqZWN0OwotY2xhc3MgV2ViR0xTaGFkZXJQcmVjaXNp
b25Gb3JtYXQ7Ci1jbGFzcyBXZWJHTFRleHR1cmU7Ci1jbGFzcyBXZWJHTFVuaWZvcm1Mb2NhdGlv
bjsKLWNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7Ci0KLXR5cGVkZWYgaW50IEV4Y2Vw
dGlvbkNvZGU7Ci0KLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBD
YW52YXNSZW5kZXJpbmdDb250ZXh0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5n
Q29udGV4dD4gY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50KiwgV2ViR0xDb250ZXh0QXR0cmlidXRl
cyopOwotICAgIHZpcnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dCgpOwotCi0gICAgdmlydHVh
bCBib29sIGlzM2QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jaWYgUExBVEZP
Uk0oV0lOKQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYWNjZWxlcmF0ZWQgM2QgY2FudmFzIG9u
IFdpbmRvd3MuCi0gICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQotI2Vsc2UKLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRl
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi0gICAgaW50IGRy
YXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0OwotICAgIGludCBkcmF3aW5nQnVmZmVySGVpZ2h0KCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hh
ZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdM
UHJvZ3JhbSosIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlcios
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJn
ZXQsIFdlYkdMRnJhbWVidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBiaW5kUmVu
ZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVy
ZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwg
R0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKTsKLSAgICB2
b2lkIGJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSk7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9u
U2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKTsKLSAgICB2b2lk
IGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKTsKLSAgICB2b2lk
IGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNE
ZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpOwotCi0gICAgdm9pZCBidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZm
ZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBidWZm
ZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1
c2FnZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0
YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9m
ZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBHQzNE
ZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCk7Ci0gICAgdm9pZCBj
bGVhcihHQzNEYml0ZmllbGQgbWFzayk7Ci0gICAgdm9pZCBjbGVhckNvbG9yKEdDM0RmbG9hdCBy
ZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSk7Ci0g
ICAgdm9pZCBjbGVhckRlcHRoKEdDM0RmbG9hdCk7Ci0gICAgdm9pZCBjbGVhclN0ZW5jaWwoR0Mz
RGludCk7Ci0gICAgdm9pZCBjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBn
cmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpOwotICAgIHZvaWQgY29t
cGlsZVNoYWRlcihXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgY29t
cHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmll
dyogZGF0YSk7Ci0gICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSk7Ci0KLSAgICB2
b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKTsKLSAgICB2b2lkIGNvcHlUZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpOwotCi0gICAgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlQnVm
ZmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBjcmVhdGVGcmFtZWJ1ZmZl
cigpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBjcmVhdGVQcm9ncmFtKCk7Ci0gICAg
UGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAg
UGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gY3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgp
OwotCi0gICAgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2RlKTsKLQotICAgIHZvaWQgZGVsZXRl
QnVmZmVyKFdlYkdMQnVmZmVyKik7Ci0gICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZy
YW1lYnVmZmVyKik7Ci0gICAgdm9pZCBkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwotICAg
IHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7Ci0gICAgdm9pZCBk
ZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqKTsKLSAgICB2b2lkIGRlbGV0ZVRleHR1cmUoV2ViR0xU
ZXh0dXJlKik7Ci0KLSAgICB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSk7Ci0gICAgdm9pZCBkZXB0
aE1hc2soR0MzRGJvb2xlYW4pOwotICAgIHZvaWQgZGVwdGhSYW5nZShHQzNEZmxvYXQgek5lYXIs
IEdDM0RmbG9hdCB6RmFyKTsKLSAgICB2b2lkIGRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBX
ZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRpc2FibGUoR0MzRGVudW0g
Y2FwKTsKLSAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNE
aW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRy
YXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUs
IGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgZW5hYmxlKEdD
M0RlbnVtIGNhcCk7Ci0gICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZmluaXNoKCk7Ci0gICAgdm9pZCBmbHVz
aCgpOwotICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVu
ZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJn
ZXQsIFdlYkdMVGV4dHVyZSosIEdDM0RpbnQgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIGZyb250RmFjZShHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKEdD
M0RlbnVtIHRhcmdldCk7Ci0KLSAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0
aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQ
cm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIGdldEF0
dGFjaGVkU2hhZGVycyhXZWJHTFByb2dyYW0qLCBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4m
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgR0MzRGludCBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFBy
b2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRCdWZmZXJQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFBhc3NSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gZ2V0Q29udGV4dEF0dHJp
YnV0ZXMoKTsKLSAgICBHQzNEZW51bSBnZXRFcnJvcigpOwotICAgIFdlYkdMRXh0ZW5zaW9uKiBn
ZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldElu
Zm8gZ2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2Vi
R0xHZXRJbmZvIGdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiwgR0MzRGVudW0gcG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQ
cm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqLCBH
QzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRTaGFkZXJJbmZv
TG9nKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xT
aGFkZXJQcmVjaXNpb25Gb3JtYXQ+IGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBz
aGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
U3RyaW5nIGdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBWZWN0b3I8U3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0gICAgV2ViR0xHZXRJ
bmZvIGdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiwg
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1Jl
ZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0
VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIGxvbmcgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgs
IEdDM0RlbnVtIHBuYW1lKTsKLQotICAgIHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIG1vZGUpOwotICAgIEdDM0Rib29sZWFuIGlzQnVmZmVyKFdlYkdMQnVmZmVyKik7Ci0gICAg
Ym9vbCBpc0NvbnRleHRMb3N0KCkgY29uc3Q7Ci0gICAgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdD
M0RlbnVtIGNhcCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVm
ZmVyKik7Ci0gICAgR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwotICAgIEdD
M0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7Ci0gICAgR0MzRGJv
b2xlYW4gaXNTaGFkZXIoV2ViR0xTaGFkZXIqKTsKLSAgICBHQzNEYm9vbGVhbiBpc1RleHR1cmUo
V2ViR0xUZXh0dXJlKik7Ci0KLSAgICB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpOwotICAgIHZv
aWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwotICAgIHZvaWQgcG9s
eWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpOwotICAgIHZvaWQg
cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmll
dyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGls
ZXIoKTsKLSAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsK
LSAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52
ZXJ0KTsKLSAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xTaGFk
ZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzdGVuY2lsRnVu
YyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7Ci0gICAgdm9pZCBz
dGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQg
cmVmLCBHQzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50KTsKLSAg
ICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzayk7
Ci0gICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0Rl
bnVtIHpwYXNzKTsKLSAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdD
M0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7Ci0KLSAgICB2b2lk
IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jaWYgRU5BQkxFKFZJREVP
KQotICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0j
ZW5kaWYKLQotICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pOwotICAgIHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKLQotICAgIHZvaWQgdGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNF
bGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwot
I2VuZGlmCi0KLSAgICB2b2lkIHVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3Jt
MWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCB4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3Jt
MWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBz
aXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0y
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNmKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2l2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHos
IEdDM0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgdW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3LCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9y
bTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlm
b3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0Mz
RGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHVzZVByb2dyYW0oV2ViR0xQ
cm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdM
UHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgdmVydGV4QXR0cmliMWYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmli
MWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwot
ICAgIHZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0
MzJBcnJheSogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0
dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9h
dCB6KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFy
cmF5KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwotICAgIHZvaWQgdmVydGV4QXR0cmli
NGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHos
IEdDM0RmbG9hdCB3KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwg
RmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwotICAgIHZvaWQgdmVy
dGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0
eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0K
LSAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQpOwotCi0gICAgLy8gV0VCS0lUX2xvc2VfY29udGV4dCBzdXBwb3J0
Ci0gICAgZW51bSBMb3N0Q29udGV4dE1vZGUgewotICAgICAgICAvLyBMb3N0IGNvbnRleHQgb2Nj
dXJyZWQgYXQgdGhlIGdyYXBoaWNzIHN5c3RlbSBsZXZlbC4KLSAgICAgICAgUmVhbExvc3RDb250
ZXh0LAotCi0gICAgICAgIC8vIExvc3QgY29udGV4dCBwcm92b2tlZCBieSBXRUJLSVRfbG9zZV9j
b250ZXh0LgotICAgICAgICBTeW50aGV0aWNMb3N0Q29udGV4dAotICAgIH07Ci0gICAgdm9pZCBm
b3JjZUxvc3RDb250ZXh0KExvc3RDb250ZXh0TW9kZSk7Ci0gICAgdm9pZCBmb3JjZVJlc3RvcmVD
b250ZXh0KCk7Ci0gICAgdm9pZCBsb3NlQ29udGV4dEltcGwoTG9zdENvbnRleHRNb2RlKTsKLQot
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsgfQotICAgIFdlYkdMQ29udGV4dEdyb3VwKiBjb250ZXh0R3JvdXAo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRHcm91cC5nZXQoKTsgfQotICAgIHZpcnR1YWwgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBy
ZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KLSAgICB2b2lkIG1hcmtMYXllckNvbXBv
c2l0ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMo
KSBvdmVycmlkZTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoKTsKLQotICAgIHZvaWQgcmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hh
cmVkT2JqZWN0Kik7Ci0gICAgdm9pZCByZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9i
amVjdCopOwotICAgIAotICAgIHVuc2lnbmVkIGdldE1heFZlcnRleEF0dHJpYnMoKSBjb25zdCB7
IHJldHVybiBtX21heFZlcnRleEF0dHJpYnM7IH0KLQotICAgIC8vIEFOR0xFX2luc3RhbmNlZF9h
cnJheXMgZXh0ZW5zaW9uIGZ1bmN0aW9ucy4KLSAgICB2b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQo
R0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkg
cHJpbWNvdW50KTsKLSAgICB2b2lkIGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0Rz
aXplaSBwcmltY291bnQpOwotICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBp
bmRleCwgR0MzRHVpbnQgZGl2aXNvcik7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdl
YkdMRHJhd0J1ZmZlcnM7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdMRnJhbWVidWZmZXI7Ci0gICAg
ZnJpZW5kIGNsYXNzIFdlYkdMT2JqZWN0OwotICAgIGZyaWVuZCBjbGFzcyBPRVNWZXJ0ZXhBcnJh
eU9iamVjdDsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xEZWJ1Z1NoYWRlcnM7Ci0gICAgZnJpZW5k
IGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVQVlJUQzsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVMzVEM7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9y
TWVzc2FnZUNhbGxiYWNrOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTOwotCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dChI
VE1MQ2FudmFzRWxlbWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyk7Ci0gICAgdm9pZCBpbml0aWFsaXplTmV3Q29udGV4dCgp
OwotICAgIHZvaWQgc2V0dXBGbGFncygpOwotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAg
dmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBhY3Rp
dmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIldlYkdMUmVuZGVyaW5n
Q29udGV4dCI7IH0KLQotICAgIHZvaWQgYWRkU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0
Kik7Ci0gICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOwotICAg
IHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwotCi0gICAgdm9pZCBkZXN0cm95R3Jh
cGhpY3NDb250ZXh0M0QoKTsKLSAgICB2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotCi0gICAg
Ly8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBvbiB0b3Agb2YgY29tcGxpYW50IEdMRVMyIGlt
cGxlbWVudGF0aW9uLgotICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIHsgcmV0dXJuIG1faXNH
TEVTMkNvbXBsaWFudDsgfQotICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBp
cyBOUE9UIHN0cmljdC4KLSAgICBib29sIGlzR0xFUzJOUE9UU3RyaWN0KCkgeyByZXR1cm4gbV9p
c0dMRVMyTlBPVFN0cmljdDsgfQotICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlv
biBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2Vzc2VzLgotICAg
IGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIHsgcmV0dXJuIG1f
aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlczsgfQotICAgIC8vIFF1ZXJ5IGlm
IHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0aWFsaXplcyB0ZXh0dXJlcy9yZW5kZXJidWZmZXJz
IHRvIDAuCi0gICAgYm9vbCBpc1Jlc291cmNlU2FmZSgpIHsgcmV0dXJuIG1faXNSZXNvdXJjZVNh
ZmU7IH0KLSAgICAvLyBRdWVyeSBpZiBkZXB0aF9zdGVuY2lsIGJ1ZmZlciBpcyBzdXBwb3J0ZWQu
Ci0gICAgYm9vbCBpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpIHsgcmV0dXJuIG1faXNEZXB0aFN0
ZW5jaWxTdXBwb3J0ZWQ7IH0KLQotICAgIC8vIEhlbHBlciB0byByZXR1cm4gdGhlIHNpemUgaW4g
Ynl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKLSAgICAvLyBsaWtlIEdMX0ZMT0FULCBHTF9JTlQs
IGV0Yy4KLSAgICB1bnNpZ25lZCBpbnQgc2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSk7Ci0KLSAg
ICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIGNvdW50IGFuZCBvZmZzZXQgYWdhaW5zdCBudW1iZXIg
b2YgZWxlbWVudHMgaW4gZWxlbWVudCBhcnJheSBidWZmZXIKLSAgICBib29sIHZhbGlkYXRlRWxl
bWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIg
b2Zmc2V0KTsKLQotICAgIC8vIENvbnNlcnZhdGl2ZSBidXQgcXVpY2sgaW5kZXggdmFsaWRhdGlv
bgotICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUs
IHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKLQotICAgIC8vIFByZWNpc2UgYnV0IHNs
b3cgaW5kZXggdmFsaWRhdGlvbiAtLSBvbmx5IGRvbmUgaWYgY29uc2VydmF0aXZlIGNoZWNrcyBm
YWlsCi0gICAgYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1Jl
cXVpcmVkKTsKLSAgICBib29sIHZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVt
ZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50ID0gMCk7Ci0KLSAgICBib29sIHZhbGlk
YXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciosIFdlYkdMT2JqZWN0Kik7Ci0KLSAgICBib29sIHZh
bGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUs
IEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7Ci0g
ICAgYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9m
ZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKLQotICAg
IC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0LgotICAgIHZvaWQgYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOwotCi0gICAgUGFzc1JlZlB0cjxJbWFnZT4gZHJh
d0ltYWdlSW50b0J1ZmZlcihJbWFnZSosIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRldmlj
ZVNjYWxlRmFjdG9yKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBQYXNzUmVmUHRyPEltYWdl
PiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgQmFja2luZ1N0b3JlQ29weSwg
RXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IG1fY29udGV4dDsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4dEdyb3Vw
OwotCi0gICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBEcmF3aW5n
QnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5Ci0gICAgLy8gdG8gdGhlIGJhY2stYnVmZmVyIG9m
IG1fY29udGV4dC4KLSAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOwot
Ci0gICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0IGlzIGRldGVy
bWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgotICAgIC8vIFRoaXMgaXMgdXNlZCBib3RoIGZvciBz
eW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMsIGl0J3MKLSAg
ICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0YWNrLCBidXQg
dGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKLSAgICAvLyBvbiBob3cgZXhhY3RseSB0aGUgcGxhdGZv
cm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBiZXR0ZXIKLSAgICAv
LyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBldmVudC4K
LSAgICBUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOwotICAgIGJvb2wgbV9y
ZXN0b3JlQWxsb3dlZDsKLSAgICBUaW1lciBtX3Jlc3RvcmVUaW1lcjsKLQotICAgIGJvb2wgbV9u
ZWVkc1VwZGF0ZTsKLSAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7Ci0gICAgSGFzaFNldDxX
ZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3RzOwotCi0gICAgLy8gTGlzdCBvZiBi
b3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFib3V0IHNpemVzIGZvciBBUlJBWV9C
VUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRfQVJSQVlfQlVGRkVSCi0gICAgUmVm
UHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAgCi0gICAgUmVmUHRyPFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0OwotICAg
IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3Q7Ci0gICAgdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2JqZWN0KFBhc3NSZWZQdHI8V2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCi0gICAgewotICAgICAgICBpZiAoYXJy
YXlPYmplY3QpCi0gICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBhcnJheU9i
amVjdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgfQotICAgIAotICAgIGNsYXNzIFZl
cnRleEF0dHJpYlZhbHVlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFZlcnRleEF0dHJpYlZhbHVl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgaW5pdFZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHZvaWQgaW5pdFZhbHVlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFs
dWVbMF0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOwotICAgICAgICAgICAg
dmFsdWVbMl0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbM10gPSAxLjBmOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBHQzNEZmxvYXQgdmFsdWVbNF07Ci0gICAgfTsKLSAgICBWZWN0
b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0cmliVmFsdWU7Ci0gICAgdW5zaWduZWQg
bV9tYXhWZXJ0ZXhBdHRyaWJzOwotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyOwotICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZTsKLSAgICBHQzNE
ZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07Ci0gICAgYm9vbCBtX2ZvcmNlQXR0
cmliMEJ1ZmZlclJlZmlsbDsKLSAgICBib29sIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmU7Ci0K
LSAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOwotICAgIFJlZlB0cjxX
ZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAgICBSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKLSAgICBzdHJ1Y3QgVGV4dHVyZVVu
aXRTdGF0ZSB7Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmUyREJpbmRpbmc7
Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmVDdWJlTWFwQmluZGluZzsKLSAg
ICB9OwotICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0czsKLSAgICB1
bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7Ci0KLSAgICBSZWZQdHI8V2ViR0xUZXh0
dXJlPiBtX2JsYWNrVGV4dHVyZTJEOwotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxhY2tU
ZXh0dXJlQ3ViZU1hcDsKLQotICAgIFZlY3RvcjxHQzNEZW51bT4gbV9jb21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7Ci0KLSAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJldXNhYmxlIGltYWdlIGJ1
ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCi0gICAgY2xhc3MgTFJVSW1hZ2VCdWZm
ZXJDYWNoZSB7Ci0gICAgcHVibGljOgotICAgICAgICBMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBj
YXBhY2l0eSk7Ci0gICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93bmVkIGJ5IHRo
ZSBpbWFnZSBidWZmZXIgbWFwLgotICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBidWJibGVUb0Zy
b250KGludCBpZHgpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7Ci0gICAgICAgIGludCBtX2NhcGFjaXR5OwotICAgIH07
Ci0gICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZEltYWdlQ2FjaGU7Ci0KLSAgICBH
QzNEaW50IG1fbWF4VGV4dHVyZVNpemU7Ci0gICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZTsKLSAgICBHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKLSAgICBHQzNEaW50IG1f
bWF4Vmlld3BvcnREaW1zWzJdOwotICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlTGV2ZWw7Ci0gICAg
R0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0KLSAgICBHQzNEaW50IG1fbWF4RHJh
d0J1ZmZlcnM7Ci0gICAgR0MzRGludCBtX21heENvbG9yQXR0YWNobWVudHM7Ci0gICAgR0MzRGVu
dW0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICBib29sIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVt
ZW50c0NoZWNrZWQ7Ci0gICAgYm9vbCBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOwotCi0gICAgR0Mz
RGludCBtX3BhY2tBbGlnbm1lbnQ7Ci0gICAgR0MzRGludCBtX3VucGFja0FsaWdubWVudDsKLSAg
ICBib29sIG1fdW5wYWNrRmxpcFk7Ci0gICAgYm9vbCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGE7
Ci0gICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKLSAgICBib29sIG1f
Y29udGV4dExvc3Q7Ci0gICAgTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RNb2RlOwotICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKLQotICAgIGJvb2wg
bV9sYXllckNsZWFyZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJDb2xvcls0XTsKLSAgICBib29s
IG1fc2Npc3NvckVuYWJsZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJEZXB0aDsKLSAgICBHQzNE
aW50IG1fY2xlYXJTdGVuY2lsOwotICAgIEdDM0Rib29sZWFuIG1fY29sb3JNYXNrWzRdOwotICAg
IEdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOwotCi0gICAgYm9vbCBtX3N0ZW5jaWxFbmFibGVkOwot
ICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNpbE1hc2tCYWNrOwotICAgIEdDM0Rp
bnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1JlZkJhY2s7IC8vIE5vdGUgdGhhdCB0
aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywgbm90IHRoZSBpbnRlcm5hbCBjbGFt
cGVkIHZhbHVlLgotICAgIEdDM0R1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBtX3N0ZW5jaWxGdW5j
TWFza0JhY2s7Ci0KLSAgICBib29sIG1faXNHTEVTMkNvbXBsaWFudDsKLSAgICBib29sIG1faXNH
TEVTMk5QT1RTdHJpY3Q7Ci0gICAgYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXM7Ci0gICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZlOwotICAgIGJvb2wgbV9pc0RlcHRo
U3RlbmNpbFN1cHBvcnRlZDsKLSAgICBib29sIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkOwot
Ci0gICAgYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlOwotICAgIGludCBtX251bUdM
RXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKLQotICAgIC8vIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0
IGNhbiBiZSBjcmVhdGVkIGluIGEgc3RhdGUgd2hlcmUgaXQgYXBwZWFycyBhcwotICAgIC8vIGEg
dmFsaWQgYW5kIGFjdGl2ZSBjb250ZXh0LCBidXQgd2lsbCBub3QgZXhlY3V0ZSBhbnkgaW1wb3J0
YW50IG9wZXJhdGlvbnMKLSAgICAvLyB1bnRpbCBpdHMgbG9hZCBwb2xpY3kgaXMgY29tcGxldGVs
eSByZXNvbHZlZC4KLSAgICBib29sIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKLSAgICBi
b29sIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbjsKLSAgICBib29sIGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKTsKLQotICAgIC8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVjdHMuCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEVYVEZyYWdEZXB0aD4gbV9leHRGcmFnRGVwdGg7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEVYVEJsZW5kTWluTWF4PiBtX2V4dEJsZW5kTWluTWF4OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxFWFRzUkdCPiBtX2V4dHNSR0I7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEVYVFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRleHR1cmVMT0Q+IG1fZXh0U2hhZGVyVGV4dHVyZUxP
RDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZsb2F0PiBtX29lc1RleHR1cmVGbG9h
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZsb2F0TGluZWFyPiBtX29lc1RleHR1
cmVGbG9hdExpbmVhcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUhhbGZGbG9hdD4g
bV9vZXNUZXh0dXJlSGFsZkZsb2F0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFs
ZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXI7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+IG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlczsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVmVydGV4QXJyYXlPYmplY3Q+IG1fb2VzVmVydGV4QXJy
YXlPYmplY3Q7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU0VsZW1lbnRJbmRleFVpbnQ+IG1fb2Vz
RWxlbWVudEluZGV4VWludDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xMb3NlQ29udGV4dD4g
bV93ZWJnbExvc2VDb250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlYnVnUmVuZGVy
ZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJlckluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFkZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDPiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEM7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQz4gbV93ZWJn
bENvbXByZXNzZWRUZXh0dXJlUFZSVEM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVyZT4gbV93ZWJnbERlcHRoVGV4dHVyZTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVmZmVycz4gbV93ZWJnbERyYXdCdWZmZXJzOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3RhbmNlZEFycmF5cz4gbV9hbmdsZUluc3RhbmNlZEFy
cmF5czsKLQotICAgIC8vIEhlbHBlcnMgZm9yIGdldFBhcmFtZXRlciBhbmQgb3RoZXJzCi0gICAg
V2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJhbWV0ZXIoR0MzRGVudW0pOwotICAgIFdlYkdMR2V0
SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0pOwotICAgIFdlYkdMR2V0SW5m
byBnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEludFBh
cmFtZXRlcihHQzNEZW51bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1l
dGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRl
cihHQzNEZW51bSk7Ci0KLSAgICAvLyBDbGVhciB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMgY29t
cG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVyYXRpb24uCi0gICAgLy8gY2xlYXJNYXNrIGlzIHNl
dCB0byB0aGUgYml0ZmllbGQgb2YgYW55IGNsZWFyIHRoYXQgd291bGQgaGFwcGVuIGFueXdheSBh
dCB0aGlzIHRpbWUKLSAgICAvLyBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0
IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4KLSAgICBib29sIGNsZWFySWZDb21wb3NpdGVkKEdD
M0RiaXRmaWVsZCBjbGVhck1hc2sgPSAwKTsKLQotICAgIC8vIEhlbHBlciB0byByZXN0b3JlIHN0
YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1lYnVmZmVyIG1heSBkZXN0cm95LgotICAgIHZvaWQg
cmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwotCi0gICAgdm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgdGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4
U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0
aW9uQ29kZSYpOwotCi0gICAgdm9pZCBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hh
ciosIGJvb2wpOwotCi0gICAgdm9pZCBjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsK
LQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29weVRleHtTdWJ9SW1hZ2UsIGNoZWNrIHdo
ZXRoZXIgdGhlIGludGVybmFsZm9ybWF0Ci0gICAgLy8gYW5kIHRoZSBjb2xvciBidWZmZXIgZm9y
bWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVmZmVyIGNvbWJpbmF0aW9uCi0gICAgLy8g
aXMgdmFsaWQuCi0gICAgYm9vbCBpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5h
dGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZl
ckZvcm1hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFt
ZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBmb3JtYXQuCi0gICAgR0MzRGVudW0gZ2V0Qm91bmRGcmFt
ZWJ1ZmZlckNvbG9yRm9ybWF0KCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRo
ZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgotICAgIGludCBnZXRCb3VuZEZyYW1lYnVmZmVy
V2lkdGgoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1l
YnVmZmVyJ3MgaGVpZ2h0LgotICAgIGludCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCk7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5IGxpbWl0cyBvbiB0aGUgbGVuZ3RoIG9m
IHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbnMuCi0gICAgYm9vbCB2YWxpZGF0ZUxvY2F0
aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgc2l6ZSBpcyBub24tbmVnYXRpdmUuCi0g
ICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVybiBmYWxzZSBmb3IgbmVnYXRpdmUgaW5w
dXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgotICAgIGJvb2wgdmFsaWRhdGVTaXplKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYmVs
b25nIHRvIHRoZQotICAgIC8vIEFTQ0lJIHN1YnNldCBhcyBkZWZpbmVkIGluIEdMU0wgRVMgMS4w
IHNwZWMgc2VjdGlvbiAzLjEuCi0gICAgYm9vbCB2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IGNoZWNrIHRhcmdldCBhbmQgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgotICAgIC8vIEdl
bmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0dXJuIDAgaWYgdGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4
dHVyZSBib3VuZCBpcwotICAgIC8vIG51bGwuICBPdGhlcndpc2UsIHJldHVybiB0aGUgdGV4dHVy
ZSBib3VuZCB0byB0aGUgdGFyZ2V0LgotICAgIFdlYkdMVGV4dHVyZSogdmFsaWRhdGVUZXh0dXJl
QmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1
c2VTaXhFbnVtc0ZvckN1YmVNYXApOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNr
IGlucHV0IGZvcm1hdC90eXBlIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAg
ICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBh
cmUgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0Rp
bnQgbGV2ZWwpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGxldmVs
IGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wg
ZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwgaXMgaW52YWxpZC4KLSAgICBib29sIHZh
bGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsKTsKLQotICAgIGVudW0gVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlv
blR5cGUgewotICAgICAgICBOb3RUZXhTdWJJbWFnZTJELAotICAgICAgICBUZXhTdWJJbWFnZTJE
LAotICAgIH07Ci0KLSAgICBlbnVtIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSB7Ci0gICAg
ICAgIFNvdXJjZUFycmF5QnVmZmVyVmlldywKLSAgICAgICAgU291cmNlSW1hZ2VEYXRhLAotICAg
ICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LAotICAgICAgICBTb3VyY2VIVE1MQ2FudmFzRWxl
bWVudCwKLSAgICAgICAgU291cmNlSFRNTFZpZGVvRWxlbWVudCwKLSAgICB9OwotCi0gICAgLy8g
SGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gY2hlY2sgaWYgdGhlIGlucHV0
IGZvcm1hdC90eXBlL2xldmVsL3RhcmdldC93aWR0aC9oZWlnaHQvYm9yZGVyL3hvZmZzZXQveW9m
ZnNldCBhcmUgdmFsaWQuCi0gICAgLy8gT3RoZXJ3aXNlLCBpdCB3b3VsZCByZXR1cm4gcXVpY2ts
eSB3aXRob3V0IGRvaW5nIG90aGVyIHdvcmsuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmMoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4
RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAgICAgIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0KTsKLQotICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4
e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2Ug
aWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuY1BhcmFt
ZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKTsKLQotICAgIGVudW0gTnVs
bERpc3Bvc2l0aW9uIHsKLSAgICAgICAgTnVsbEFsbG93ZWQsCi0gICAgICAgIE51bGxOb3RBbGxv
d2VkCi0gICAgfTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRo
ZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKLSAgICAvLyBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIGFu
ZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3IgdGhlIHRleEltYWdlIGNhbGwuCi0gICAgLy8gR2Vu
ZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFs
aWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOdWxsRGlzcG9zaXRpb24pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRl
IGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQgaXMgc2V0dGFibGUgYXMgaW4KLSAgICAvLyB5b3UgY2Fu
IHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9yIGNhbGwgdGV4SW1hZ2UyRCwgY29weVRleElt
YWdlMkQgYW5kCi0gICAgLy8gY29weVRleFN1YkltYWdlMkQuCi0gICAgLy8gR2VuZXJhdGVzIEdM
IGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBmb3JtYXQgaXMgbm90IHNldHRhYmxlLgot
ICAgIGJvb2wgdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtIGZvcm1hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRh
dGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgaXMgY29ycmVjdCBzaXplCi0gICAgLy8gZm9yIHRo
ZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVuc2lvbnMuCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNz
ZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3Ig
dmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0cy4KLSAgICBib29sIHZhbGlkYXRl
Q29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxp
ZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVz
c2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
ZW51bSBmb3JtYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXBy
ZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4g
Zm9ybWF0LgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0
byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0FycmF5cy9FbGVtZW50c30uCi0gICAgYm9vbCB2YWxp
ZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOwotCi0gICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlmIGZyb250L2JhY2sgc3RlbmNpbE1hc2sg
YW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdzIGFyZSB0aGUgc2FtZS4KLSAgICBib29sIHZhbGlkYXRl
U3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7Ci0KLSAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc3RlbmNpbCBmdW5jLgotICAgIGJvb2wgdmFsaWRhdGVT
dGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBhbmQgdGV4UGFyYW1ldGVyaS4KLSAg
ICB2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFtZiwgYm9vbCBpc0Zsb2F0KTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byBwcmludCBHTCBlcnJvcnMgdG8gY29uc29sZS4KLSAgICB2b2lkIHBy
aW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHByaW50R0xXYXJu
aW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiByZWFzb24pOwot
Ci0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50IHdhcm5pbmdzIHRvIGNvbnNvbGUuIEN1
cnJlbnRseQotICAgIC8vIHVzZWQgb25seSB0byB3YXJuIGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBm
dW5jdGlvbnMuCi0gICAgdm9pZCBwcmludFdhcm5pbmdUb0NvbnNvbGUoY29uc3QgU3RyaW5nJik7
Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBm
b3IgZnJhbWVidWZmZXIgZnVuY3Rpb25zLgotICAgIC8vIEdlbmVyYXRlIEdMIGVycm9yIGlmIHBh
cmFtZXRlcnMgYXJlIGlsbGVnYWwuCi0gICAgYm9vbCB2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1Bh
cmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIGF0dGFjaG1lbnQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJs
ZW5kIGVxdWF0aW9uIG1vZGUuCi0gICAgYm9vbCB2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0b3JzLgotICAgIGJvb2wgdmFsaWRhdGVCbGVuZEZ1
bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51
bSBkc3QpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgR0wgY2FwYWJp
bGl0eS4KLSAgICBib29sIHZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1
dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1bmN0aW9ucy4KLSAgICBib29sIHZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOwotICAgIGJv
b2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgdm9pZCosIEdDM0RzaXplaSwgR0MzRHNpemVpIG1v
ZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiwgR0Mz
RHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxp
ZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJEYXRhLgotICAgIC8vIFJldHVybiB0aGUgY3VycmVu
dCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAwIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQu
Ci0gICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHVzYWdlKTsKLQotICAg
IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFn
ZSBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgotICAgIGJvb2wgdmFsaWRhdGVI
VE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVu
dCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1
Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBjYW52YXMgaXMgcmVhZHkgYW5kIHdvdWxkbid0IHRhaW50
IE9yaWdpbi4KLSAgICBib29sIHZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotI2lm
IEVOQUJMRShWSURFTykKLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2Uy
RCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVhZHkgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgotICAg
IGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
SFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNlbmRpZgotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ7dn0uCi0gICAgdm9pZCB2ZXJ0ZXhBdHRy
aWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6
ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxv
YXQpOwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBleHBlY3RlZFNpemUp
OwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCosIEdDM0RzaXplaSwgR0MzRHNpemVpIGV4cGVjdGVk
U2l6ZSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGRlbGV0ZSogKGRlbGV0ZUJ1ZmZl
ciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBmdW5jdGlvbnMuCi0gICAgLy8gUmV0dXJuIGZhbHNlIGlm
IGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLgotICAgIGJv
b2wgZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0Kik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
Zm9yIGJpbmQqIChiaW5kQnVmZmVyLCBiaW5kVGV4dHVyZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4K
LSAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gZGVsZXRlZCwgc2V0IGRlbGV0
ZWQgdG8gdHJ1ZSB1cG9uIHJldHVybi4KLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNo
b3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCi0gICAgYm9vbCBjaGVja09i
amVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9v
bCYgZGVsZXRlZCk7Ci0KLSAgICAvLyBIZWxwZXJzIGZvciBzaW11bGF0aW5nIHZlcnRleEF0dHJp
YjAKLSAgICB2b2lkIGluaXRWZXJ0ZXhBdHRyaWIwKCk7Ci0gICAgYm9vbCBzaW11bGF0ZVZlcnRl
eEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCk7Ci0gICAgdm9pZCByZXN0b3JlU3RhdGVzQWZ0
ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotCi0gICAgdm9pZCBkaXNwYXRjaENvbnRleHRM
b3N0RXZlbnQoKTsKLSAgICAvLyBIZWxwZXIgZm9yIHJlc3RvcmF0aW9uIGFmdGVyIGNvbnRleHQg
bG9zdC4KLSAgICB2b2lkIG1heWJlUmVzdG9yZUNvbnRleHQoKTsKLQotICAgIC8vIERldGVybWlu
ZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxlZ2VkIGNvZGUgaW4gdGhlIGJyb3dzZXIsIGZvciBl
eGFtcGxlLAotICAgIC8vIGEgU2FmYXJpIG9yIENocm9tZSBleHRlbnNpb24uCi0gICAgYm9vbCBh
bGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3Q7Ci0KLSAgICBlbnVtIENvbnNvbGVEaXNw
bGF5UHJlZmVyZW5jZSB7Ci0gICAgICAgIERpc3BsYXlJbkNvbnNvbGUsCi0gICAgICAgIERvbnRE
aXNwbGF5SW5Db25zb2xlCi0gICAgfTsKLQotICAgIC8vIFdyYXBwZXIgZm9yIEdyYXBoaWNzQ29u
dGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0aGF0IHNlbmRzIGEgbWVzc2FnZQotICAgIC8vIHRv
IHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCi0gICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNE
ZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwg
Q29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0gRGlzcGxheUluQ29uc29sZSk7Ci0KLSAgICBTdHJp
bmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBjb25zdDsKLQotICAgIC8vIEVuYWJsZSBv
ciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBiYXNlZCBvbiB1c2VyIHNldHRpbmcgYW5kCi0gICAgLy8g
d2hldGhlciB0aGUgY3VycmVudCBGQk8gaGFzIGEgc3RlbmNpbCBidWZmZXIuCi0gICAgdm9pZCBh
cHBseVN0ZW5jaWxUZXN0KCk7Ci0KLSAgICAvLyBIZWxwZXIgZm9yIGVuYWJsaW5nIG9yIGRpc2Fi
bGluZyBhIGNhcGFiaWxpdHkuCi0gICAgdm9pZCBlbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2Fw
YWJpbGl0eSwgYm9vbCBlbmFibGUpOwotCi0gICAgLy8gQ2xhbXAgdGhlIHdpZHRoIGFuZCBoZWln
aHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMuCi0gICAgSW50U2l6ZSBjbGFtcGVkQ2FudmFzU2l6
ZSgpOwotCi0gICAgLy8gRmlyc3QgdGltZSBjYWxsZWQsIGlmIEVYVF9kcmF3X2J1ZmZlcnMgaXMg
c3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFsdWU7IG90aGVyd2lzZSByZXR1cm4gMC4KLSAgICAvLyBM
YXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUuCi0gICAgR0MzRGludCBnZXRNYXhEcmF3QnVm
ZmVycygpOwotICAgIEdDM0RpbnQgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpOwotCi0gICAgdm9p
ZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7Ci0KLSAgICB2b2lkIHJlc3RvcmVDdXJyZW50
RnJhbWVidWZmZXIoKTsKLSAgICB2b2lkIHJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKCk7Ci0KLSAg
ICAvLyBDaGVjayBpZiBFWFRfZHJhd19idWZmZXJzIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQgYW5k
IGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wgcmVxdWlyZW1lbnRzLgotICAgIGJvb2wgc3VwcG9y
dHNEcmF3QnVmZmVycygpOworICAgIHZpcnR1YWwgYm9vbCBpc1dlYkdMMSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIH07Ci0KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5pZGwJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDY1NSArMjMsOSBA
QAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotdHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGVudW07
Ci10eXBlZGVmIGJvb2xlYW4gICAgICAgIEdMYm9vbGVhbjsKLXR5cGVkZWYgdW5zaWduZWQgbG9u
ZyAgR0xiaXRmaWVsZDsKLXR5cGVkZWYgYnl0ZSAgICAgICAgICAgR0xieXRlOyAgICAgICAgIC8q
ICdieXRlJyBzaG91bGQgYmUgYSBzaWduZWQgOCBiaXQgdHlwZS4gKi8KLXR5cGVkZWYgc2hvcnQg
ICAgICAgICAgR0xzaG9ydDsKLXR5cGVkZWYgbG9uZyAgICAgICAgICAgR0xpbnQ7Ci10eXBlZGVm
IGxvbmcgICAgICAgICAgIEdMc2l6ZWk7Ci10eXBlZGVmIGxvbmcgbG9uZyAgICAgIEdMaW50cHRy
OwotdHlwZWRlZiBsb25nIGxvbmcgICAgICBHTHNpemVpcHRyOwotdHlwZWRlZiBvY3RldCAgICAg
ICAgICBHTHVieXRlOyAgICAgICAgLyogJ29jdGV0JyBzaG91bGQgYmUgYW4gdW5zaWduZWQgOCBi
aXQgdHlwZS4gKi8KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgR0x1c2hvcnQ7Ci10eXBlZGVmIHVu
c2lnbmVkIGxvbmcgIEdMdWludDsKLXR5cGVkZWYgdW5yZXN0cmljdGVkIGZsb2F0IEdMZmxvYXQ7
Ci10eXBlZGVmIHVucmVzdHJpY3RlZCBmbG9hdCBHTGNsYW1wZjsKLQogWwogICAgIENvbmRpdGlv
bmFsPVdFQkdMLAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAogICAgIERvTm90Q2hlY2tDb25z
dGFudHMsCi1dIGludGVyZmFjZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgOiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0IHsKLQotICAgIC8qIENsZWFyQnVmZmVyTWFzayAqLwotICAgIGNvbnN0IEdMZW51
bSBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgPSAweDAwMDAwMTAwOwotICAgIGNvbnN0
IEdMZW51bSBTVEVOQ0lMX0JVRkZFUl9CSVQgICAgICAgICAgICAgPSAweDAwMDAwNDAwOwotICAg
IGNvbnN0IEdMZW51bSBDT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAgPSAweDAwMDA0MDAw
OwotCi0gICAgLyogQmVnaW5Nb2RlICovCi0gICAgY29uc3QgR0xlbnVtIFBPSU5UUyAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDAwMDsKLSAgICBjb25zdCBHTGVudW0gTElORVMgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwMDAxOwotICAgIGNvbnN0IEdMZW51bSBMSU5FX0xPT1Ag
ICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDI7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVfU1RS
SVAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMzsKLSAgICBjb25zdCBHTGVudW0gVFJJQU5H
TEVTICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA0OwotICAgIGNvbnN0IEdMZW51bSBUUklB
TkdMRV9TVFJJUCAgICAgICAgICAgICAgICAgPSAweDAwMDU7Ci0gICAgY29uc3QgR0xlbnVtIFRS
SUFOR0xFX0ZBTiAgICAgICAgICAgICAgICAgICA9IDB4MDAwNjsKLQotICAgIC8qIEFscGhhRnVu
Y3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi8KLSAgICAvKiAgICAgIE5FVkVSICovCi0g
ICAgLyogICAgICBMRVNTICovCi0gICAgLyogICAgICBFUVVBTCAqLwotICAgIC8qICAgICAgTEVR
VUFMICovCi0gICAgLyogICAgICBHUkVBVEVSICovCi0gICAgLyogICAgICBOT1RFUVVBTCAqLwot
ICAgIC8qICAgICAgR0VRVUFMICovCi0gICAgLyogICAgICBBTFdBWVMgKi8KLQotICAgIC8qIEJs
ZW5kaW5nRmFjdG9yRGVzdCAqLwotICAgIGNvbnN0IEdMZW51bSBaRVJPICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAwOwotICAgIGNvbnN0IEdMZW51bSBPTkUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAxOwotICAgIGNvbnN0IEdMZW51bSBTUkNfQ09MT1IgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAzMDA7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQ09MT1IgICAg
ICAgICAgICA9IDB4MDMwMTsKLSAgICBjb25zdCBHTGVudW0gU1JDX0FMUEhBICAgICAgICAgICAg
ICAgICAgICAgID0gMHgwMzAyOwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfU1JDX0FMUEhB
ICAgICAgICAgICAgPSAweDAzMDM7Ci0gICAgY29uc3QgR0xlbnVtIERTVF9BTFBIQSAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MDMwNDsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9B
TFBIQSAgICAgICAgICAgID0gMHgwMzA1OwotCi0gICAgLyogQmxlbmRpbmdGYWN0b3JTcmMgKi8K
LSAgICAvKiAgICAgIFpFUk8gKi8KLSAgICAvKiAgICAgIE9ORSAqLwotICAgIGNvbnN0IEdMZW51
bSBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDY7Ci0gICAgY29uc3QgR0xl
bnVtIE9ORV9NSU5VU19EU1RfQ09MT1IgICAgICAgICAgICA9IDB4MDMwNzsKLSAgICBjb25zdCBH
TGVudW0gU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgID0gMHgwMzA4OwotICAgIC8qICAg
ICAgU1JDX0FMUEhBICovCi0gICAgLyogICAgICBPTkVfTUlOVVNfU1JDX0FMUEhBICovCi0gICAg
LyogICAgICBEU1RfQUxQSEEgKi8KLSAgICAvKiAgICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgKi8K
LQotICAgIC8qIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAqLwotICAgIGNvbnN0IEdMZW51bSBGVU5D
X0FERCAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwMDY7Ci0gICAgY29uc3QgR0xlbnVtIEJM
RU5EX0VRVUFUSU9OICAgICAgICAgICAgICAgICA9IDB4ODAwOTsKLSAgICBjb25zdCBHTGVudW0g
QkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAgID0gMHg4MDA5OyAgIC8qIHNhbWUgYXMgQkxF
TkRfRVFVQVRJT04gKi8KLSAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT05fQUxQSEEgICAg
ICAgICAgID0gMHg4ODNEOwotCi0gICAgLyogQmxlbmRTdWJ0cmFjdCAqLwotICAgIGNvbnN0IEdM
ZW51bSBGVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgPSAweDgwMEE7Ci0gICAgY29uc3Qg
R0xlbnVtIEZVTkNfUkVWRVJTRV9TVUJUUkFDVCAgICAgICAgICA9IDB4ODAwQjsKLQotICAgIC8q
IFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1Rf
UkdCICAgICAgICAgICAgICAgICAgPSAweDgwQzg7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX1NS
Q19SR0IgICAgICAgICAgICAgICAgICA9IDB4ODBDOTsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRf
RFNUX0FMUEhBICAgICAgICAgICAgICAgID0gMHg4MENBOwotICAgIGNvbnN0IEdMZW51bSBCTEVO
RF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgPSAweDgwQ0I7Ci0gICAgY29uc3QgR0xlbnVtIENP
TlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICA9IDB4ODAwMTsKLSAgICBjb25zdCBHTGVudW0g
T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgID0gMHg4MDAyOwotICAgIGNvbnN0IEdMZW51
bSBDT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgPSAweDgwMDM7Ci0gICAgY29uc3QgR0xl
bnVtIE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAgICAgICA9IDB4ODAwNDsKLSAgICBjb25zdCBH
TGVudW0gQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgID0gMHg4MDA1OwotCi0gICAgLyog
QnVmZmVyIE9iamVjdHMgKi8KLSAgICBjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSICAgICAgICAg
ICAgICAgICAgID0gMHg4ODkyOwotICAgIGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZF
UiAgICAgICAgICAgPSAweDg4OTM7Ci0gICAgY29uc3QgR0xlbnVtIEFSUkFZX0JVRkZFUl9CSU5E
SU5HICAgICAgICAgICA9IDB4ODg5NDsKLSAgICBjb25zdCBHTGVudW0gRUxFTUVOVF9BUlJBWV9C
VUZGRVJfQklORElORyAgID0gMHg4ODk1OwotCi0gICAgY29uc3QgR0xlbnVtIFNUUkVBTV9EUkFX
ICAgICAgICAgICAgICAgICAgICA9IDB4ODhFMDsKLSAgICBjb25zdCBHTGVudW0gU1RBVElDX0RS
QVcgICAgICAgICAgICAgICAgICAgID0gMHg4OEU0OwotICAgIGNvbnN0IEdMZW51bSBEWU5BTUlD
X0RSQVcgICAgICAgICAgICAgICAgICAgPSAweDg4RTg7Ci0KLSAgICBjb25zdCBHTGVudW0gQlVG
RkVSX1NJWkUgICAgICAgICAgICAgICAgICAgID0gMHg4NzY0OwotICAgIGNvbnN0IEdMZW51bSBC
VUZGRVJfVVNBR0UgICAgICAgICAgICAgICAgICAgPSAweDg3NjU7Ci0KLSAgICBjb25zdCBHTGVu
dW0gQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAgID0gMHg4NjI2OwotCi0gICAgLyogQ3Vs
bEZhY2VNb2RlICovCi0gICAgY29uc3QgR0xlbnVtIEZST05UICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDQwNDsKLSAgICBjb25zdCBHTGVudW0gQkFDSyAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwNDA1OwotICAgIGNvbnN0IEdMZW51bSBGUk9OVF9BTkRfQkFDSyAgICAgICAg
ICAgICAgICAgPSAweDA0MDg7Ci0KLSAgICAvKiBEZXB0aEZ1bmN0aW9uICovCi0gICAgLyogICAg
ICBORVZFUiAqLwotICAgIC8qICAgICAgTEVTUyAqLwotICAgIC8qICAgICAgRVFVQUwgKi8KLSAg
ICAvKiAgICAgIExFUVVBTCAqLwotICAgIC8qICAgICAgR1JFQVRFUiAqLwotICAgIC8qICAgICAg
Tk9URVFVQUwgKi8KLSAgICAvKiAgICAgIEdFUVVBTCAqLwotICAgIC8qICAgICAgQUxXQVlTICov
Ci0KLSAgICAvKiBFbmFibGVDYXAgKi8KLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV8yRCAgICAg
ICAgICAgICAgICAgICAgID0gMHgwREUxOwotICAgIGNvbnN0IEdMZW51bSBDVUxMX0ZBQ0UgICAg
ICAgICAgICAgICAgICAgICAgPSAweDBCNDQ7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MEJFMjsKLSAgICBjb25zdCBHTGVudW0gRElUSEVSICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkQwOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X1RFU1QgICAgICAgICAgICAgICAgICAgPSAweDBCOTA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRI
X1RFU1QgICAgICAgICAgICAgICAgICAgICA9IDB4MEI3MTsKLSAgICBjb25zdCBHTGVudW0gU0NJ
U1NPUl9URVNUICAgICAgICAgICAgICAgICAgID0gMHgwQzExOwotICAgIGNvbnN0IEdMZW51bSBQ
T0xZR09OX09GRlNFVF9GSUxMICAgICAgICAgICAgPSAweDgwMzc7Ci0gICAgY29uc3QgR0xlbnVt
IFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICA9IDB4ODA5RTsKLSAgICBjb25zdCBHTGVu
dW0gU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgID0gMHg4MEEwOwotCi0gICAgLyogRXJy
b3JDb2RlICovCi0gICAgY29uc3QgR0xlbnVtIE5PX0VSUk9SICAgICAgICAgICAgICAgICAgICAg
ICA9IDA7Ci0gICAgY29uc3QgR0xlbnVtIElOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICA9
IDB4MDUwMDsKLSAgICBjb25zdCBHTGVudW0gSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAg
ID0gMHgwNTAxOwotICAgIGNvbnN0IEdMZW51bSBJTlZBTElEX09QRVJBVElPTiAgICAgICAgICAg
ICAgPSAweDA1MDI7Ci0gICAgY29uc3QgR0xlbnVtIE9VVF9PRl9NRU1PUlkgICAgICAgICAgICAg
ICAgICA9IDB4MDUwNTsKLQotICAgIC8qIEZyb250RmFjZURpcmVjdGlvbiAqLwotICAgIGNvbnN0
IEdMZW51bSBDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA5MDA7Ci0gICAgY29u
c3QgR0xlbnVtIENDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDkwMTsKLQotICAg
IC8qIEdldFBOYW1lICovCi0gICAgY29uc3QgR0xlbnVtIExJTkVfV0lEVEggICAgICAgICAgICAg
ICAgICAgICA9IDB4MEIyMTsKLSAgICBjb25zdCBHTGVudW0gQUxJQVNFRF9QT0lOVF9TSVpFX1JB
TkdFICAgICAgID0gMHg4NDZEOwotICAgIGNvbnN0IEdMZW51bSBBTElBU0VEX0xJTkVfV0lEVEhf
UkFOR0UgICAgICAgPSAweDg0NkU7Ci0gICAgY29uc3QgR0xlbnVtIENVTExfRkFDRV9NT0RFICAg
ICAgICAgICAgICAgICA9IDB4MEI0NTsKLSAgICBjb25zdCBHTGVudW0gRlJPTlRfRkFDRSAgICAg
ICAgICAgICAgICAgICAgID0gMHgwQjQ2OwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9SQU5HRSAg
ICAgICAgICAgICAgICAgICAgPSAweDBCNzA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1dSSVRF
TUFTSyAgICAgICAgICAgICAgICA9IDB4MEI3MjsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfQ0xF
QVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQjczOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9G
VU5DICAgICAgICAgICAgICAgICAgICAgPSAweDBCNzQ7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICA9IDB4MEI5MTsKLSAgICBjb25zdCBHTGVudW0gU1RF
TkNJTF9GVU5DICAgICAgICAgICAgICAgICAgID0gMHgwQjkyOwotICAgIGNvbnN0IEdMZW51bSBT
VEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgPSAweDBCOTQ7Ci0gICAgY29uc3QgR0xlbnVt
IFNURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICA9IDB4MEI5NTsKLSAgICBjb25zdCBHTGVu
dW0gU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgID0gMHgwQjk2OwotICAgIGNvbnN0IEdM
ZW51bSBTVEVOQ0lMX1JFRiAgICAgICAgICAgICAgICAgICAgPSAweDBCOTc7Ci0gICAgY29uc3Qg
R0xlbnVtIFNURU5DSUxfVkFMVUVfTUFTSyAgICAgICAgICAgICA9IDB4MEI5MzsKLSAgICBjb25z
dCBHTGVudW0gU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAgID0gMHgwQjk4OwotICAgIGNv
bnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAgICAgICAgPSAweDg4MDA7Ci0gICAg
Y29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICA9IDB4ODgwMTsKLSAg
ICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgID0gMHg4ODAyOwot
ICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTICAgPSAweDg4MDM7
Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICA9IDB4OENB
MzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAgID0gMHg4
Q0E0OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAgICAgICAgPSAw
eDhDQTU7Ci0gICAgY29uc3QgR0xlbnVtIFZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MEJBMjsKLSAgICBjb25zdCBHTGVudW0gU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAgICAg
ID0gMHgwQzEwOwotICAgIC8qICAgICAgU0NJU1NPUl9URVNUICovCi0gICAgY29uc3QgR0xlbnVt
IENPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4MEMyMjsKLSAgICBjb25zdCBHTGVu
dW0gQ09MT1JfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0gMHgwQzIzOwotICAgIGNvbnN0IEdM
ZW51bSBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgPSAweDBDRjU7Ci0gICAgY29uc3Qg
R0xlbnVtIFBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICA9IDB4MEQwNTsKLSAgICBjb25z
dCBHTGVudW0gTUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgID0gMHgwRDMzOwotICAgIGNv
bnN0IEdMZW51bSBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgPSAweDBEM0E7Ci0gICAg
Y29uc3QgR0xlbnVtIFNVQlBJWEVMX0JJVFMgICAgICAgICAgICAgICAgICA9IDB4MEQ1MDsKLSAg
ICBjb25zdCBHTGVudW0gUkVEX0JJVFMgICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDUyOwot
ICAgIGNvbnN0IEdMZW51bSBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTM7
Ci0gICAgY29uc3QgR0xlbnVtIEJMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1
NDsKLSAgICBjb25zdCBHTGVudW0gQUxQSEFfQklUUyAgICAgICAgICAgICAgICAgICAgID0gMHgw
RDU1OwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAw
eDBENTY7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICA9
IDB4MEQ1NzsKLSAgICBjb25zdCBHTGVudW0gUE9MWUdPTl9PRkZTRVRfVU5JVFMgICAgICAgICAg
ID0gMHgyQTAwOwotICAgIC8qICAgICAgUE9MWUdPTl9PRkZTRVRfRklMTCAqLwotICAgIGNvbnN0
IEdMZW51bSBQT0xZR09OX09GRlNFVF9GQUNUT1IgICAgICAgICAgPSAweDgwMzg7Ci0gICAgY29u
c3QgR0xlbnVtIFRFWFRVUkVfQklORElOR18yRCAgICAgICAgICAgICA9IDB4ODA2OTsKLSAgICBj
b25zdCBHTGVudW0gU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAgICAgID0gMHg4MEE4OwotICAg
IGNvbnN0IEdMZW51bSBTQU1QTEVTICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwQTk7Ci0g
ICAgY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRV9WQUxVRSAgICAgICAgICA9IDB4ODBBQTsK
LSAgICBjb25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgID0gMHg4MEFC
OwotCi0gICAgLyogR2V0VGV4dHVyZVBhcmFtZXRlciAqLwotICAgIC8qICAgICAgVEVYVFVSRV9N
QUdfRklMVEVSICovCi0gICAgLyogICAgICBURVhUVVJFX01JTl9GSUxURVIgKi8KLSAgICAvKiAg
ICAgIFRFWFRVUkVfV1JBUF9TICovCi0gICAgLyogICAgICBURVhUVVJFX1dSQVBfVCAqLwotCi0g
ICAgY29uc3QgR0xlbnVtIENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA9IDB4ODZBMzsK
LQotICAgIC8qIEhpbnRNb2RlICovCi0gICAgY29uc3QgR0xlbnVtIERPTlRfQ0FSRSAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MTEwMDsKLSAgICBjb25zdCBHTGVudW0gRkFTVEVTVCAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgxMTAxOwotICAgIGNvbnN0IEdMZW51bSBOSUNFU1QgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDExMDI7Ci0KLSAgICAvKiBIaW50VGFyZ2V0ICovCi0gICAg
Y29uc3QgR0xlbnVtIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgPSAweDgxOTI7Ci0K
LSAgICAvKiBEYXRhVHlwZSAqLwotICAgIGNvbnN0IEdMZW51bSBCWVRFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDE0MDA7Ci0gICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX0JZVEUgICAg
ICAgICAgICAgICAgICA9IDB4MTQwMTsKLSAgICBjb25zdCBHTGVudW0gU0hPUlQgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgxNDAyOwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9S
VCAgICAgICAgICAgICAgICAgPSAweDE0MDM7Ci0gICAgY29uc3QgR0xlbnVtIElOVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MTQwNDsKLSAgICBjb25zdCBHTGVudW0gVU5TSUdORURf
SU5UICAgICAgICAgICAgICAgICAgID0gMHgxNDA1OwotICAgIGNvbnN0IEdMZW51bSBGTE9BVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDY7Ci0KLSAgICAvKiBQaXhlbEZvcm1hdCAq
LwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DT01QT05FTlQgICAgICAgICAgICAgICAgPSAweDE5
MDI7Ci0gICAgY29uc3QgR0xlbnVtIEFMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MTkwNjsKLSAgICBjb25zdCBHTGVudW0gUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxOTA3OwotICAgIGNvbnN0IEdMZW51bSBSR0JBICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDE5MDg7Ci0gICAgY29uc3QgR0xlbnVtIExVTUlOQU5DRSAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MTkwOTsKLSAgICBjb25zdCBHTGVudW0gTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAg
ICAgID0gMHgxOTBBOwotCi0gICAgLyogUGl4ZWxUeXBlICovCi0gICAgLyogICAgICBVTlNJR05F
RF9CWVRFICovCi0gICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAg
ICA9IDB4ODAzMzsKLSAgICBjb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAg
ICAgID0gMHg4MDM0OwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzZfNSAgICAg
ICAgICAgPSAweDgzNjM7Ci0KLSAgICAvKiBTaGFkZXJzICovCi0gICAgY29uc3QgR0xlbnVtIEZS
QUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgID0gMHg4QjMwOwotICAgIGNvbnN0IEdMZW51
bSBWRVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAgICA9IDB4OEIzMTsKLSAgICBjb25zdCBH
TGVudW0gTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAgICAgPSAweDg4Njk7Ci0gICAgY29u
c3QgR0xlbnVtIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAgICAgID0gMHg4REZCOwotICAg
IGNvbnN0IEdMZW51bSBNQVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICA9IDB4OERGQzsK
LSAgICBjb25zdCBHTGVudW0gTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDhC
NEQ7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgID0g
MHg4QjRDOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAg
ICA9IDB4ODg3MjsKLSAgICBjb25zdCBHTGVudW0gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9S
UyAgICAgPSAweDhERkQ7Ci0gICAgY29uc3QgR0xlbnVtIFNIQURFUl9UWVBFICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4QjRGOwotICAgIGNvbnN0IEdMZW51bSBERUxFVEVfU1RBVFVTICAgICAg
ICAgICAgICAgICAgICA9IDB4OEI4MDsKLSAgICBjb25zdCBHTGVudW0gTElOS19TVEFUVVMgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhCODI7Ci0gICAgY29uc3QgR0xlbnVtIFZBTElEQVRFX1NU
QVRVUyAgICAgICAgICAgICAgICAgID0gMHg4QjgzOwotICAgIGNvbnN0IEdMZW51bSBBVFRBQ0hF
RF9TSEFERVJTICAgICAgICAgICAgICAgICA9IDB4OEI4NTsKLSAgICBjb25zdCBHTGVudW0gQUNU
SVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgICAgPSAweDhCODY7Ci0gICAgY29uc3QgR0xlbnVt
IEFDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgID0gMHg4Qjg5OwotICAgIGNvbnN0IEdM
ZW51bSBTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gICAgICAgICA9IDB4OEI4QzsKLSAgICBjb25z
dCBHTGVudW0gQ1VSUkVOVF9QUk9HUkFNICAgICAgICAgICAgICAgICAgPSAweDhCOEQ7Ci0KLSAg
ICAvKiBTdGVuY2lsRnVuY3Rpb24gKi8KLSAgICBjb25zdCBHTGVudW0gTkVWRVIgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwMjAwOwotICAgIGNvbnN0IEdMZW51bSBMRVNTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDAyMDE7Ci0gICAgY29uc3QgR0xlbnVtIEVRVUFMICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMjsKLSAgICBjb25zdCBHTGVudW0gTEVRVUFMICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAzOwotICAgIGNvbnN0IEdMZW51bSBHUkVBVEVS
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDQ7Ci0gICAgY29uc3QgR0xlbnVtIE5PVEVR
VUFMICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNTsKLSAgICBjb25zdCBHTGVudW0gR0VR
VUFMICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjA2OwotICAgIGNvbnN0IEdMZW51bSBB
TFdBWVMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDc7Ci0KLSAgICAvKiBTdGVuY2ls
T3AgKi8KLSAgICAvKiAgICAgIFpFUk8gKi8KLSAgICBjb25zdCBHTGVudW0gS0VFUCAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgxRTAwOwotICAgIGNvbnN0IEdMZW51bSBSRVBMQUNFICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDE7Ci0gICAgY29uc3QgR0xlbnVtIElOQ1IgICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMjsKLSAgICBjb25zdCBHTGVudW0gREVDUiAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAzOwotICAgIGNvbnN0IEdMZW51bSBJTlZF
UlQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE1MEE7Ci0gICAgY29uc3QgR0xlbnVtIElO
Q1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODUwNzsKLSAgICBjb25zdCBHTGVudW0g
REVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0gMHg4NTA4OwotCi0gICAgLyogU3RyaW5n
TmFtZSAqLwotICAgIGNvbnN0IEdMZW51bSBWRU5ET1IgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDFGMDA7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkVSICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MUYwMTsKLSAgICBjb25zdCBHTGVudW0gVkVSU0lPTiAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgxRjAyOwotCi0gICAgLyogVGV4dHVyZU1hZ0ZpbHRlciAqLwotICAgIGNvbnN0IEdM
ZW51bSBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI2MDA7Ci0gICAgY29uc3Qg
R0xlbnVtIExJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjYwMTsKLQotICAgIC8q
IFRleHR1cmVNaW5GaWx0ZXIgKi8KLSAgICAvKiAgICAgIE5FQVJFU1QgKi8KLSAgICAvKiAgICAg
IExJTkVBUiAqLwotICAgIGNvbnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9ORUFSRVNUICAgICAg
ICAgPSAweDI3MDA7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTkVBUkVTVCAgICAg
ICAgICA9IDB4MjcwMTsKLSAgICBjb25zdCBHTGVudW0gTkVBUkVTVF9NSVBNQVBfTElORUFSICAg
ICAgICAgID0gMHgyNzAyOwotICAgIGNvbnN0IEdMZW51bSBMSU5FQVJfTUlQTUFQX0xJTkVBUiAg
ICAgICAgICAgPSAweDI3MDM7Ci0KLSAgICAvKiBUZXh0dXJlUGFyYW1ldGVyTmFtZSAqLwotICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFX01BR19GSUxURVIgICAgICAgICAgICAgPSAweDI4MDA7Ci0g
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfTUlOX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMTsK
LSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9XUkFQX1MgICAgICAgICAgICAgICAgID0gMHgyODAy
OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgPSAweDI4
MDM7Ci0KLSAgICAvKiBUZXh0dXJlVGFyZ2V0ICovCi0gICAgLyogICAgICBURVhUVVJFXzJEICov
Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTcw
MjsKLQotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQICAgICAgICAgICAgICAgPSAw
eDg1MTM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICA9
IDB4ODUxNDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAg
ID0gMHg4NTE1OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1gg
ICAgPSAweDg1MTY7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WSAgICA9IDB4ODUxNzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZICAgID0gMHg4NTE4OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1ogICAgPSAweDg1MTk7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWiAgICA9IDB4ODUxQTsKLSAgICBjb25zdCBHTGVudW0gTUFYX0NVQkVfTUFQX1RFWFRV
UkVfU0laRSAgICAgID0gMHg4NTFDOwotCi0gICAgLyogVGV4dHVyZVVuaXQgKi8KLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMwOwotICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFMSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzE7Ci0gICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkUyICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMjsKLSAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMzOwot
ICAgIGNvbnN0IEdMZW51bSBURVhUVVJFNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzQ7
Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU1ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRD
NTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEM2OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFNyAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0Qzc7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU4ICAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODRDODsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTkgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEM5OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0Q0E7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxMSAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRDQjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTEyICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NENDOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTMgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0Q0Q7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNCAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODRDRTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE1ICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NENGOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTYgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0RDA7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNyAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODREMTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE4ICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEQyOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTkg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUy
MCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RTIxICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ1OwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFMjIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDY7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkUyMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENzsKLSAgICBjb25zdCBHTGVudW0g
VEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ4OwotICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFMjUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDk7Ci0gICAgY29uc3QgR0xl
bnVtIFRFWFRVUkUyNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREQTsKLSAgICBjb25zdCBH
TGVudW0gVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERCOwotICAgIGNvbnN0
IEdMZW51bSBURVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAgPSAweDg0REM7Ci0gICAgY29u
c3QgR0xlbnVtIFRFWFRVUkUyOSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERDsKLSAgICBj
b25zdCBHTGVudW0gVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERFOwotICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFMzEgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REY7Ci0g
ICAgY29uc3QgR0xlbnVtIEFDVElWRV9URVhUVVJFICAgICAgICAgICAgICAgICA9IDB4ODRFMDsK
LQotICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqLwotICAgIGNvbnN0IEdMZW51bSBSRVBFQVQgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDI5MDE7Ci0gICAgY29uc3QgR0xlbnVtIENMQU1QX1RP
X0VER0UgICAgICAgICAgICAgICAgICA9IDB4ODEyRjsKLSAgICBjb25zdCBHTGVudW0gTUlSUk9S
RURfUkVQRUFUICAgICAgICAgICAgICAgID0gMHg4MzcwOwotCi0gICAgLyogVW5pZm9ybSBUeXBl
cyAqLwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9WRUMyICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNTA7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1MTsKLSAgICBjb25zdCBHTGVudW0gRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjUyOwotICAgIGNvbnN0IEdMZW51bSBJTlRfVkVDMiAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDhCNTM7Ci0gICAgY29uc3QgR0xlbnVtIElOVF9WRUMzICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4OEI1NDsKLSAgICBjb25zdCBHTGVudW0gSU5UX1ZFQzQgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4QjU1OwotICAgIGNvbnN0IEdMZW51bSBCT09MICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDhCNTY7Ci0gICAgY29uc3QgR0xlbnVtIEJPT0xfVkVDMiAgICAgICAgICAg
ICAgICAgICAgICA9IDB4OEI1NzsKLSAgICBjb25zdCBHTGVudW0gQk9PTF9WRUMzICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4QjU4OwotICAgIGNvbnN0IEdMZW51bSBCT09MX1ZFQzQgICAgICAg
ICAgICAgICAgICAgICAgPSAweDhCNTk7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDIgICAg
ICAgICAgICAgICAgICAgICA9IDB4OEI1QTsKLSAgICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMyAg
ICAgICAgICAgICAgICAgICAgID0gMHg4QjVCOwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQ0
ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUM7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRVJf
MkQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1RTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExF
Ul9DVUJFICAgICAgICAgICAgICAgICAgID0gMHg4QjYwOwotCi0gICAgLyogVmVydGV4IEFycmF5
cyAqLwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAg
ID0gMHg4NjIyOwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUgICAg
ICAgICAgID0gMHg4NjIzOwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1NU
UklERSAgICAgICAgID0gMHg4NjI0OwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FS
UkFZX1RZUEUgICAgICAgICAgID0gMHg4NjI1OwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRU
UklCX0FSUkFZX05PUk1BTElaRUQgICAgID0gMHg4ODZBOwotICAgIGNvbnN0IEdMZW51bSBWRVJU
RVhfQVRUUklCX0FSUkFZX1BPSU5URVIgICAgICAgID0gMHg4NjQ1OwotICAgIGNvbnN0IEdMZW51
bSBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HID0gMHg4ODlGOwotCi0gICAgLyog
U2hhZGVyIFNvdXJjZSAqLwotICAgIGNvbnN0IEdMZW51bSBDT01QSUxFX1NUQVRVUyAgICAgICAg
ICAgICAgICAgPSAweDhCODE7Ci0KLSAgICAvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBU
eXBlcyAqLwotICAgIGNvbnN0IEdMZW51bSBMT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAg
PSAweDhERjA7Ci0gICAgY29uc3QgR0xlbnVtIE1FRElVTV9GTE9BVCAgICAgICAgICAgICAgICAg
ICA9IDB4OERGMTsKLSAgICBjb25zdCBHTGVudW0gSElHSF9GTE9BVCAgICAgICAgICAgICAgICAg
ICAgID0gMHg4REYyOwotICAgIGNvbnN0IEdMZW51bSBMT1dfSU5UICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDhERjM7Ci0gICAgY29uc3QgR0xlbnVtIE1FRElVTV9JTlQgICAgICAgICAgICAg
ICAgICAgICA9IDB4OERGNDsKLSAgICBjb25zdCBHTGVudW0gSElHSF9JTlQgICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4REY1OwotCi0gICAgLyogRnJhbWVidWZmZXIgT2JqZWN0LiAqLwotICAg
IGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgPSAweDhENDA7Ci0g
ICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MTsK
LQotICAgIGNvbnN0IEdMZW51bSBSR0JBNCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgw
NTY7Ci0gICAgY29uc3QgR0xlbnVtIFJHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODA1NzsKLSAgICBjb25zdCBHTGVudW0gUkdCNTY1ICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHg4RDYyOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAg
PSAweDgxQTU7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfSU5ERVggICAgICAgICAgICAgICAg
ICA9IDB4MTkwMTsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAg
ICAgID0gMHg4RDQ4OwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9TVEVOQ0lMICAgICAgICAgICAg
ICAgICAgPSAweDg0Rjk7Ci0KLSAgICBjb25zdCBHTGVudW0gU1JHQl9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhDNDA7Ci0gICAgY29uc3QgR0xlbnVtIFNSR0Jf
QUxQSEFfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQyOwotICAgIGNv
bnN0IEdMZW51bSBTUkdCOF9BTFBIQThfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4OEM0MzsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9F
TkNPRElOR19FWFQgICAgPSAweDgyMTA7Ci0KLSAgICBjb25zdCBHTGVudW0gTUlOX0VYVCAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4MDA3OwotICAgIGNvbnN0IEdMZW51bSBNQVhfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDgwMDg7Ci0KLSAgICBjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSX1dJRFRIICAgICAgICAgICAgID0gMHg4RDQyOwotICAgIGNvbnN0IEdMZW51bSBSRU5E
RVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgPSAweDhENDM7Ci0gICAgY29uc3QgR0xlbnVtIFJF
TkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQgICA9IDB4OEQ0NDsKLSAgICBjb25zdCBHTGVudW0g
UkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgID0gMHg4RDUwOwotICAgIGNvbnN0IEdMZW51
bSBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgPSAweDhENTE7Ci0gICAgY29uc3QgR0xl
bnVtIFJFTkRFUkJVRkZFUl9CTFVFX1NJWkUgICAgICAgICA9IDB4OEQ1MjsKLSAgICBjb25zdCBH
TGVudW0gUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgID0gMHg4RDUzOwotICAgIGNvbnN0
IEdMZW51bSBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgPSAweDhENTQ7Ci0gICAgY29u
c3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUgICAgICA9IDB4OEQ1NTsKLQotICAg
IGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFICAgICAgICAg
ICA9IDB4OENEMDsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfTkFNRSAgICAgICAgICAgPSAweDhDRDE7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCAgICAgICAgID0gMHg4Q0QyOwotICAgIGNvbnN0IEdM
ZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSA9IDB4OENE
MzsKLQotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9BVFRBQ0hNRU5UMCAgICAgICAgICAgICAgPSAw
eDhDRTA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX0FUVEFDSE1FTlQgICAgICAgICAgICAgICA9
IDB4OEQwMDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAg
ID0gMHg4RDIwOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAg
ICAgPSAweDgyMUE7Ci0KLSAgICBjb25zdCBHTGVudW0gTk9ORSAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMDsKLQotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9DT01QTEVURSAgICAg
ICAgICAgICAgICAgICAgICA9IDB4OENENTsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgPSAweDhDRDY7Ci0gICAgY29uc3QgR0xlbnVt
IEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UID0gMHg4Q0Q3OwotICAg
IGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgICAgICAgICA9
IDB4OENEOTsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAg
ICAgICAgICAgICAgPSAweDhDREQ7Ci0KLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQklO
RElORyAgICAgICAgICAgID0gMHg4Q0E2OwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJf
QklORElORyAgICAgICAgICAgPSAweDhDQTc7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9SRU5ERVJC
VUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRFODsKLQotICAgIGNvbnN0IEdMZW51bSBJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiAgPSAweDA1MDY7Ci0KLSAgICAvKiBXZWJHTC1zcGVjaWZp
YyBlbnVtcyAqLwotICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAg
ICAgICAgID0gMHg5MjQwOwotICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQ
SEFfV0VCR0wgICAgID0gMHg5MjQxOwotICAgIGNvbnN0IEdMZW51bSBDT05URVhUX0xPU1RfV0VC
R0wgICAgICAgICAgICAgICAgID0gMHg5MjQyOwotICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfQ09M
T1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzOwotICAgIGNvbnN0IEdMZW51bSBCUk9X
U0VSX0RFRkFVTFRfV0VCR0wgICAgICAgICAgICAgID0gMHg5MjQ0OwotCi0gICAgcmVhZG9ubHkg
YXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1ZmZlcldpZHRoOwotICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJIZWlnaHQ7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBhY3RpdmVUZXh0dXJlKEdMZW51bSB0
ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIFdlYkdMU2hhZGVyIHNo
YWRlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5k
ZXgsIERPTVN0cmluZyBuYW1lKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBiaW5kQnVmZmVyKEdMZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVy
IGJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgYmluZEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIg
ZnJhbWVidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJpbmRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJi
dWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBiaW5kVGV4dHVyZShHTGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1
cmUgdGV4dHVyZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5k
Q29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFt
cGYgYWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVx
dWF0aW9uKEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhh
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jKEdMZW51
bSBzZmFjdG9yLCBHTGVudW0gZGZhY3Rvcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIGJsZW5kRnVuY1NlcGFyYXRlKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0Is
IEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJEYXRhKEdMZW51bSB0YXJn
ZXQsIEFycmF5QnVmZmVyPyBkYXRhLCBHTGVudW0gdXNhZ2UpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRh
cmdldCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhLCBHTGVudW0gdXNhZ2UpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xl
bnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNhZ2UpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlclN1YkRhdGEo
R0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZlcj8gZGF0YSk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVy
U3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVyVmlldz8g
ZGF0YSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVudW0gICAgICAgY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhHTGVudW0gdGFyZ2V0KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgY2xlYXIoR0xiaXRmaWVsZCBtYXNrKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgY2xlYXJDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVu
LCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoR0xjbGFtcGYgZGVwdGgpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhclN0ZW5jaWwoR0xpbnQgcyk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbG9yTWFzayhHTGJvb2xlYW4gcmVkLCBH
TGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4gYWxwaGEpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGNvbXBpbGVT
aGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBjb21wcmVzc2VkVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3
IGRhdGEpOwotICAgIAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb3B5
VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xp
bnQgYm9yZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29weVRl
eFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQnVmZmVyIGNyZWF0ZUJ1ZmZl
cigpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMRnJhbWVidWZmZXIgY3JlYXRlRnJh
bWVidWZmZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFByb2dyYW0gY3JlYXRl
UHJvZ3JhbSgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMUmVuZGVyYnVmZmVyIGNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gV2ViR0xTaGFkZXIgY3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSBXZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVyZSgpOwotCi0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGN1bGxGYWNlKEdMZW51bSBtb2RlKTsKLQotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVCdWZmZXIoV2ViR0xCdWZm
ZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRl
RnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dy
YW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVSZW5kZXJi
dWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVRleHR1cmUoV2ViR0xU
ZXh0dXJlIHRleHR1cmUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IGRlcHRoRnVuYyhHTGVudW0gZnVuYyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGRlcHRoTWFzayhHTGJvb2xlYW4gZmxhZyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGRlcHRoUmFuZ2UoR0xjbGFtcGYgek5lYXIsIEdMY2xhbXBmIHpGYXIp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IGRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xTaGFkZXIgc2hhZGVyKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGlzYWJsZShHTGVudW0gY2Fw
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4KTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBkcmF3QXJyYXlzKEdMZW51
bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0VsZW1lbnRzKEdMZW51bSBt
b2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgR0xpbnRwdHIgb2Zmc2V0KTsKLQotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBlbmFibGUoR0xlbnVtIGNhcCk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgZmluaXNoKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIGZsdXNoKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVy
YnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJl
LCBHTGludCBsZXZlbCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGZy
b250RmFjZShHTGVudW0gbW9kZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIGdlbmVyYXRlTWlwbWFwKEdMZW51bSB0YXJnZXQpOwotICAgIAotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJbmZvIGdldEFjdGl2ZUF0dHJp
YihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMQWN0aXZlSW5mbyBnZXRBY3RpdmVVbmlmb3Jt
KFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgpOwotCi0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJz
KFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMaW50
ICAgICAgICBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5n
IG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0QnVmZmVy
UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVudW0gZ2V0RXJyb3IoKTsKLQotICAgIC8v
IG9iamVjdCBnZXRFeHRlbnNpb24oRE9NU3RyaW5nIG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbV0gYW55IGdldEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7Ci0KLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVu
dCwgR0xlbnVtIHBuYW1lKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gYW55IGdldFBhcmFtZXRlcihHTGVudW0gcG5hbWUpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UHJvZ3JhbVBhcmFt
ZXRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0xlbnVtIHBuYW1lKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGwsIFJhaXNlc0V4Y2VwdGlv
bl0gRE9NU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0U2hhZGVy
UGFyYW1ldGVyKFdlYkdMU2hhZGVyIHNoYWRlciwgR0xlbnVtIHBuYW1lKTsKLQotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhj
ZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciBzaGFkZXIp
OwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRl
clByZWNpc2lvbkZvcm1hdCBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0xlbnVtIHNoYWRlcnR5
cGUsIEdMZW51bSBwcmVjaXNpb250eXBlKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRy
ZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcg
ICAgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0KLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDdXN0b21dIHNlcXVlbmNlPERPTVN0cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5z
aW9ucygpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIGFueSBnZXRUZXhQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0
VW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24pOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtIHByb2dyYW0sIERP
TVN0cmluZyBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBhbnkgZ2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1l
KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmli
T2Zmc2V0KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBoaW50KEdMZW51bSB0YXJnZXQsIEdMZW51bSBtb2RlKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNCdWZmZXIoV2ViR0xCdWZmZXIg
YnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNDb250ZXh0
TG9zdCgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0VuYWJsZWQo
R0xlbnVtIGNhcCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzRnJh
bWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZ10gR0xib29sZWFuICAgIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzUmVuZGVyYnVmZmVyKFdlYkdM
UmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xi
b29sZWFuICAgIGlzU2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZ10gR0xib29sZWFuICAgIGlzVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGxpbmVXaWR0aChHTGZsb2F0IHdp
ZHRoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHBpeGVsU3RvcmVpKEdMZW51bSBwbmFtZSwgR0xpbnQgcGFy
YW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBwb2x5Z29uT2Zmc2V0
KEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHJlYWRQaXhlbHMoR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcgcGl4ZWxzKTsKLSAgICAKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHNhbXBsZUNvdmVyYWdl
KEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgc2Npc3NvcihHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkICAgICAgICAgc2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRlciwgRE9NU3Ry
aW5nIHN0cmluZyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5j
aWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHTGVudW0gZmFj
ZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsTWFzayhHTHVpbnQgbWFzayk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVt
IGZhY2UsIEdMdWludCBtYXNrKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgc3RlbmNpbE9wKEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxPcFNlcGFyYXRlKEdM
ZW51bSBmYWNlLCBHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpOwotCi0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmYoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgdGV4UGFyYW1ldGVyaShHTGVudW0gdGFyZ2V0LCBHTGVudW0g
cG5hbWUsIEdMaW50IHBhcmFtKTsKLQotICAgIC8vIFN1cHBvcnRlZCBmb3JtczoKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBJ
bWFnZURhdGE/IHBpeGVscyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVt
ZW50PyBpbWFnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudD8g
Y2FudmFzKTsKLSNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCi0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1h
Z2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRlbyk7Ci0jZW5kaWYKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRl
eFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFnZSk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ/IGNhbnZhcyk7Ci0jaWYg
ZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/IHZpZGVvKTsKLSNlbmRpZgotCi0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4KTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWZ2KFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xaShXZWJHTFVuaWZvcm1M
b2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFpdihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9u
LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24s
IEdMaW50IHgsIEdMaW50IHkpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaXYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIEludDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkIHVuaWZvcm0zZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9h
dCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmdihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2koV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zaXYoV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2Nh
dGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3Jt
NGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00aShXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xp
bnQgdyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgdW5pZm9ybTRpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJh
eSB2KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdM
Ym9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSBhcnJheSk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQz
MkFycmF5IGFycmF5KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4NGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0
aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdXNlUHJvZ3Jh
bShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkICAgICAgICAgdmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRy
aWIxZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBD
dXN0b21dIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFs
dWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmli
MmYoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmR4LCBGbG9hdDMy
QXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmVy
dGV4QXR0cmliM2YoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHop
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYo
R0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkg
dmFsdWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBpbmR4LCBHTGludCBzaXplLCBHTGVu
dW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBHTGludHB0
ciBvZmZzZXQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZpZXdw
b3J0KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK10g
aW50ZXJmYWNlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UgewogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MzU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCisKKyNpbmNsdWRlICJBTkdM
RUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAi
RE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFWFRCbGVuZE1p
bk1heC5oIgorI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgorI2luY2x1ZGUgIkVYVFNoYWRlclRl
eHR1cmVMT0QuaCIKKyNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKKyNp
bmNsdWRlICJFWFRzUkdCLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxW
aWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5j
bHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZl
cy5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVG
bG9hdExpbmVhci5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQuaCIKKyNpbmNsdWRl
ICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCisjaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlP
YmplY3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKKyNp
bmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCisjaW5jbHVkZSAiV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVBWUlRDLmgiCisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMz
VEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiV2Vi
R0xDb250ZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgorI2luY2x1
ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKKyNpbmNsdWRlICJXZWJHTERlYnVnU2hhZGVy
cy5oIgorI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xEcmF3
QnVmZmVycy5oIgorI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJH
TExvc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV2Vi
R0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFNoYWRlci5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyUHJlY2lzaW9uRm9y
bWF0LmgiCisjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xVbmlmb3Jt
TG9jYXRpb24uaCIKKworI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1VpbnQzMkFy
cmF5Lmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY29uc3QgZG91YmxlIHNlY29uZHNCZXR3ZWVuUmVzdG9yZUF0dGVt
cHRzID0gMS4wOworY29uc3QgaW50IG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSA9IDI1NjsK
KworbmFtZXNwYWNlIHsKKyAgICAKK2NsYXNzIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgewor
cHVibGljOgorICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIoRHJhd2luZ0J1ZmZlciogZHJh
d2luZ0J1ZmZlciwgV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAg
ICA6IG1fZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQorICAgICAgICAsIG1fZnJhbWVidWZm
ZXJCaW5kaW5nKGZyYW1lYnVmZmVyQmluZGluZykKKyAgICB7CisgICAgICAgIC8vIENvbW1pdCBE
cmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAg
IGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICB9CisgICAgCisgICAgflNjb3BlZERy
YXdpbmdCdWZmZXJCaW5kZXIoKQorICAgIHsKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVm
ZmVyIGlmIG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJh
d2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVmZmVyOworICAg
IFdlYkdMRnJhbWVidWZmZXIqIG1fZnJhbWVidWZmZXJCaW5kaW5nOworfTsKKworUGxhdGZvcm0z
RE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9iamVjdCkKK3sKKyAgICByZXR1cm4g
b2JqZWN0ID8gb2JqZWN0LT5vYmplY3QoKSA6IDA7Cit9CisKK3ZvaWQgY2xpcDFEKEdDM0RpbnQg
c3RhcnQsIEdDM0RzaXplaSByYW5nZSwgR0MzRHNpemVpIHNvdXJjZVJhbmdlLCBHQzNEaW50KiBj
bGlwcGVkU3RhcnQsIEdDM0RzaXplaSogY2xpcHBlZFJhbmdlKQoreworICAgIEFTU0VSVChjbGlw
cGVkU3RhcnQgJiYgY2xpcHBlZFJhbmdlKTsKKyAgICBpZiAoc3RhcnQgPCAwKSB7CisgICAgICAg
IHJhbmdlICs9IHN0YXJ0OworICAgICAgICBzdGFydCA9IDA7CisgICAgfQorICAgIEdDM0RpbnQg
ZW5kID0gc3RhcnQgKyByYW5nZTsKKyAgICBpZiAoZW5kID4gc291cmNlUmFuZ2UpCisgICAgICAg
IHJhbmdlIC09IGVuZCAtIHNvdXJjZVJhbmdlOworICAgICpjbGlwcGVkU3RhcnQgPSBzdGFydDsK
KyAgICAqY2xpcHBlZFJhbmdlID0gcmFuZ2U7Cit9CisKKy8vIFJldHVybnMgZmFsc2UgaWYgbm8g
Y2xpcHBpbmcgaXMgbmVjZXNzYXJ5LCBpLmUuLCB4LCB5LCB3aWR0aCwgaGVpZ2h0IHN0YXkgdGhl
IHNhbWUuCitib29sIGNsaXAyRChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBH
QzNEc2l6ZWkgc291cmNlSGVpZ2h0LAorICAgICAgICAgICAgR0MzRGludCogY2xpcHBlZFgsIEdD
M0RpbnQqIGNsaXBwZWRZLCBHQzNEc2l6ZWkqIGNsaXBwZWRXaWR0aCwgR0MzRHNpemVpKmNsaXBw
ZWRIZWlnaHQpCit7CisgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBwZWRZICYmIGNsaXBwZWRX
aWR0aCAmJiBjbGlwcGVkSGVpZ2h0KTsKKyAgICBjbGlwMUQoeCwgd2lkdGgsIHNvdXJjZVdpZHRo
LCBjbGlwcGVkWCwgY2xpcHBlZFdpZHRoKTsKKyAgICBjbGlwMUQoeSwgaGVpZ2h0LCBzb3VyY2VI
ZWlnaHQsIGNsaXBwZWRZLCBjbGlwcGVkSGVpZ2h0KTsKKyAgICByZXR1cm4gKCpjbGlwcGVkWCAh
PSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlwcGVkV2lkdGggIT0gd2lkdGggfHwgKmNsaXBw
ZWRIZWlnaHQgIT0gaGVpZ2h0KTsKK30KKworR0MzRGludCBjbGFtcChHQzNEaW50IHZhbHVlLCBH
QzNEaW50IG1pbiwgR0MzRGludCBtYXgpCit7CisgICAgaWYgKHZhbHVlIDwgbWluKQorICAgICAg
ICB2YWx1ZSA9IG1pbjsKKyAgICBpZiAodmFsdWUgPiBtYXgpCisgICAgICAgIHZhbHVlID0gbWF4
OworICAgIHJldHVybiB2YWx1ZTsKK30KKworLy8gUmV0dXJuIHRydWUgaWYgYSBjaGFyYWN0ZXIg
YmVsb25ncyB0byB0aGUgQVNDSUkgc3Vic2V0IGFzIGRlZmluZWQgaW4KKy8vIEdMU0wgRVMgMS4w
IHNwZWMgc2VjdGlvbiAzLjEuCitib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIg
YykKK3sKKyAgICAvLyBQcmludGluZyBjaGFyYWN0ZXJzIGFyZSB2YWxpZCBleGNlcHQgIiAkIGAg
QCBcICcgREVMLgorICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2CisgICAgICAgICYmIGMgIT0g
JyInICYmIGMgIT0gJyQnICYmIGMgIT0gJ2AnICYmIGMgIT0gJ0AnICYmIGMgIT0gJ1xcJyAmJiBj
ICE9ICdcJycpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIEhvcml6b250YWwgdGFiLCBs
aW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJyaWFnZSByZXR1cm4KKyAgICAv
LyBhcmUgYWxzbyB2YWxpZC4KKyAgICBpZiAoYyA+PSA5ICYmIGMgPD0gMTMpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBpc1ByZWZpeFJlc2VydmVk
KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJnbF8iKSB8
fCBuYW1lLnN0YXJ0c1dpdGgoIndlYmdsXyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiX3dlYmdsXyIp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFN0cmlw
cyBjb21tZW50cyBmcm9tIHNoYWRlciB0ZXh0LiBUaGlzIGFsbG93cyBub24tQVNDSUkgY2hhcmFj
dGVycworLy8gdG8gYmUgdXNlZCBpbiBjb21tZW50cyB3aXRob3V0IHBvdGVudGlhbGx5IGJyZWFr
aW5nIE9wZW5HTAorLy8gaW1wbGVtZW50YXRpb25zIG5vdCBleHBlY3RpbmcgY2hhcmFjdGVycyBv
dXRzaWRlIHRoZSBHTFNMIEVTIHNldC4KK2NsYXNzIFN0cmlwQ29tbWVudHMgeworcHVibGljOgor
ICAgIFN0cmlwQ29tbWVudHMoY29uc3QgU3RyaW5nJiBzdHIpCisgICAgICAgIDogbV9wYXJzZVN0
YXRlKEJlZ2lubmluZ09mTGluZSkKKyAgICAgICAgLCBtX3NvdXJjZVN0cmluZyhzdHIpCisgICAg
ICAgICwgbV9sZW5ndGgoc3RyLmxlbmd0aCgpKQorICAgICAgICAsIG1fcG9zaXRpb24oMCkKKyAg
ICB7CisgICAgICAgIHBhcnNlKCk7CisgICAgfQorICAgIAorICAgIFN0cmluZyByZXN1bHQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOworICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgYm9vbCBoYXNNb3JlQ2hhcmFjdGVycygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgcGFyc2UoKQorICAgIHsKKyAgICAgICAgd2hpbGUgKGhhc01vcmVDaGFyYWN0ZXJzKCkpIHsK
KyAgICAgICAgICAgIHByb2Nlc3MoY3VycmVudCgpKTsKKyAgICAgICAgICAgIC8vIHByb2Nlc3Mo
KSBtaWdodCBhZHZhbmNlIHRoZSBwb3NpdGlvbi4KKyAgICAgICAgICAgIGlmIChoYXNNb3JlQ2hh
cmFjdGVycygpKQorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIHByb2Nlc3MoVUNoYXIpOworICAgIAorICAgIGJvb2wgcGVlayhVQ2hh
ciYgY2hhcmFjdGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fcG9zaXRpb24gKyAxID49
IG1fbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjaGFyYWN0ZXIg
PSBtX3NvdXJjZVN0cmluZ1ttX3Bvc2l0aW9uICsgMV07CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICBVQ2hhciBjdXJyZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7Cisg
ICAgICAgIHJldHVybiBtX3NvdXJjZVN0cmluZ1ttX3Bvc2l0aW9uXTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhZHZhbmNlKCkKKyAgICB7CisgICAgICAgICsrbV9wb3NpdGlvbjsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc05ld2xpbmUoVUNoYXIgY2hhcmFjdGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxpemUgbmV3bGluZSByZWxhdGVkIGNo
YXJhY3RlcnMuCisgICAgICAgIHJldHVybiAoY2hhcmFjdGVyID09ICdcbicgfHwgY2hhcmFjdGVy
ID09ICdccicpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGVtaXQoVUNoYXIgY2hhcmFjdGVyKQor
ICAgIHsKKyAgICAgICAgbV9idWlsZGVyLmFwcGVuZChjaGFyYWN0ZXIpOworICAgIH0KKyAgICAK
KyAgICBlbnVtIFBhcnNlU3RhdGUgeworICAgICAgICAvLyBIYXZlIG5vdCBzZWVuIGFuIEFTQ0lJ
IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB5ZXQgb24KKyAgICAgICAgLy8gdGhpcyBsaW5lLiBQ
b3NzaWJsZSB0aGF0IHdlIG1pZ2h0IHNlZSBhIHByZXByb2Nlc3NvcgorICAgICAgICAvLyBkaXJl
Y3RpdmUuCisgICAgICAgIEJlZ2lubmluZ09mTGluZSwKKyAgICAgICAgCisgICAgICAgIC8vIEhh
dmUgc2VlbiBhdCBsZWFzdCBvbmUgQVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyCisgICAg
ICAgIC8vIG9uIHRoaXMgbGluZS4KKyAgICAgICAgTWlkZGxlT2ZMaW5lLAorICAgICAgICAKKyAg
ICAgICAgLy8gSGFuZGxpbmcgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBQYXNzZXMgdGhyb3Vn
aCBhbGwKKyAgICAgICAgLy8gY2hhcmFjdGVycyB1cCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLiBE
aXNhYmxlcyBjb21tZW50CisgICAgICAgIC8vIHByb2Nlc3NpbmcuCisgICAgICAgIEluUHJlcHJv
Y2Vzc29yRGlyZWN0aXZlLAorICAgICAgICAKKyAgICAgICAgLy8gSGFuZGxpbmcgYSBzaW5nbGUt
bGluZSBjb21tZW50LiBUaGUgY29tbWVudCB0ZXh0IGlzCisgICAgICAgIC8vIHJlcGxhY2VkIHdp
dGggYSBzaW5nbGUgc3BhY2UuCisgICAgICAgIEluU2luZ2xlTGluZUNvbW1lbnQsCisgICAgICAg
IAorICAgICAgICAvLyBIYW5kbGluZyBhIG11bHRpLWxpbmUgY29tbWVudC4gTmV3bGluZXMgYXJl
IHBhc3NlZAorICAgICAgICAvLyB0aHJvdWdoIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycy4KKyAg
ICAgICAgSW5NdWx0aUxpbmVDb21tZW50CisgICAgfTsKKyAgICAKKyAgICBQYXJzZVN0YXRlIG1f
cGFyc2VTdGF0ZTsKKyAgICBTdHJpbmcgbV9zb3VyY2VTdHJpbmc7CisgICAgdW5zaWduZWQgbV9s
ZW5ndGg7CisgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKKyAgICBTdHJpbmdCdWlsZGVyIG1fYnVp
bGRlcjsKK307CisKK3ZvaWQgU3RyaXBDb21tZW50czo6cHJvY2VzcyhVQ2hhciBjKQoreworICAg
IGlmIChpc05ld2xpbmUoYykpIHsKKyAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgc3RhdGUgd2Ug
YXJlIGluLCBwYXNzIHRocm91Z2ggbmV3bGluZXMKKyAgICAgICAgLy8gc28gd2UgcHJlc2VydmUg
bGluZSBudW1iZXJzLgorICAgICAgICBlbWl0KGMpOworICAgICAgICAKKyAgICAgICAgaWYgKG1f
cGFyc2VTdGF0ZSAhPSBJbk11bHRpTGluZUNvbW1lbnQpCisgICAgICAgICAgICBtX3BhcnNlU3Rh
dGUgPSBCZWdpbm5pbmdPZkxpbmU7CisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIFVDaGFyIHRlbXAgPSAwOworICAgIHN3aXRjaCAobV9wYXJzZVN0YXRlKSB7Cisg
ICAgY2FzZSBCZWdpbm5pbmdPZkxpbmU6CisgICAgICAgIGlmIChXVEY6OmlzQVNDSUlTcGFjZShj
KSkgeworICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoYyA9PSAnIycpIHsKKyAgICAgICAgICAgIG1fcGFyc2VT
dGF0ZSA9IEluUHJlcHJvY2Vzc29yRGlyZWN0aXZlOworICAgICAgICAgICAgZW1pdChjKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUcmFuc2l0
aW9uIHRvIG5vcm1hbCBzdGF0ZSBhbmQgcmUtaGFuZGxlIGNoYXJhY3Rlci4KKyAgICAgICAgbV9w
YXJzZVN0YXRlID0gTWlkZGxlT2ZMaW5lOworICAgICAgICBwcm9jZXNzKGMpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgY2FzZSBNaWRkbGVPZkxpbmU6CisgICAgICAgIGlmIChjID09
ICcvJyAmJiBwZWVrKHRlbXApKSB7CisgICAgICAgICAgICBpZiAodGVtcCA9PSAnLycpIHsKKyAg
ICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OworICAgICAg
ICAgICAgICAgIGVtaXQoJyAnKTsKKyAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICh0ZW1wID09ICcqJykgeworICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluTXVs
dGlMaW5lQ29tbWVudDsKKyAgICAgICAgICAgICAgICAvLyBFbWl0IHRoZSBjb21tZW50IHN0YXJ0
IGluIGNhc2UgdGhlIHVzZXIgaGFzCisgICAgICAgICAgICAgICAgLy8gYW4gdW5jbG9zZWQgY29t
bWVudCBhbmQgd2Ugd2FudCB0byBsYXRlcgorICAgICAgICAgICAgICAgIC8vIHNpZ25hbCBhbiBl
cnJvci4KKyAgICAgICAgICAgICAgICBlbWl0KCcvJyk7CisgICAgICAgICAgICAgICAgZW1pdCgn
KicpOworICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZW1pdChjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU6
CisgICAgICAgIC8vIE5vIG1hdHRlciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBp
dAorICAgICAgICAvLyB0aHJvdWdoLiBEbyBub3QgcGFyc2UgY29tbWVudHMgaW4gdGhpcyBzdGF0
ZS4gVGhpcworICAgICAgICAvLyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGxv
bmcgdGVybSwgYnV0IGl0CisgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNlcnJvciBwcmVw
cm9jZXNzb3IgZGlyZWN0aXZlLgorICAgICAgICBlbWl0KGMpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgY2FzZSBJblNpbmdsZUxpbmVDb21tZW50OgorICAgICAgICAvLyBUaGUgbmV3
bGluZSBjb2RlIGF0IHRoZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlCisgICAgICAg
IC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBnZXQgb3V0IG9mIHRoZQorICAgICAg
ICAvLyBzaW5nbGUtbGluZSBjb21tZW50LiBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJzLgor
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBJbk11bHRpTGluZUNvbW1lbnQ6Cisg
ICAgICAgIGlmIChjID09ICcqJyAmJiBwZWVrKHRlbXApICYmIHRlbXAgPT0gJy8nKSB7CisgICAg
ICAgICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICBlbWl0KCcvJyk7CisgICAgICAgICAgICBt
X3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7CisgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gU3dhbGxvdyBh
bGwgb3RoZXIgY2hhcmFjdGVycy4gVW5jbGVhciB3aGV0aGVyIHdlIG1heQorICAgICAgICAvLyB3
YW50IG9yIG5lZWQgdG8ganVzdCBlbWl0IGEgc3BhY2UgcGVyIGNoYXJhY3RlciB0byB0cnkKKyAg
ICAgICAgLy8gdG8gcHJlc2VydmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nl
cy4KKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisK
K2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGlj
c0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENh
bGxiYWNrKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNiKSAKKyAgICA6IG1fY29udGV4dChj
YikgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlIAorICAg
IHsgCisgICAgICAgIG1fY29udGV4dC0+Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpSZWFsTG9zdENvbnRleHQpOyAKKyAgICB9CisgICAgdmlydHVhbCB+V2ViR0xS
ZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrKCkgeyB9Citwcml2YXRlOgorICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKK307CisKK2NsYXNzIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrIDogcHVibGljIEdyYXBoaWNzQ29udGV4dDNEOjpF
cnJvck1lc3NhZ2VDYWxsYmFjayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJh
Y2soV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY2IpIAorICAgIDogbV9jb250ZXh0KGNiKSB7
IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBHQzNEaW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+
bV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+cHJp
bnRHTEVycm9yVG9Db25zb2xlKG1lc3NhZ2UpOworICAgIH0KKyAgICB2aXJ0dWFsIH5XZWJHTFJl
bmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjaygpIHsgfQorcHJpdmF0ZToKKyAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBtX2NvbnRleHQ7Cit9OworCitzdGQ6OnVuaXF1ZV9w
dHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Y3JlYXRlKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMq
IGF0dHJzLCBjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0g
Y2FudmFzLT5kb2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgLy8g
VGhlIEZyYW1lTG9hZGVyQ2xpZW50IG1pZ2h0IGJsb2NrIGNyZWF0aW9uIG9mIGEgbmV3IFdlYkdM
IGNvbnRleHQgZGVzcGl0ZSB0aGUgcGFnZSBzZXR0aW5nczsgaW4KKyAgICAvLyBwYXJ0aWN1bGFy
LCBpZiBXZWJHTCBjb250ZXh0cyB3ZXJlIGxvc3Qgb25lIG9yIG1vcmUgdGltZXMgdmlhIHRoZSBH
TF9BUkJfcm9idXN0bmVzcyBleHRlbnNpb24uCisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xp
ZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpIHsKKyAg
ICAgICAgY2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2UsIHRydWUsICJX
ZWIgcGFnZSB3YXMgbm90IGFsbG93ZWQgdG8gY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBib29sIGlzUGVuZGluZ1Bv
bGljeVJlc29sdXRpb24gPSBmYWxzZTsKKyAgICBEb2N1bWVudCYgdG9wRG9jdW1lbnQgPSBkb2N1
bWVudC50b3BEb2N1bWVudCgpOworICAgIFBhZ2UqIHBhZ2UgPSB0b3BEb2N1bWVudC5wYWdlKCk7
CisgICAgaWYgKHBhZ2UgJiYgIXRvcERvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkpIHsKKyAg
ICAgICAgV2ViR0xMb2FkUG9saWN5IHBvbGljeSA9IHBhZ2UtPm1haW5GcmFtZSgpLmxvYWRlcigp
LmNsaWVudCgpLndlYkdMUG9saWN5Rm9yVVJMKHRvcERvY3VtZW50LnVybCgpKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChwb2xpY3kgPT0gV2ViR0xCbG9ja0NyZWF0aW9uKSB7CisgICAgICAgICAg
ICBMT0coV2ViR0wsICJUaGUgcG9saWN5IGZvciB0aGlzIFVSTCAoJXMpIGlzIHRvIGJsb2NrIFdl
YkdMLiIsIHRvcERvY3VtZW50LnVybCgpLmhvc3QoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocG9s
aWN5ID09IFdlYkdMUGVuZGluZ0NyZWF0aW9uKSB7CisgICAgICAgICAgICBMT0coV2ViR0wsICJX
ZWJHTCBwb2xpY3kgaXMgcGVuZGluZy4gTWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQgbGF0ZXIuIik7
CisgICAgICAgICAgICBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzID0gYXR0cnMgPyBhdHRycy0+YXR0cmlidXRlcygpIDogR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMoKTsKKyAgICAKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAg
ICAgaWYgKCFmcmFtZS0+c2V0dGluZ3MoKS5vcGVuR0xNdWx0aXNhbXBsaW5nRW5hYmxlZCgpKQor
ICAgICAgICAgICAgYXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgYXR0cmlidXRlcy5ub0V4dGVuc2lvbnMgPSB0cnVlOworICAgIGF0dHJpYnV0ZXMuc2hhcmVS
ZXNvdXJjZXMgPSBmYWxzZTsKKyAgICBhdHRyaWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVID0gdHJ1
ZTsKKyAgICAKKyAgICBpZiAoZnJhbWUtPnNldHRpbmdzKCkuZm9yY2VTb2Z0d2FyZVdlYkdMUmVu
ZGVyaW5nKCkpCisgICAgICAgIGF0dHJpYnV0ZXMuZm9yY2VTb2Z0d2FyZVJlbmRlcmVyID0gdHJ1
ZTsKKyAgICAKKyAgICBpZiAocGFnZSkKKyAgICAgICAgYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJh
dGlvID0gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAKKyAgICBpZiAoaXNQZW5kaW5n
UG9saWN5UmVzb2x1dGlvbikgeworICAgICAgICBMT0coV2ViR0wsICJDcmVhdGUgYSBXZWJHTCBj
b250ZXh0IHRoYXQgbG9va3MgcmVhbCwgYnV0IHdpbGwgcmVxdWlyZSBhIHBvbGljeSByZXNvbHV0
aW9uIGlmIHVzZWQuIik7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlPiByZW5kZXJpbmdDb250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKHR5cGUg
PT0gImV4cGVyaW1lbnRhbC13ZWJnbDIiKQorICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4dCA9
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihuZXcgV2ViR0wyUmVuZGVy
aW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ+KG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1dGVzKSk7CisgICAg
fQorICAgIAorICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVudC52aWV3KCktPnJv
b3QoKS0+aG9zdFdpbmRvdygpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKKyAg
ICAKKyAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7
CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZhbHNlLCB0cnVl
LCAiQ291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xf
RVhUX2RlYnVnX21hcmtlciIpKQorICAgICAgICBleHRlbnNpb25zLT5wdXNoR3JvdXBNYXJrZXJF
WFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiByZW5kZXJpbmdDb250ZXh0ID0gbnVsbHB0cjsKKyAg
ICBpZiAodHlwZSA9PSAiZXhwZXJpbWVudGFsLXdlYmdsMiIpCisgICAgICAgIHJlbmRlcmluZ0Nv
bnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4obmV3IFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBjb250ZXh0LCBhdHRyaWJ1dGVzKSk7CisgICAgZWxz
ZQorICAgICAgICByZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVy
aW5nQ29udGV4dD4obmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQsIGF0
dHJpYnV0ZXMpKTsKKyAgICByZW5kZXJpbmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAg
ICAKKyAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKK30KKworV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShIVE1MQ2FudmFzRWxlbWVudCogcGFz
c2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAg
IDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3RpdmVET01P
YmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dCgwKQorICAg
ICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRp
bWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0TG9z
dEV2ZW50KQorICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKKyAgICAsIG1fcmVzdG9yZVRp
bWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVSZXN0b3JlQ29udGV4
dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQorICAgICwgbV9jb250ZXh0TG9zdChm
YWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQorICAg
ICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRoZXNpemVkRXJyb3JzVG9D
b25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZChtYXhHTEVy
cm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24o
dHJ1ZSkKKyAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKK3sKK30K
KworV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShI
VE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQor
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3RpdmVE
T01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dChjb250
ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4dExv
c3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hD
b250ZXh0TG9zdEV2ZW50KQorICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKKyAgICAsIG1f
cmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVSZXN0
b3JlQ29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSg0KQorICAgICwgbV9jb250
ZXh0TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250
ZXh0KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRoZXNpemVk
RXJyb3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dl
ZChtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1BvbGljeVJl
c29sdXRpb24oZmFsc2UpCisgICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFs
c2UpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgbV9jb250ZXh0R3JvdXAgPSBXZWJH
TENvbnRleHRHcm91cDo6Y3JlYXRlKCk7CisgICAgbV9jb250ZXh0R3JvdXAtPmFkZENvbnRleHQo
dGhpcyk7CisgICAgCisgICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0RGlt
c1sxXSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1ZJRVdQT1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKKyAgICAKKyAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAKKyAg
ICBzZXR1cEZsYWdzKCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCgpCit7CisgICAg
QVNTRVJUKCFtX2NvbnRleHRMb3N0KTsKKyAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICBt
X21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7
CisgICAgbV9wYWNrQWxpZ25tZW50ID0gNDsKKyAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7Cisg
ICAgbV91bnBhY2tGbGlwWSA9IGZhbHNlOworICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9
IGZhbHNlOworICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRl
eHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMOworICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7
CisgICAgbV9jdXJyZW50UHJvZ3JhbSA9IDA7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAw
OworICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7CisgICAgbV9kZXB0aE1hc2sgPSB0cnVl
OworICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICBtX3N0ZW5jaWxNYXNrID0gMHhG
RkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7CisgICAgbV9zdGVu
Y2lsRnVuY1JlZiA9IDA7CisgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOworICAgIG1fc3Rl
bmNpbEZ1bmNNYXNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAw
eEZGRkZGRkZGOworICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CisgICAgbV9udW1HTEVycm9y
c1RvQ29uc29sZUFsbG93ZWQgPSBtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7CisgICAgCisg
ICAgbV9jbGVhckNvbG9yWzBdID0gbV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0g
bV9jbGVhckNvbG9yWzNdID0gMDsKKyAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAg
bV9jbGVhckRlcHRoID0gMTsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9jb2xvck1h
c2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10g
PSB0cnVlOworICAgIAorICAgIEdDM0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9
IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NP
TUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KTsKKyAgICBtX3RleHR1cmVVbml0cy5jbGVhcigpOworICAgIG1fdGV4dHVyZVVuaXRzLnJlc2l6
ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAKKyAgICBHQzNEaW50IG51bVZl
cnRleEF0dHJpYnMgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJm51bVZlcnRleEF0dHJpYnMpOworICAgIG1fbWF4
VmVydGV4QXR0cmlicyA9IG51bVZlcnRleEF0dHJpYnM7CisgICAgCisgICAgbV9tYXhUZXh0dXJl
U2l6ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpOworICAgIG1fbWF4VGV4dHVyZUxl
dmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heFRleHR1cmVTaXplLCBt
X21heFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSA9IDA7CisgICAg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQX1RF
WFRVUkVfU0laRSwgJm1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1YmVNYXBU
ZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4Q3ViZU1h
cFRleHR1cmVTaXplLCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhSZW5kZXJi
dWZmZXJTaXplID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUsICZtX21heFJlbmRlcmJ1ZmZlclNpemUpOworICAg
IAorICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRfZHJhd19idWZmZXJzIGFyZSBsYXpp
bHkgcXVlcmllZC4KKyAgICBtX21heERyYXdCdWZmZXJzID0gMDsKKyAgICBtX21heENvbG9yQXR0
YWNobWVudHMgPSAwOworICAgIAorICAgIG1fYmFja0RyYXdCdWZmZXIgPSBHcmFwaGljc0NvbnRl
eHQzRDo6QkFDSzsKKyAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkID0g
ZmFsc2U7CisgICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZCA9IGZhbHNlOworICAgIAorICAgIG1f
ZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3Jl
YXRlKHRoaXMsIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0KTsKKyAg
ICBhZGRDb250ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgpKTsKKyAg
ICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsK
KyAgICAKKyAgICBtX3ZlcnRleEF0dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0dHJpYnMp
OworICAgIAorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY3JlYXRlRmFs
bGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCisg
ICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisgICAgCisgICAgSW50U2l6ZSBjYW52YXNTaXpl
ID0gY2xhbXBlZENhbnZhc1NpemUoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOworICAgIAorICAgIG1fY29udGV4
dC0+cmVzaGFwZShjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOworICAg
IG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXpl
LmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQtPnNjaXNzb3IoMCwgMCwgY2FudmFzU2l6ZS53aWR0
aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKKyAgICAKKyAgICBtX2NvbnRleHQtPnNldENvbnRl
eHRMb3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0
Q2FsbGJhY2s+KHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJh
Y2s+KHRoaXMpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzZXR1cEZs
YWdzKCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICAKKyAgICBpZiAoUGFnZSogcGFn
ZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgbV9zeW50aGVzaXplZEVy
cm9yc1RvQ29uc29sZSA9IHBhZ2UtPnNldHRpbmdzKCkud2ViR0xFcnJvcnNUb0NvbnNvbGVFbmFi
bGVkKCk7CisgICAgCisgICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMy
Q29tcGxpYW50KCk7CisgICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2Vz
ID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fc3Ry
aWN0X2F0dHJpYnMiKTsKKyAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOworICAgIGlm
IChtX2lzR0xFUzJDb21wbGlhbnQpIHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90
Iik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28i
KTsKKyAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAg
IH0KKyAgICBtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNvbnN0Cit7
CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAg
ICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnByaXZpbGVnZWRXZWJHTEV4dGVuc2lvbnNFbmFi
bGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAg
ICBpZiAoIW1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCkpCisgICAg
ICAgIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmFwcGVuZChmb3JtYXQpOworfQorCitXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSgpCit7Cisg
ICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0aGV5IGFy
ZSB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVmb3JlIHRo
ZSBsYXN0IGNvbnRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgorICAgIG1f
Ym91bmRBcnJheUJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmpl
Y3QgPSBudWxscHRyOworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Cisg
ICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRQcm9ncmFt
ID0gbnVsbHB0cjsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxwdHI7CisgICAgbV9y
ZW5kZXJidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fdGV4dHVyZVVu
aXRzW2ldLnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBtX3RleHR1cmVVbml0
c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBt
X2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSBu
dWxscHRyOworICAgIAorICAgIGlmICghbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Cisg
ICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKyAgICAgICAgZGVzdHJveUdyYXBo
aWNzQ29udGV4dDNEKCk7CisgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVDb250ZXh0KHRo
aXMpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXN0cm95
R3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUaGUgZHJhd2luZyBidWZmZXIgaG9s
ZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAorICAgIC8v
IGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKKyAgICAKKyAgICBp
ZiAobV9jb250ZXh0KSB7CisgICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RDYWxsYmFj
ayhudWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhu
dWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgfQorfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit7CisgICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250
ZXh0LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsKKyAgICAK
KyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOworICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0g
Y2FudmFzKCktPnJlbmRlckJveCgpOworICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYgcmVuZGVy
Qm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7CisgICAgICAg
IG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICBjYW52YXMoKS0+Y2xlYXJDb3Bp
ZWRJbWFnZSgpOworICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0NoYW5n
ZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkgewor
ICAgICAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7CisgICAgICAgICAgICBjYW52
YXMoKS0+ZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgwLCAwKSwgY2xhbXBlZENhbnZhc1Np
emUoKSkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBpZiAoIW1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFyZWQKKyAg
ICAgICAgfHwgbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFzayAmJiBt
X2ZyYW1lYnVmZmVyQmluZGluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBS
ZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gY29udGV4dEF0dHJpYnV0ZXMgPSBnZXRDb250
ZXh0QXR0cmlidXRlcygpOworICAgIAorICAgIC8vIERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxl
IHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2VyIGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4K
KyAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBtYXNrICYmICFtX3NjaXNzb3JFbmFibGVkOworICAg
IAorICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KTsKKyAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9CVUZGRVJfQklUKSkgeworICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jb2xv
ck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29sb3JbMV0gOiAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0gPyBtX2NsZWFyQ29sb3JbMl0gOiAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbM10gPyBtX2NsZWFyQ29s
b3JbM10gOiAwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAs
IDAsIDAsIDApOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRy
dWUpOworICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQlVGRkVSX0JJVDsKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPmRlcHRoKCkpIHsKKyAg
ICAgICAgaWYgKCFjb21iaW5lZENsZWFyIHx8ICFtX2RlcHRoTWFzayB8fCAhKG1hc2sgJiBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCkpCisgICAgICAgICAgICBtX2NvbnRleHQt
PmNsZWFyRGVwdGgoMS4wZik7CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICAgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7
CisgICAgfQorICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+c3RlbmNpbCgpKSB7CisgICAgICAg
IGlmIChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
QlVGRkVSX0JJVCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFy
U3RlbmNpbCAmIG1fc3RlbmNpbE1hc2spOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE1h
c2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4RkZGRkZGRkYpOworICAgIH0K
KyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNsZWFy
RnJhbWVidWZmZXJzKGNsZWFyTWFzayk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIG1fY29udGV4dC0+Y2xl
YXIoY2xlYXJNYXNrKTsKKyAgICB9CisgICAgCisgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigp
OworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8o
bV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2xheWVyQ2xlYXJlZCA9IHRydWU7
CisgICAgCisgICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpCit7CisgICAgLy8gUmVzdG9y
ZSB0aGUgc3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCisgICAgaWYgKG1fc2Npc3NvckVuYWJs
ZWQpCisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NsZWFyQ29sb3JbMF0sIG1fY2xl
YXJDb2xvclsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGVhckNvbG9yWzJdLCBt
X2NsZWFyQ29sb3JbM10pOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JNYXNrWzBd
LCBtX2NvbG9yTWFza1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1sy
XSwgbV9jb2xvck1hc2tbM10pOworICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChtX2NsZWFyRGVw
dGgpOworICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsKTsKKyAgICBt
X2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCBt
X3N0ZW5jaWxNYXNrKTsKKyAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhtX2RlcHRoTWFzayk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFya0xheWVyQ29tcG9zaXRlZCgp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKGNhbnZhcygpLT5kb2N1bWVudCgpLnByaW50aW5nKCkpCisgICAgICAgIGNhbnZhcygp
LT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICAKKyAgICAvLyBVbnRpbCB0aGUgY2FudmFz
IGlzIHdyaXR0ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAorICAgIC8v
IGhhcHBlbmVkIGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRo
ZSBjb21wb3NpdG9yLgorICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFt
X2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+
cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7CisgICAg
ICAgIAorICAgICAgICBjYW52YXMoKS0+bWFrZVByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOworICAgIGNsZWFy
SWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFt
X2xheWVyQ2xlYXJlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNhbnZhcygpLT5jbGVh
ckNvcGllZEltYWdlKCk7CisgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOworICAgIAor
ICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0
KCk7CisgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhjYW52YXMo
KS0+YnVmZmVyKCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgCisgICAgaWYgKG1fZHJh
d2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAg
ICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9Cit9CisK
K1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQo
KTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNv
bW1pdCgpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IG1fY29udGV4dC0+cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEobV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKKyAg
ICAKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5n
LmdldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Ymlu
ZCgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICAvLyBUaGlzIGlzIGFuIGFwcHJveGltYXRpb24gYmVjYXVzZSBhdCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQgbGV2ZWwgd2UgZG9uJ3QKKyAgICAvLyBrbm93IGlmIHRoZSB1bmRlcmx5aW5nIEZC
TyB1c2VzIHRleHR1cmVzIG9yIHJlbmRlcmJ1ZmZlcnMuCisgICAgR0MzRGludCBtYXhTaXplID0g
c3RkOjptaW4obV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhSZW5kZXJidWZmZXJTaXplKTsKKyAgICAv
LyBMaW1pdCBkcmF3aW5nIGJ1ZmZlciBzaXplIHRvIDRrIHRvIGF2b2lkIG1lbW9yeSBleGhhdXN0
aW9uLgorICAgIGNvbnN0IGludCBzaXplVXBwZXJMaW1pdCA9IDQwOTY7CisgICAgbWF4U2l6ZSA9
IHN0ZDo6bWluKG1heFNpemUsIHNpemVVcHBlckxpbWl0KTsKKyAgICBHQzNEaW50IG1heFdpZHRo
ID0gc3RkOjptaW4obWF4U2l6ZSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pOworICAgIEdDM0RpbnQg
bWF4SGVpZ2h0ID0gc3RkOjptaW4obWF4U2l6ZSwgbV9tYXhWaWV3cG9ydERpbXNbMV0pOworICAg
IHdpZHRoID0gY2xhbXAod2lkdGgsIDEsIG1heFdpZHRoKTsKKyAgICBoZWlnaHQgPSBjbGFtcCho
ZWlnaHQsIDEsIG1heEhlaWdodCk7CisgICAgCisgICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsKKyAg
ICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CisgICAg
ICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkpCisgICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0NoYW5nZWQp
OworICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIFdl
IGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3bHkg
Y3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgorICAgIC8vIGNsZWFyIChh
bmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KKyAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSk7CisgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworICAgIAorICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVj
dE9yWmVybyhtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5k
aW5nLmdldCgpKSk7CisgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG9iamVjdE9yWmVybyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmcu
Z2V0KCkpKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0
T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Cit9CisKK2ludCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdAoreworICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53
aWR0aCgpOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkud2lkdGgoKTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRy
YXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdAoreworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisg
ICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKKyAgICAKKyAg
ICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgp
OworfQorCit1bnNpZ25lZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzaXplSW5CeXRlcyhH
QzNEZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJZVEU6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGJ5dGUpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIHJldHVybiBzaXpl
b2YoR0MzRHVieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKKyAgICAg
ICAgcmV0dXJuIHNpemVvZihHQzNEc2hvcnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNE
aW50KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgICAg
IHJldHVybiBzaXplb2YoR0MzRHVpbnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RmbG9hdCk7CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJhY3RpdmVU
ZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2FjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMDsKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cisg
ICAgCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5z
ZXRBY3RpdmVUZXh0dXJlVW5pdCh0ZXh0dXJlKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRl
ciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
ImF0dGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hT
aGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFwcm9ncmFtLT5hdHRh
Y2hTaGFkZXIoc2hhZGVyKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJhdHRhY2hTaGFkZXIiLCAic2hhZGVyIGF0dGFj
aG1lbnQgYWxyZWFkeSBoYXMgc2hhZGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
bV9jb250ZXh0LT5hdHRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RPclpl
cm8oc2hhZGVyKSk7CisgICAgc2hhZGVyLT5vbkF0dGFjaGVkKCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0cmliTG9jYXRpb24iLCBwcm9n
cmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0aCgi
YmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZh
bGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRBdHRyaWJM
b2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYmluZEF0dHJpYkxvY2F0
aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5k
ZXgsIG5hbWUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrT2Jq
ZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVj
dCwgYm9vbCYgZGVsZXRlZCkKK3sKKyAgICBkZWxldGVkID0gZmFsc2U7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChvYmpl
Y3QpIHsKKyAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlz
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qgbm90IGZyb20gdGhpcyBjb250
ZXh0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGVs
ZXRlZCA9ICFvYmplY3QtPm9iamVjdCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgV2ViR0xCdWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVC
b3VuZCgiYmluZEJ1ZmZlciIsIGJ1ZmZlciwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoZGVsZXRlZCkKKyAgICAgICAgYnVmZmVyID0gMDsKKyAgICBpZiAoYnVmZmVyICYmIGJ1
ZmZlci0+Z2V0VGFyZ2V0KCkgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAiYmluZEJ1ZmZlciIsICJidWZmZXJzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxl
IHRhcmdldHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGFyZ2V0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIpCisgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZl
ciA9IGJ1ZmZlcjsKKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNl
dEVsZW1lbnRBcnJheUJ1ZmZlcihidWZmZXIpOworICAgIGVsc2UgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEJ1ZmZlciIs
ICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1f
Y29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKKyAgICBp
ZiAoYnVmZmVyKQorICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJn
ZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVj
dFRvQmVCb3VuZCgiYmluZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAgICBidWZmZXIgPSAwOworICAgIGlmICh0
YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kRnJhbWVi
dWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBt
X2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZyhvYmplY3RPclpl
cm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9mIGJpbmRp
bmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoYnVmZmVyKQorICAgICAg
ICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZFJlbmRlcmJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJCdWZmZXIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxldGVkOwor
ICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRSZW5kZXJidWZmZXIiLCByZW5kZXJC
dWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAg
ICAgIHJlbmRlckJ1ZmZlciA9IDA7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0g
cmVuZGVyQnVmZmVyOworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIG9i
amVjdE9yWmVybyhyZW5kZXJCdWZmZXIpKTsKKyAgICBpZiAocmVuZGVyQnVmZmVyKQorICAgICAg
ICByZW5kZXJCdWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4
dHVyZSogdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmlu
ZFRleHR1cmUiLCB0ZXh0dXJlLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChk
ZWxldGVkKQorICAgICAgICB0ZXh0dXJlID0gMDsKKyAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJl
LT5nZXRUYXJnZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiYmluZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUg
dGFyZ2V0cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RpbnQgbWF4TGV2ZWwg
PSAwOworICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsK
KyAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmlu
ZGluZyA9IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyICYmICFtX2FjdGl2ZVRleHR1cmVV
bml0KQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRUZXh0dXJlMkRCaW5kaW5nKG9i
amVjdE9yWmVybyh0ZXh0dXJlKSk7CisgICAgICAgIAorICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7CisgICAgICAgIG1fdGV4dHVy
ZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IHRleHR1
cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJiaW5kVGV4dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmplY3RPclpl
cm8odGV4dHVyZSkpOworICAgIGlmICh0ZXh0dXJlKQorICAgICAgICB0ZXh0dXJlLT5zZXRUYXJn
ZXQodGFyZ2V0LCBtYXhMZXZlbCk7CisgICAgCisgICAgLy8gTm90ZTogcHJldmlvdXNseSB3ZSB1
c2VkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBURVhUVVJFX1dSQVBfUgorICAgIC8vIHJlcGVh
dCBtb2RlIHRvIENMQU1QX1RPX0VER0UgZm9yIGN1YmUgbWFwIHRleHR1cmVzLCBiZWNhdXNlIE9w
ZW5HTAorICAgIC8vIEVTIDIuMCBkb2Vzbid0IGV4cG9zZSB0aGlzIGZsYWcgKGEgYnVnIGluIHRo
ZSBzcGVjaWZpY2F0aW9uKSBhbmQKKyAgICAvLyBvdGhlcndpc2UgdGhlIGFwcGxpY2F0aW9uIGhh
cyBubyBjb250cm9sIG92ZXIgdGhlIHNlYW1zIGluIHRoaXMKKyAgICAvLyBkaW1lbnNpb24uIEhv
d2V2ZXIsIGl0IGFwcGVhcnMgdGhhdCBzdXBwb3J0aW5nIHRoaXMgcHJvcGVybHkgb24gYWxsCisg
ICAgLy8gcGxhdGZvcm1zIGlzIGZhaXJseSBpbnZvbHZlZCAod2lsbCByZXF1aXJlIGEgSGFzaE1h
cCBmcm9tIHRleHR1cmUgSUQKKyAgICAvLyBpbiBhbGwgcG9ydHMpLCBhbmQgd2UgaGF2ZSBub3Qg
aGFkIGFueSBjb21wbGFpbnRzLCBzbyB0aGUgbG9naWMgaGFzCisgICAgLy8gYmVlbiByZW1vdmVk
LgorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kQ29sb3IoR0MzRGZs
b2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhh
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0g
bW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJs
ZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fY29udGV4dC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0Mz
RGVudW0gbW9kZUFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGVSR0IpIHx8ICF2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlQWxwaGEpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9k
ZUFscGhhKTsKK30KKworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kRnVu
YyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5j
Iiwgc2ZhY3RvciwgZGZhY3RvcikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJs
ZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJH
QiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAgIC8vIE5vdGU6
IEFscGhhIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIFJHQi4KKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMo
ImJsZW5kRnVuYyIsIHNyY1JHQiwgZHN0UkdCKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29u
dGV4dC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBo
YSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShHQzNE
ZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZh
bGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsK
KyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzaXplIDwgMCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIXNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPT0gMCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nl
c3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHN0YXRp
Y19jYXN0PEdDM0RzaXplaXB0cj4oc2l6ZSkpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52
YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAg
IG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4o
c2l6ZSksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWlsZWQu
IFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRv
ZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAgIH0KK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRh
dGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2UpOworICAg
IGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVm
ZmVyRGF0YSIsICJubyBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFp
c0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAgICAgaWYgKCFi
dWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIs
ICJpbnZhbGlkIGJ1ZmZlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7
CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBk
YXRhLT5kYXRhKCksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBm
YWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtz
IGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAg
IH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZl
ciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVz
YWdlKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZGF0YSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAg
ICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1
ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVM
ZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSwgdXNhZ2UpOworICAgIGlmIChtX2NvbnRleHQt
Pm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBidWZm
ZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0
aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVC
dWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1
ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAg
V2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZl
clN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNFcnJvckdlbmVyYXRl
ZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lh
dGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEpKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+bW92
ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJTdWJE
YXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxl
bmd0aCgpLCBkYXRhLT5kYXRhKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5
bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0
aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0
aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7
CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlclN1YkRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRh
dGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVm
ZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRh
IiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIGlmICghYnVm
ZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJT
dWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
IWRhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9m
Qm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVy
U3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJn
ZXQsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwg
ZGF0YS0+YmFzZUFkZHJlc3MoKSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEgZnVuY3Rp
b24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRo
aW5rcyBpdCBkb2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsK
KyAgICB9Cit9CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVJfVU5TVVBQT1JURUQ7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxpZCB0YXJnZXQi
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURTsKKyAgICBjb25zdCBjaGFyKiBy
ZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgR0MzRGVudW0gcmVzdWx0ID0g
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3RhdHVzKCZyZWFzb24pOworICAgIGlmIChyZXN1
bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAg
IHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgcmVhc29u
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgcmVzdWx0ID0gbV9jb250ZXh0
LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhcihHQzNEYml0ZmllbGQgbWFz
aykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKG1hc2sgJiB+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwg
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CVUZGRVJfQklUKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyIiwgImludmFsaWQgbWFzayIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZl
ciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNh
ZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY2xlYXIiLCByZWFzb24pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghY2xlYXJJZkNvbXBvc2l0ZWQobWFzaykp
CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIobWFzayk7CisgICAgbWFya0NvbnRleHRDaGFuZ2Vk
KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJDb2xvcihHQzNE
ZmxvYXQgciwgR0MzRGZsb2F0IGcsIEdDM0RmbG9hdCBiLCBHQzNEZmxvYXQgYSkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHN0
ZDo6aXNuYW4ocikpCisgICAgICAgIHIgPSAwOworICAgIGlmIChzdGQ6OmlzbmFuKGcpKQorICAg
ICAgICBnID0gMDsKKyAgICBpZiAoc3RkOjppc25hbihiKSkKKyAgICAgICAgYiA9IDA7CisgICAg
aWYgKHN0ZDo6aXNuYW4oYSkpCisgICAgICAgIGEgPSAxOworICAgIG1fY2xlYXJDb2xvclswXSA9
IHI7CisgICAgbV9jbGVhckNvbG9yWzFdID0gZzsKKyAgICBtX2NsZWFyQ29sb3JbMl0gPSBiOwor
ICAgIG1fY2xlYXJDb2xvclszXSA9IGE7CisgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKHIsIGcs
IGIsIGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFyRGVwdGgo
R0MzRGZsb2F0IGRlcHRoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsKKyAgICBtX2NvbnRleHQt
PmNsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xlYXJTdGVuY2lsID0gczsKKyAgICBtX2Nv
bnRleHQtPmNsZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJv
b2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29sb3JNYXNrWzBdID0gcmVkOwor
ICAgIG1fY29sb3JNYXNrWzFdID0gZ3JlZW47CisgICAgbV9jb2xvck1hc2tbMl0gPSBibHVlOwor
ICAgIG1fY29sb3JNYXNrWzNdID0gYWxwaGE7CisgICAgbV9jb250ZXh0LT5jb2xvck1hc2socmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVyKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclplcm8o
c2hhZGVyKSk7CisgICAgR0MzRGludCB2YWx1ZTsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2
KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMs
ICZ2YWx1ZSk7CisgICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdl
dCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2Uy
RCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKGJvcmRlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3Qg
MCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2Vk
VGV4RGltZW5zaW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZh
bGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRo
LCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3Nl
ZFRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7CisgICAgICAgIGlmIChsZXZlbCAm
JiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVz
c2VkVGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5
bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0
YS0+YmFzZUFkZHJlc3MoKSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhl
dGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGNvbXByZXNzZWRUZXhJbWFnZTJEIGZ1
bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0aGUg
ZGF0YSBmb3IgdGhpcyBsZXZlbC4KKyAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJnZXQsIGxl
dmVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB0ZXgtPnNldExldmVsSW5m
byh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgIHRleC0+c2V0Q29tcHJlc3NlZCgpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwo
ImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChmb3JtYXQpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIGZvcm1hdCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoImNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJl
QmluZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlm
ICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGZvcm1hdCAhPSB0ZXgtPmdl
dEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvbXByZXNzZWRUZXhT
dWJJbWFnZTJEIiwgImZvcm1hdCBkb2VzIG5vdCBtYXRjaCB0ZXh0dXJlIGZvcm1hdCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4
U3ViRGltZW5zaW9ucygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHRleCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0
YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICB0ZXgtPnNldENvbXBy
ZXNzZWQoKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVNl
dHRhYmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0
KQoreworICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlGb3JtYXQoZm9y
bWF0KSAmIChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZm9y
bWF0IGNhbiBub3QgYmUgc2V0LCBvbmx5IHJlbmRlcmVkIHRvIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRh
dGVUZXhGdW5jUGFyYW1ldGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRl
cm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4SW1hZ2Uy
RCIsIGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSog
dGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1RleEludGVy
bmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRC
b3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQi
LCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJHTFRl
eHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxl
dmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNv
bnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFw
aGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCByZWFzb24pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkp
IHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVm
ZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIG1fY29udGV4
dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU2NvcGVkRHJhd2lu
Z0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSk7CisgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOworICAg
ICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OworICAgICAgICBpZiAo
Y2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBn
ZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBl
ZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1h
Z2UyRFJlc291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV91
bnBhY2tBbGlnbm1lbnQpOworICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xp
cHBlZEhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZ
LCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgfQor
ICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9m
IHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVs
KCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47Cisg
ICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4U3Vi
SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zm
c2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQp
KQorICAgICAgICByZXR1cm47CisgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRo
ZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KKyAgICBpZiAoeG9mZnNl
dCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsgaGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJ
bWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9m
ZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29w
eVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xlIG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5h
bEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3Jt
YXQoImNvcHlUZXhTdWJJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlk
KGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZv
cm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9
ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAh
aXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRl
eFN1YkltYWdlMkQiLCByZWFzb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNsZWFy
SWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgU2Nv
cGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7Cisg
ICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CisgICAgICAgIGlm
IChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCks
IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlw
cGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgeworICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgIEdD
M0RlbnVtIHR5cGUgPSB0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hhcltdPiB6ZXJvOworICAgICAgICAgICAgaWYgKHdp
ZHRoICYmIGhlaWdodCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemU7CisgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXpl
LCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAi
Y29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB6ZXJvID0gc3Rk
OjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KHNpemUpOworICAgICAgICAgICAgICAgIGlm
ICghemVybykgeworICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91dCBvZiBt
ZW1vcnkiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgp
KTsKKyAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAw
KSB7CisgICAgICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9k
cmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0ICsgY2xpcHBlZFggLSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlw
cGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5n
QnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorfQorCitQYXNzUmVm
UHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVCdWZmZXIo
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbyA9IFdlYkdMQnVmZmVyOjpjcmVhdGUo
dGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQor
CitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4g
byA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRDb250ZXh0T2JqZWN0
KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVm
UHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKHRoaXMpOworICAgIGFk
ZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1JlZlB0cjxX
ZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVByb2dyYW0oKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJHTFByb2dyYW06OmNyZWF0ZSh0
aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisK
K1Bhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVy
PiBvID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmpl
Y3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xTaGFkZXI+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICh0
eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSICYmIHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY3JlYXRlU2hhZGVyIiwgImludmFs
aWQgc2hhZGVyIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAor
ICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhpcywgdHlw
ZSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fY29udGV4dC0+Y3VsbEZhY2UobW9kZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRleHQiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAob2JqZWN0LT5vYmplY3QoKSkg
eworICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gY29udGV4dCBoZXJlIGJlY2F1c2Ugd2Ug
d2FudAorICAgICAgICAvLyB0aGluZ3MgaW4gdGhpcyBjb250ZXh0IHVuYm91bmQuCisgICAgICAg
IG9iamVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVC
dWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChidWZm
ZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9PSBidWZm
ZXIpCisgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7CisgICAgCisgICAgbV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0LT51bmJpbmRCdWZmZXIoYnVmZmVyKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBm
cmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZlcikpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcp
IHsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgICAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVy
QmluZGluZygwKTsKKyAgICAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIg
aGVyZSB0byBiaW5kIGJhY2sgdG8gaW50ZXJuYWwgZmJvLgorICAgICAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5iaW5kKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICB9
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlUHJvZ3JhbShXZWJH
TFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgZGVsZXRlT2JqZWN0KHByb2dyYW0pOworICAgIC8v
IFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFByb2dyYW0gdG8gMCBoZXJlIGJlY2F1c2UgdGhlIGRl
bGV0aW9uIG9mIHRoZQorICAgIC8vIGN1cnJlbnQgcHJvZ3JhbSBpcyBkZWxheWVkLgorfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJl
bmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghZGVsZXRlT2JqZWN0KHJlbmRl
cmJ1ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVmZmVyID09IG1fcmVu
ZGVyYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gMDsKKyAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIocmVuZGVyYnVmZmVyKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVTaGFkZXIoV2ViR0xTaGFk
ZXIqIHNoYWRlcikKK3sKKyAgICBkZWxldGVPYmplY3Qoc2hhZGVyKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVy
ZSkKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmluZGlu
ZykKKyAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcgPSBudWxs
cHRyOworICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlQ3Vi
ZU1hcEJpbmRpbmcpCisgICAgICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlQ3ViZU1h
cEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcp
CisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5k
RnJhbWVidWZmZXIodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZGVwdGhGdW5jKGZ1bmMp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlcHRoTWFzayhHQzNEYm9v
bGVhbiBmbGFnKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2RlcHRoTWFzayA9IGZsYWc7CisgICAgbV9jb250ZXh0LT5kZXB0aE1h
c2soZmxhZyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVwdGhSYW5n
ZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoek5lYXIgPiB6RmFyKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKCFwcm9ncmFtLT5kZXRhY2hTaGFkZXIoc2hhZGVyKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRhY2hTaGFk
ZXIiLCAic2hhZGVyIG5vdCBhdHRhY2hlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3Ja
ZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlKEdDM0RlbnVt
IGNhcCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNh
cGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNhcCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7CisgICAgICAgIG1fc3RlbmNpbEVu
YWJsZWQgPSBmYWxzZTsKKyAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCkgeworICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgICAgIGlmIChtX2Ry
YXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFi
bGVkKG1fc2Npc3NvckVuYWJsZWQpOworICAgIH0KKyAgICBtX2NvbnRleHQtPmRpc2FibGUoY2Fw
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4
QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhB
dHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3RhdGUuZW5hYmxlZCA9IGZhbHNlOworICAgIAorICAg
IGlmIChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICBtX2NvbnRleHQt
PmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgUmVmUHRyPFdlYkdMQnVm
ZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG9mZnNldCA8IDApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBhcnJheSwgb2Zmc2V0
IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDQgZm9yIGFsaWdubWVudCByZWFzb25zLgorICAgICAgICBp
ZiAob2Zmc2V0ICUgNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgb2Zmc2V0IC89
IDQ7CisgICAgICAgIAorICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpIC8gNDsKKyAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBu
IC0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKKyAgICAgICAgLy8gRm9y
IGFuIHVuc2lnbmVkIHNob3J0IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgMiBm
b3IgYWxpZ25tZW50IHJlYXNvbnMuCisgICAgICAgIGlmIChvZmZzZXQgJSAyKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVs
ZW1lbnQgb2Zmc2V0LgorICAgICAgICBvZmZzZXQgLz0gMjsKKyAgICAgICAgCisgICAgICAgIEdD
M0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAyOworICAg
ICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFKSB7CisgICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVm
ZmVyLT5ieXRlTGVuZ3RoKCk7CisgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAt
IG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFy
cmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVp
cmVkKQoreworICAgIC8vIFBlcmZvcm1zIGNvbnNlcnZhdGl2ZSB2YWxpZGF0aW9uIGJ5IGNhY2hp
bmcgYSBtYXhpbXVtIGluZGV4IG9mCisgICAgLy8gdGhlIGdpdmVuIHR5cGUgcGVyIGVsZW1lbnQg
YXJyYXkgYnVmZmVyLiBJZiBhbGwgb2YgdGhlIGJvdW5kCisgICAgLy8gYXJyYXkgYnVmZmVycyBo
YXZlIGVub3VnaCBlbGVtZW50cyB0byBzYXRpc2Z5IHRoYXQgbWF4aW11bQorICAgIC8vIGluZGV4
LCBza2lwcyB0aGUgZXhwZW5zaXZlIHBlci1kcmF3LWNhbGwgaXRlcmF0aW9uIGluCisgICAgLy8g
dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZS4KKyAgICAKKyAgICBSZWZQdHI8V2ViR0xCdWZmZXI+
IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVu
dEFycmF5QnVmZmVyKCk7CisgICAgCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBl
bGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICAvLyBUaGUgY2FzZSBjb3VudD09
MCBpcyBhbHJlYWR5IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxpZGF0ZUlu
ZGV4QXJyYXlDb25zZXJ2YXRpdmUuCisgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50QXJyYXlC
dWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXIpOworICAgIAor
ICAgIGludCBtYXhJbmRleCA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Z2V0Q2FjaGVkTWF4SW5kZXgo
dHlwZSk7CisgICAgaWYgKG1heEluZGV4IDwgMCkgeworICAgICAgICAvLyBDb21wdXRlIHRoZSBt
YXhpbXVtIGluZGV4IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBp
bmRleC4KKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6IHsKKyAgICAgICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9
IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAg
ICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAg
ICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+
KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOiB7CisgICAgICAgICAgICBudW1FbGVtZW50
cyAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBw
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAg
ICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAg
ICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxp
bnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDogeworICAgICAgICAgICAgaWYgKCFtX29l
c0VsZW1lbnRJbmRleFVpbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgICAgIGNvbnN0
IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVpbnQqPihidWZmZXItPmRhdGEo
KSk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRz
OyBpKyspCisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3Rh
dGljX2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGVsZW1lbnRBcnJheUJ1ZmZlci0+c2V0Q2FjaGVkTWF4SW5kZXgodHlwZSwgbWF4SW5kZXgp
OworICAgIH0KKyAgICAKKyAgICBpZiAobWF4SW5kZXggPj0gMCkgeworICAgICAgICAvLyBUaGUg
bnVtYmVyIG9mIHJlcXVpcmVkIGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG1heGltdW0K
KyAgICAgICAgLy8gaW5kZXggdGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgorICAgICAgICBudW1FbGVt
ZW50c1JlcXVpcmVkID0gbWF4SW5kZXggKyAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQp
Cit7CisgICAgQVNTRVJUKGNvdW50ID49IDAgJiYgb2Zmc2V0ID49IDApOworICAgIHVuc2lnbmVk
IGxhc3RJbmRleCA9IDA7CisgICAgCisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJy
YXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZl
cigpOworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBudW1FbGVtZW50c1JlcXVp
cmVkID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmICghZWxl
bWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHVuc2lnbmVkIGxvbmcgdW9mZnNldCA9IG9mZnNldDsKKyAgICB1bnNp
Z25lZCBsb25nIG4gPSBjb3VudDsKKyAgICAKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50
IG9mZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVpbnQpOworICAgICAgICBj
b25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oZWxlbWVudEFy
cmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7CisgICAg
ICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgpCisg
ICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAg
ICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgIGNvbnN0IEdDM0R1c2hv
cnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oZWxlbWVudEFycmF5QnVmZmVy
LT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7CisgICAgICAgIHdoaWxl
IChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgpCisgICAgICAgICAg
ICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAg
ICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVieXRlKj4o
ZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZz
ZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0
SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlbiBzZXQgdGhlIGxhc3QgaW5kZXgg
aW4gdGhlIGluZGV4IGFycmF5IGFuZCBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCisgICAgbnVtRWxl
bWVudHNSZXF1aXJlZCA9IGxhc3RJbmRleCArIDE7CisgICAgcmV0dXJuIG51bUVsZW1lbnRzUmVx
dWlyZWQgPiAwOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRl
VmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2
ZUNvdW50KQoreworICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRyaWIgYW5k
IGNoZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAgICAgaWYgKCFt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZhbGlkYXRl
QmluZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBp
ZiAoZWxlbWVudENvdW50IDw9IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIAor
ICAgIC8vIExvb2sgaW4gZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUgY3VycmVu
dCBwcm9ncmFtKS4KKyAgICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNlOworICAg
IGJvb2wgc2F3RW5hYmxlZEF0dHJpYiA9IGZhbHNlOworICAgIGludCBudW1BY3RpdmVBdHRyaWJM
b2NhdGlvbnMgPSBtX2N1cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsgKytpKSB7
CisgICAgICAgIGludCBsb2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRyaWJMb2Nh
dGlvbihpKTsKKyAgICAgICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0PGludD4o
bV9tYXhWZXJ0ZXhBdHRyaWJzKSkgeworICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShsb2MpOworICAgICAgICAgICAgaWYgKHN0YXRl
LmVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAvLyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVtZW50cyBj
b21wdXRhdGlvbi4KKyAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVudCwgd2Ug
d2lsbCBvbmx5IHRvdWNoIHRoZSBkYXRhIGZvciB0aGUKKyAgICAgICAgICAgICAgICAvLyBlbGVt
ZW50IGFuZCBub3RoaW5nIGJleW9uZCBpdC4KKyAgICAgICAgICAgICAgICBpbnQgYnl0ZXNSZW1h
aW5pbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgo
KSAtIHN0YXRlLm9mZnNldCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMg
PSAwOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYnl0ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KQorICAg
ICAgICAgICAgICAgICAgICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcgLSBzdGF0
ZS5ieXRlc1BlckVsZW1lbnQpIC8gc3RhdGUuc3RyaWRlOworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluc3RhbmNlc1JlcXVpcmVkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGl2
aXNvcikgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNlaWwoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghc2F3Tm9uSW5zdGFuY2Vk
QXR0cmliICYmIHNhd0VuYWJsZWRBdHRyaWIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5vYmplY3QoKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0IG9yIG9iamVjdCBkZWxldGVkIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91
cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxv
bmcgdG8gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0Mz
RGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWl0aXZlQ291bnQpCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShm
dW5jdGlvbk5hbWUsIG1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYg
KCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgaWYgKGZpcnN0IDwgMCB8fCBjb3VudCA8IDApIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGlmICghY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRDaGFuZ2Vk
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByaW1pdGl2
ZUNvdW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9u
T3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFs
aWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZs
b3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2VkQ291bnQ7
CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQcmltaXRp
dmVDb3VudChwcmltaXRpdmVDb3VudCk7CisgICAgICAgIGlmIChjaGVja2VkU3VtLmhhc092ZXJm
bG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8ICF2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hlY2tlZFByaW1p
dGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRl
bXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVZl
cnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0cmlicyBu
b3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGlu
Y29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgp
LCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVhc29uKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1v
ZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0FycmF5
cygiZHJhd0FycmF5cyIsIG1vZGUsIGZpcnN0LCBjb3VudCwgMCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIAorICAgIGJvb2wgdmVydGV4QXR0
cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAg
ICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0
ICsgY291bnQgLSAxKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNo
ZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0FycmF5cyIsIHRydWUpOworICAgIAorICAgIG1f
Y29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworICAgIAorICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAgICAgIHJl
c3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYgKCFpc0dM
RVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdB
cnJheXMiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHBy
aW1pdGl2ZUNvdW50KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25OYW1lKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKKyAgICAgICAgaWYgKG1fb2VzRWxlbWVudEluZGV4
VWludCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiY291bnQg
b3Igb2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IGlmICghY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByaW1pdGl2ZUNvdW50IDwgMCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIAorICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1FTlRfQVJS
QVlfQlVGRkVSIGJvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAg
ICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKKyAgICAgICAgaWYg
KCF2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0Rp
bnRwdHI+KG9mZnNldCkpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInJlcXVlc3Qgb3V0
IG9mIGJvdW5kcyBmb3IgY3VycmVudCBFTEVNRU5UX0FSUkFZX0JVRkZFUiIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghY291bnQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOworICAgICAgICBDaGVja2VkPEdDM0Rp
bnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQp
OworICAgICAgICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJp
bWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghdmFsaWRhdGVJ
bmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRhdGVWZXJ0
ZXhBdHRyaWJ1dGVzKG51bUVsZW1lbnRzLCBjaGVja2VkUHJpbWl0aXZlQ291bnQudW5zYWZlR2V0
KCkpKSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY2hlY2tl
ZENvdW50LnVuc2FmZUdldCgpLCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQp
LCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cywg
Y2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAoIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcygwKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0bHkiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBj
b25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3Jh
cGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgCisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAw
OworICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50cyIsIG1vZGUsIGNv
dW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzLCAwKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIw
U2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAg
ICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgICAgIHZhbGlkYXRlSW5kZXhBcnJheVByZWNp
c2UoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51bUVsZW1l
bnRzKTsKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0
cmliMChudW1FbGVtZW50cyk7CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
KyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHMiLCB0cnVlKTsK
KyAgICAKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgc3Rh
dGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CisgICAgCisgICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgcmVzdG9yZVN0YXRl
c0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3Ry
aWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzIiwg
ZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmVuYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJlbmFibGUiLCBjYXApKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9URVNUKSB7CisgICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgPSB0cnVlOworICAgICAgICBhcHBs
eVN0ZW5jaWxUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGNhcCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CisgICAgICAgIG1fc2Npc3NvckVuYWJs
ZWQgPSB0cnVlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9
CisgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1fbWF4
VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91
dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0
ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgIHN0YXRlLmVu
YWJsZWQgPSB0cnVlOworICAgIAorICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoaW5kZXgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZpbmlzaCgp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY29udGV4dC0+ZmluaXNoKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Zmx1c2goKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdM
UmVuZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVG
cmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsIHRhcmdl
dCwgYXR0YWNobWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVmZmVydGFy
Z2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhp
cykpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gYnVmZmVyIG9yIGJ1
ZmZlciBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBh
bGwgY3VycmVudAorICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkg
aW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXJPYmplY3QgPSBv
YmplY3RPclplcm8oYnVmZmVyKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOwor
ICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZm
ZXJPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2NvbnRl
eHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVm
ZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVyQmluZGlu
Zy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgYnVmZmVyKTsK
KyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRh
Y2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGlu
dCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVu
Y1BhcmFtZXRlcnMoImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChsZXZlbCkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVy
ZTJEIiwgImxldmVsIG5vdCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRl
eHR1cmUgJiYgIXRleHR1cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZy
b20gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRG9uJ3Qg
YWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQK
KyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9m
IHRoZSBkZWZhdWx0CisgICAgLy8gRkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
fHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZl
clRleHR1cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0
ZXh0dXJlKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNI
TUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKKyAg
ICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQs
IHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQs
IHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQs
IHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgIH0KKyAgICBtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwg
dGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyb250RmFjZShHQzNEZW51bSBtb2Rl
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NvbnRleHQtPmZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAiLCB0YXJn
ZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdGV4
LT5jYW5HZW5lcmF0ZU1pcG1hcHMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJsZXZl
bCAwIG5vdCBwb3dlciBvZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTIzOTE2LiBDb21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBhbGxvd2Vk
IGluIFdlYkdMIDI6CisgICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2Vu
ZXJhdGVNaXBtYXAiLCAidHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21wcmVzc2Vk
IHRleHR1cmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2V0
dGFibGVUZXhGb3JtYXQoImdlbmVyYXRlTWlwbWFwIiwgdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0
YXJnZXQsIDApKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIGdlbmVyYXRlTWlwbWFw
IHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVyIGlzIG5vdCBORUFSRVNUX01JUE1BUF9M
SU5FQVIKKyAgICAvLyBvbiBNYWMuIFJlbW92ZSB0aGUgaGFjayBvbmNlIHRoaXMgZHJpdmVyIGJ1
ZyBpcyBmaXhlZC4KKyNpZiBPUyhEQVJXSU4pCisgICAgYm9vbCBuZWVkVG9SZXNldE1pbkZpbHRl
ciA9IGZhbHNlOworICAgIGlmICh0ZXgtPmdldE1pbkZpbHRlcigpICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpIHsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUik7CisgICAgICAgIG5lZWRUb1Jl
c2V0TWluRmlsdGVyID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAgICBtX2NvbnRleHQtPmdlbmVy
YXRlTWlwbWFwKHRhcmdldCk7CisjaWYgT1MoREFSV0lOKQorICAgIGlmIChuZWVkVG9SZXNldE1p
bkZpbHRlcikKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGV4LT5nZXRNaW5GaWx0ZXIoKSk7Cisj
ZW5kaWYKKyAgICB0ZXgtPmdlbmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBY3RpdmVB
dHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVBdHRyaWIiLCBwcm9n
cmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgQWN0aXZlSW5mbyBpbmZvOworICAg
IGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBp
bmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIExPRyhXZWJH
TCwgIlJldHVybmluZyBhY3RpdmUgYXR0cmlidXRlICVkOiAlcyIsIGluZGV4LCBpbmZvLm5hbWUu
dXRmOCgpLmRhdGEoKSk7CisgICAgCisgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRl
KGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworfQorCitQYXNzUmVmUHRyPFdlYkdM
QWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlVW5pZm9ybShX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9ncmFtKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgQWN0aXZlSW5mbyBpbmZvOworICAgIGlmICghbV9jb250
ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8p
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkg
eworICAgICAgICBpZiAoaW5mby5zaXplID4gMSAmJiAhaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0i
KSkKKyAgICAgICAgICAgIGluZm8ubmFtZS5hcHBlbmQoIlswXSIpOworICAgIH0KKyAgICAKKyAg
ICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZlIHVuaWZvcm0gJWQ6ICVzIiwgaW5kZXgsIGlu
Zm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAKKyAgICByZXR1cm4gV2ViR0xBY3RpdmVJbmZv
OjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7Cit9CisKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIHNoYWRlck9iamVj
dHMuY2xlYXIoKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGNvbnN0IEdDM0RlbnVtIHNoYWRlclR5cGVbXSA9IHsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIsCisgICAgICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIKKyAgICB9OworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplb2Yoc2hhZGVyVHlwZSkgLyBzaXplb2YoR0MzRGVudW0pOyArK2kpIHsKKyAg
ICAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKHNo
YWRlclR5cGVbaV0pOworICAgICAgICBpZiAoc2hhZGVyKQorICAgICAgICAgICAgc2hhZGVyT2Jq
ZWN0cy5hcHBlbmQoc2hhZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dDM0Rp
bnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0cmliTG9jYXRpb24i
LCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmICghdmFsaWRhdGVMb2NhdGlv
bkxlbmd0aCgiZ2V0QXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAg
ICAgIHJldHVybiAtMTsKKyAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImdldEF0dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOworICAgICAgICByZXR1
cm4gLTE7CisgICAgfQorICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG9i
amVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVG
RkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGlmIChwbmFtZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUgJiYgcG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkJVRkZFUl9VU0FHRSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICAK
KyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclBhcmFtZXRl
cml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpCVUZGRVJfU0laRSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7
CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpKTsK
K30KKworUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gV2UgYWx3YXlz
IG5lZWQgdG8gcmV0dXJuIGEgbmV3IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgb2JqZWN0IHRvCisg
ICAgLy8gcHJldmVudCB0aGUgdXNlciBmcm9tIG11dGF0aW5nIGFueSBjYWNoZWQgdmVyc2lvbi4K
KyAgICAKKyAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2UgcmVxdWVzdGVkIHZhbHVlcyBv
ZiAiZmFsc2UiIGZvciBkZXB0aAorICAgIC8vIGFuZCBzdGVuY2lsLCByZWdhcmRsZXNzIG9mIHRo
ZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCisgICAgLy8gR3JhcGhpY3NDb250ZXh0M0Qg
b3IgRHJhd2luZ0J1ZmZlci4KKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0
cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZShtX2NvbnRleHQtPmdldENv
bnRleHRBdHRyaWJ1dGVzKCkpOworICAgIGlmICghbV9hdHRyaWJ1dGVzLmRlcHRoKQorICAgICAg
ICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7CisgICAgaWYgKCFtX2F0dHJpYnV0ZXMuc3Rl
bmNpbCkKKyAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNpbChmYWxzZSk7CisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBUaGUgRHJhd2luZ0J1ZmZlciBvYnRhaW5zIGl0
cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVz
KCksCisgICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3duIGRldGVybWluYXRpb24gb2Ygd2hl
dGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KKyAgICAgICAgYXR0cmlidXRlcy0+c2V0
QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1wbGUoKSk7CisgICAgfQorICAgIHJl
dHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKK30KKworR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2V0RXJyb3IoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb24pCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CisgICAg
cmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKK30KKworV2ViR0xFeHRlbnNpb24qIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfYmxlbmRfbWlu
bWF4IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9FWFRfYmxlbmRfbWlubWF4IikpIHsKKyAgICAgICAgaWYgKCFtX2V4dEJsZW5kTWluTWF4KSB7
CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgi
R0xfRVhUX2JsZW5kX21pbm1heCIpOworICAgICAgICAgICAgbV9leHRCbGVuZE1pbk1heCA9IHN0
ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7CisgICAgICAgIGlmICghbV9leHRz
UkdCKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX3NSR0IiKTsKKyAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0ZDo6bWFrZV91
bmlxdWU8RVhUc1JHQj4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fZXh0c1JH
Qi5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfZnJh
Z19kZXB0aCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0
cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgeworICAgICAgICBpZiAoIW1fZXh0RnJhZ0RlcHRoKSB7
CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgi
R0xfRVhUX2ZyYWdfZGVwdGgiKTsKKyAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRoID0gc3RkOjpt
YWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKKyAgICAgICAgJiYgKG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0
dXJlX2xvZCIpKSkgeworICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxPRCkgeworICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VY
VF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIG1fZXh0U2hhZGVyVGV4dHVyZUxP
RCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsKKyAgICB9Cisg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgeworICAgICAgICBp
ZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAgICBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljIik7CisgICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
YyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPih0aGlzKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMu
Z2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgeworICAgICAgICBpZiAo
IW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIp
OworICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjptYWtlX3VuaXF1
ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKKyAgICAgICAgJiYgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKSB7
CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIp
OworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1Rl
eHR1cmVGbG9hdD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVy
ZUZsb2F0LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9F
U190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpIHsKKyAgICAg
ICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xp
bmVhciIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQorICAgICAgICAm
JiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hh
bGZfZmxvYXQiKSkgeworICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdCkgeworICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9h
dCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsKKyAgICB9Cisg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xp
bmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygi
R0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgeworICAgICAgICBpZiAoIW1fb2Vz
VGV4dHVyZUhhbGZGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFy
Iik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7CisgICAgfQorICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQor
ICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKKyAgICAgICAgaWYgKCFtX29lc1ZlcnRleEFycmF5T2Jq
ZWN0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAgICAgICAgIG1fb2VzVmVy
dGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5T2JqZWN0Pih0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJheU9iamVjdC5n
ZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfZWxlbWVu
dF9pbmRleF91aW50IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKKyAgICAgICAgaWYgKCFtX29l
c0VsZW1lbnRJbmRleFVpbnQpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7CisgICAgICAg
ICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU0VsZW1lbnRJ
bmRleFVpbnQ+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29lc0VsZW1lbnRJ
bmRleFVpbnQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
V0VCR0xfbG9zZV9jb250ZXh0IikpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsTG9zZUNvbnRleHQp
CisgICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdM
TG9zZUNvbnRleHQ+KHRoaXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VDb250ZXh0Lmdl
dCgpOworICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VC
R0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQorICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJl
c3NlZFRleHR1cmVBVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMg
PSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRoaXMpOworICAg
ICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOworICAgIH0KKyAg
ICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90
ZXh0dXJlX3B2cnRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6
c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJl
UFZSVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9IHN0ZDo6
bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsKKyAgICAgICAg
cmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOworICAgIH0KKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3Rj
IikKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlz
KSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMpCisgICAgICAg
ICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7CisgICAgICAgIHJldHVybiBtX3dlYmdsQ29t
cHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQorICAgICAgICAmJiBXZWJHTERlcHRoVGV4
dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7CisgICAgICAgIGlmICghbV93
ZWJnbERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsKKyAgICAgICAg
ICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVwdGhUZXh0
dXJlPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV93ZWJnbERlcHRoVGV4dHVy
ZS5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9k
cmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKKyAgICAgICAgaWYgKCFt
X3dlYmdsRHJhd0J1ZmZlcnMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAgICAgICAgICBt
X3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1ZmZlcnM+KHRo
aXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZlcnMuZ2V0KCk7
CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVfaW5zdGFuY2Vk
X2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAg
ICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7CisgICAgICAgICAgICBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFuY2VkX2Fy
cmF5cyIpOworICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0ZDo6bWFrZV91
bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOworICAgIH0KKyAgICBpZiAoYWxsb3dQ
cml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7CisgICAgICAgICAgICBpZiAoIW1f
d2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgICAgICBtX3dlYmdsRGVidWdSZW5k
ZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlckluZm8+KHRoaXMp
OworICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5nZXQoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlYnVn
X3NoYWRlcnMiKQorICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgeworICAgICAgICAg
ICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQorICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1
Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0aGlzKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCitXZWJHTEdldEluZm8gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgCisgICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBib3Vu
ZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIFdl
YkdMU2hhcmVkT2JqZWN0KiBvYmplY3QgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0QXR0YWNo
bWVudE9iamVjdChhdHRhY2htZW50KTsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAo
cG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X1RZUEUpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNE
OjpOT05FKTsKKyAgICAgICAgLy8gT3BlbkdMIEVTIDIuMCBzcGVjaWZpZXMgSU5WQUxJRF9FTlVN
IGluIHRoaXMgY2FzZSwgd2hpbGUgZGVza3RvcCBHTAorICAgICAgICAvLyBzcGVjaWZpZXMgSU5W
QUxJRF9PUEVSQVRJT04uCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgfQorICAgIAorICAgIEFTU0VSVChvYmplY3QtPmlzVGV4dHVyZSgpIHx8IG9iamVjdC0+
aXNSZW5kZXJidWZmZXIoKSk7CisgICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRSk7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihyZWludGVy
cHJldF9jYXN0PFdlYkdMVGV4dHVyZSo+KG9iamVjdCkpKTsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVf
Q1VCRV9NQVBfRkFDRToKKyAgICAgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7CisgICAgICAgICAgICBHQzNEaW50IHZhbHVl
ID0gMDsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIpOworICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNo
IChwbmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4ocmVpbnRl
cnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCkpKTsKKyAgICAgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7
CisgICAgICAgICAgICBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCk7CisgICAgICAgICAgICBHQzNEZW51
bSByZW5kZXJCdWZmZXJGb3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7
CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lvbnMzRDo6
U1JHQl9FWFQgJiYgcmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBI
QV9FWFQpOworICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlckZvcm1hdCA9PSBFeHRlbnNpb25z
M0Q6OlNSR0I4X0FMUEhBOF9FWFQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhFeHRlbnNpb25zM0Q6OlNSR0JfRVhUKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgIH0KK30KKworV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgY29uc3QgaW50IGludFplcm8gPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKKyAgICAgICAgcmV0dXJuIGdl
dFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFT
RURfUE9JTlRfU0laRV9SQU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xP
UjoKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgorICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkJMRU5EX0RTVF9SR0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05f
QUxQSEE6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgorICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNf
UkdCOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMVUVfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xF
QVJfVkFMVUU6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKKyAgICAg
ICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oVWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9y
bWF0cy5kYXRhKCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKKyAgICAgICAgcmV0dXJuIGdldEJvb2xl
YW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFD
RV9NT0RFOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKKyAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50UHJvZ3Jh
bSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6CisgICAgICAgIGlm
ICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oaW50WmVybyk7CisgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFS
X1ZBTFVFOgorICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0ZVTkM6CisgICAgICAgIHJldHVybiBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6CisgICAgICAgIHJl
dHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9XUklURU1BU0s6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVy
KHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgICAgIHJl
dHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+
Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQ
dHI8V2ViR0xGcmFtZWJ1ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGUk9OVF9GQUNFOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRF
X01JUE1BUF9ISU5UOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CisgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVfV0lEVEg6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6CisgICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJf
U0laRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9URVhUVVJFX1NJWkU6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6CisgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9WRVJURVhfQVRUUklCUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVM6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0hBREVS
X0JJTkFSWV9GT1JNQVRTOgorICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5cyByZXR1
cm4gMCBmb3IgdGhpcz8KKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBP
TFlHT05fT0ZGU0VUX0ZBQ1RPUjoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBu
YW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgor
ICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRG
bG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJ
VFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVmZmVyQmlu
ZGluZykpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IFdlYkdMIikpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9CVUZGRVJTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJB
R0VfSU5WRVJUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgorICAgICAg
ICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNBTVBMRVM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgICAgICByZXR1cm4g
Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJT
SU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEuMCAoIiAr
IG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdF
X1ZFUlNJT04pICsgIikiKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JB
Q0tfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKKyAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6CisgICAgICAgIHJldHVybiBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9CQUNLX1JFRjoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6CisgICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdl
dFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0JJVFM6CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1f
YXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRa
ZXJvKTsKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKKyAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKKyAgICAgICAgcmV0dXJu
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X1BBU1NfREVQVEhfUEFTUzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKKyAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9URVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgor
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgorICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNVQlBJWEVMX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5p
dHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZykpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9h
Y3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBf
WV9XRUJHTDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6
CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9O
X1dFQkdMOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNv
bnZlcnNpb24pOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhTdHJpbmcoIldlYktpdCIpKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJTSU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCAx
LjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTikg
KyAiKSIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgorICAgICAgICBy
ZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMKKyAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKKyAg
ICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZS
QUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJs
ZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6CisgICAgICAgIGlmIChtX3dl
YmdsRGVidWdSZW5kZXJlckluZm8pCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1f
Y29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVy
X2luZm8gbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAg
IGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgorICAg
ICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9S
KSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVi
dWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzog
Ly8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlP
YmplY3QpIHsKKyAgICAgICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0Rl
ZmF1bHRPYmplY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NS
ZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
KSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29i
amVjdCBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAg
Y2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhU
X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3BpYykKKyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhU
X2RyYXdfYnVmZmVycyBCRUdJTgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQorICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVm
ZmVycyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAg
Y2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgorICAgICAgICBpZiAobV93
ZWJnbERyYXdCdWZmZXJzKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhE
cmF3QnVmZmVycygpKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
LCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMK
KyAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAor
ICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNE
OjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKKyAgICAgICAgICAg
IEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAgICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKKyAgICAgICAgICAgIGVsc2UgLy8g
ZW11bGF0ZWQgYmFja2J1ZmZlcgorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1
ZmZlcjsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgICAgICB9
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qIHByb2dy
YW0sIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2Vi
R0xPYmplY3QoImdldFByb2dyYW1QYXJhbWV0ZXIiLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOworICAgIAorICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHByb2dyYW0tPmlzRGVsZXRlZCgpKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWQUxJREFURV9TVEFUVVM6CisgICAgICAgIG1fY29udGV4
dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkFUVEFDSEVEX1NIQURFUlM6CisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3Jh
bWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElW
RV9BVFRSSUJVVEVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JN
UzoKKyAgICAgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyh2YWx1ZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1QYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgfQorfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3Jh
bUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdl
dFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1
cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVy
byhwcm9ncmFtKSkpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgaWYgKCFtX3JlbmRlcmJ1ZmZlckJp
bmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgIm5vIHJlbmRlcmJ1ZmZlciBib3VuZCIpOworICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGlmIChtX3JlbmRlcmJ1
ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX1NURU5DSUwKKyAgICAgICAgJiYgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+aXNWYWxpZCgp
KSB7CisgICAgICAgIEFTU0VSVCghaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7CisgICAgICAg
IGludCB2YWx1ZSA9IDA7CisgICAgICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1dJRFRIOgorICAgICAgICAgICAgdmFsdWUg
PSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKKyAg
ICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVJfUkVEX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9HUkVFTl9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVJfQkxVRV9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVJfQUxQSEFfU0laRToKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhf
U0laRToKKyAgICAgICAgICAgIHZhbHVlID0gMjQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToKKyAg
ICAgICAgICAgIHZhbHVlID0gODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgorICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFs
Rm9ybWF0KCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIHN3aXRjaCAocG5h
bWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lEVEg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgorICAgICAgICBtX2NvbnRleHQtPmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9y
ZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRl
ciogc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJQYXJhbWV0ZXIiLCBzaGFkZXIpKQorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgc3dpdGNo
IChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFTEVURV9TVEFUVVM6Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc2hhZGVyLT5pc0RlbGV0ZWQoKSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVM6CisgICAgICAgIG1fY29udGV4dC0+
Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIHBuYW1lLCAmdmFsdWUpOworICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBREVSX1RZUEU6CisgICAgICAgIG1fY29udGV4dC0+Z2V0
U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIp
OworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitTdHJpbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciogc2hh
ZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlckluZm9Mb2ciLCBzaGFkZXIpKQor
ICAgICAgICByZXR1cm4gIiI7CisgICAgcmV0dXJuIGVuc3VyZU5vdE51bGwobV9jb250ZXh0LT5n
ZXRTaGFkZXJJbmZvTG9nKG9iamVjdE9yWmVybyhzaGFkZXIpKSk7Cit9CisKK1Bhc3NSZWZQdHI8
V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVj
aXNpb25UeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hB
REVSOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9u
Rm9ybWF0IiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkxPV19GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1f
RkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1FRElVTV9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9JTlQ6CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQiLCAi
aW52YWxpZCBwcmVjaXNpb24gdHlwZSIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisgICAgCisgICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKKyAgICBHQzNEaW50IHByZWNp
c2lvbiA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVy
VHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOworICAgIHJldHVybiBXZWJH
TFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwgcHJlY2lz
aW9uKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclNv
dXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVT
RURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRl
clNvdXJjZSIsIHNoYWRlcikpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZW5zdXJl
Tm90TnVsbChzaGFkZXItPmdldFNvdXJjZSgpKTsKK30KKworVmVjdG9yPFN0cmluZz4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpCit7CisgICAgVmVj
dG9yPFN0cmluZz4gcmVzdWx0OworICAgIAorICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb24pCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgaWYgKG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX2JsZW5kX21pbm1heCIpKQorICAgICAg
ICByZXN1bHQuYXBwZW5kKCJFWFRfYmxlbmRfbWlubWF4Iik7CisgICAgaWYgKG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NSR0IiKSkKKyAgICAgICAgcmVzdWx0
LmFwcGVuZCgiRVhUX3NSR0IiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9FWFRfZnJhZ19kZXB0aCIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJF
WFRfZnJhZ19kZXB0aCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9F
U190ZXh0dXJlX2Zsb2F0Iik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOworICAgIGlmIChtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSkKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAgIGlmICht
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZf
ZmxvYXRfbGluZWFyIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2hhbGZf
ZmxvYXRfbGluZWFyIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBw
b3J0cygiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB8fCBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FSQl9zaGFkZXJfdGV4dHVyZV9s
b2QiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOwor
ICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0
dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJLSVRf
RVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSkKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICBpZiAo
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRl
eF91aW50IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU19lbGVtZW50X2luZGV4X3VpbnQi
KTsKKyAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9sb3NlX2NvbnRleHQiKTsKKyAgICBpZiAoV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAgICByZXN1bHQu
YXBwZW5kKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpOworICAgIGlmIChX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpOworICAg
IGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAg
ICByZXN1bHQuYXBwZW5kKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpOworICAgIGlm
IChXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKQorICAg
ICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZXB0aF90ZXh0dXJlIik7CisgICAgaWYgKHN1cHBv
cnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZHJhd19idWZm
ZXJzIik7CisgICAgaWYgKEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykpCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKKyAgICAKKyAg
ICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmIChtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVy
X3NvdXJjZSIpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfc2hhZGVy
cyIpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIik7
CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5k
aW5nKCJnZXRUZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRleCkKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAg
IHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01B
R19GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVS
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgorICAgICAgICBtX2NvbnRleHQtPmdl
dFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKSk7CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0
ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5h
bWUsICZ2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YWx1ZSkpOworICAgICAgICB9CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBl
bmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGlmICghdW5pZm9ybUxvY2F0aW9uIHx8
IHVuaWZvcm1Mb2NhdGlvbi0+cHJvZ3JhbSgpICE9IHByb2dyYW0pIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5p
Zm9ybSIsICJubyB1bmlmb3JtbG9jYXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHByb2dyYW0i
KTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICBHQzNEaW50IGxv
Y2F0aW9uID0gdW5pZm9ybUxvY2F0aW9uLT5sb2NhdGlvbigpOworICAgIAorICAgIEdDM0RlbnVt
IGJhc2VUeXBlOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICBzd2l0Y2ggKHVuaWZvcm1Mb2Nh
dGlvbi0+dHlwZSgpKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDoKKyAgICAg
ICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0g
MTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUMy
OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAgICAgICBs
ZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpC
T09MX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7Cisg
ICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkJPT0xfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6SU5UOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNE
OjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUM0OgorICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBiYXNlVHlw
ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMjoKKyAgICAg
ICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9
IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZF
QzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAg
ICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVF9WRUM0OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVRfTUFUMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDM6CisgICAgICAgIGJhc2VUeXBlID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA5OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQ0OgorICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMTY7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFOgorICAgICAgICBiYXNlVHlw
ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIENhbid0IGhhbmRsZSB0aGlzIHR5cGUK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJnZXRVbmlmb3JtIiwgInVuaGFuZGxlZCB0eXBlIik7CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKKyAgICB9CisgICAgc3dpdGNoIChiYXNlVHlwZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUOiB7CisgICAgICAgIEdDM0RmbG9hdCB2YWx1ZVsxNl0gPSB7
MH07CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWZ2RVhUKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgbG9jYXRpb24sIDE2ICogc2l6ZW9mKEdDM0RmbG9hdCksIHZhbHVlKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtZnYob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3RoID09IDEp
CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKKyAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cisg
ICAgfQorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDogeworICAgICAgICBHQzNEaW50
IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQp
CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZvcm1pdkVY
VChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdDM0RpbnQpLCB2
YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2
KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAgaWYgKGxl
bmd0aCA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZVswXSk7Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5n
dGgpKTsKKyAgICB9CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDogeworICAgICAg
ICBHQzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRT
dXBwb3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVu
aWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdD
M0RpbnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKKyAgICAg
ICAgaWYgKGxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIGJvb2wgYm9vbFZhbHVlWzE2XSA9IHsw
fTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBsZW5ndGg7IGorKykKKyAg
ICAgICAgICAgICAgICBib29sVmFsdWVbal0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtqXSk7
CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGJvb2xWYWx1ZSwgbGVuZ3RoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZh
bHVlWzBdKSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGdldCBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9u
ZyBpbiBvdXIgdW5mb3J0dW5hdGVseSBjb21wbGV4IGxvZ2ljIGFib3ZlCisgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwg
InVua25vd24gZXJyb3IiKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlm
b3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiZ2V0VW5pZm9y
bUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChpc1By
ZWZpeFJlc2VydmVkKG5hbWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIXBy
b2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtTG9jYXRpb24iLCAi
cHJvZ3JhbSBub3QgbGlua2VkIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CisgICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9
PSAtMSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgR0MzRGludCBhY3RpdmVV
bmlmb3JtcyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291
bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZP
Uk1TLCAmYWN0aXZlVW5pZm9ybXMpOworICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8IGFjdGl2
ZVVuaWZvcm1zOyBpKyspIHsKKyAgICAgICAgQWN0aXZlSW5mbyBpbmZvOworICAgICAgICBpZiAo
IW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSksIGksIGlu
Zm8pKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIC8vIFN0cmlwICJbMF0i
IGZyb20gdGhlIG5hbWUgaWYgaXQncyBhbiBhcnJheS4KKyAgICAgICAgaWYgKGluZm8ubmFtZS5l
bmRzV2l0aCgiWzBdIikpCisgICAgICAgICAgICBpbmZvLm5hbWUgPSBpbmZvLm5hbWUubGVmdChp
bmZvLm5hbWUubGVuZ3RoKCkgLSAzKTsKKyAgICAgICAgLy8gSWYgaXQncyBhbiBhcnJheSwgd2Ug
bmVlZCB0byBpdGVyYXRlIHRocm91Z2ggZWFjaCBlbGVtZW50LCBhcHBlbmRpbmcgIltpbmRleF0i
IHRvIHRoZSBuYW1lLgorICAgICAgICBmb3IgKEdDM0RpbnQgaW5kZXggPSAwOyBpbmRleCA8IGlu
Zm8uc2l6ZTsgKytpbmRleCkgeworICAgICAgICAgICAgU3RyaW5nIHVuaWZvcm1OYW1lID0gaW5m
by5uYW1lICsgIlsiICsgU3RyaW5nOjpudW1iZXIoaW5kZXgpICsgIl0iOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobmFtZSA9PSB1bmlmb3JtTmFtZSB8fCBuYW1lID09IGluZm8ubmFt
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZShw
cm9ncmFtLCB1bmlmb3JtTG9jYXRpb24sIGluZm8udHlwZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIAorICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKKyAgICAKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0
VmVydGV4QXR0cmliIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVj
dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgIAorICAgIGlmIChtX2FuZ2xlSW5z
dGFuY2VkQXJyYXlzICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklC
X0FSUkFZX0RJVklTT1JfQU5HTEUpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUu
ZGl2aXNvcik7CisgICAgCisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIGlm
ICgoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiAhaW5kZXggJiYgbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKS5idWZmZXJCaW5kaW5nID09IG1fdmVydGV4QXR0
cmliMEJ1ZmZlcikKKyAgICAgICAgICAgIHx8ICFzdGF0ZS5idWZmZXJCaW5kaW5nCisgICAgICAg
ICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0
cjxXZWJHTEJ1ZmZlcj4oc3RhdGUuYnVmZmVyQmluZGluZykpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0ZS5lbmFibGVkKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpW
RVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oc3RhdGUubm9ybWFsaXplZCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLnNp
emUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RS
SURFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm9yaWdpbmFsU3RyaWRlKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUudHlwZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOgorICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKG1fdmVydGV4QXR0cmliVmFsdWVbaW5kZXhdLnZh
bHVlLCA0KSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFZlcnRleEF0dHJpYiIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9Cit9
CisKK2xvbmcgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhBdHRyaWJP
ZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIEdDM0RzaXplaXB0ciBy
ZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHJlc3VsdCk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1v
ZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICAgIGlz
VmFsaWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJB
R01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcworICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKQorICAgICAgICAgICAg
aXNWYWxpZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIWlzVmFsaWQp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImhpbnQiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2NvbnRleHQtPmhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sK
KyAgICBpZiAoIWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIGlmICghYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzQnVmZmVyKGJ1ZmZl
ci0+b2JqZWN0KCkpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzQ29u
dGV4dExvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRMb3N0OworfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzQ29udGV4dExvc3RPclBlbmRpbmcoKQorewor
ICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gJiYgIW1faGFzUmVxdWVzdGVkUG9s
aWN5UmVzb2x1dGlvbikgeworICAgICAgICBMT0coV2ViR0wsICJDb250ZXh0IGlzIGJlaW5nIHVz
ZWQuIEF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgcG9saWN5LiIpOworICAgICAgICBEb2N1bWVudCYg
ZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgpOworICAgICAgICBQ
YWdlKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpOworICAgICAgICBpZiAocGFnZSAmJiAhZG9jdW1l
bnQudXJsKCkuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmxv
YWRlcigpLmNsaWVudCgpLnJlc29sdmVXZWJHTFBvbGljeUZvclVSTChkb2N1bWVudC51cmwoKSk7
CisgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkgZG8gYW55dGhpbmcgd2l0aCB0
aGUgcmVzdWx0IGZyb20gcmVzb2x1dGlvbi4gQSBtb3JlCisgICAgICAgIC8vIGNvbXBsZXRlIGlt
cGxlbWVudGF0aW9uIG1pZ2h0IHRyeSB0byBjb25zdHJ1Y3QgYSByZWFsIGNvbnRleHQsIGV0YyBh
bmQgcHJvY2VlZAorICAgICAgICAvLyB3aXRoIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkxMjIKKyAgICAgICAg
bV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uOworfQor
CitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0VuYWJsZWQoR0MzRGVu
dW0gY2FwKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
Q2FwYWJpbGl0eSgiaXNFbmFibGVkIiwgY2FwKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKQorICAgICAgICByZXR1cm4g
bV9zdGVuY2lsRW5hYmxlZDsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQoY2FwKTsK
K30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNGcmFtZWJ1ZmZl
cihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVmZmVy
IHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgaWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVy
LT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtIHx8
IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
cmV0dXJuIG1fY29udGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKK30KKworR0Mz
RGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNSZW5kZXJidWZmZXIoV2ViR0xS
ZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlciB8fCBp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlm
ICghcmVuZGVyYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+
b2JqZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpp
c1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyIHx8IGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJu
IG1fY29udGV4dC0+aXNTaGFkZXIoc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFu
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1
cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKCF0ZXh0dXJlLT5oYXNFdmVyQmVlbkJvdW5k
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzVGV4
dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5saW5lV2lkdGgo
d2lkdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmxpbmtQcm9ncmFt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJsaW5rUHJvZ3JhbSIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgV2ViR0xTaGFkZXIqIHZlcnRl
eFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpW
RVJURVhfU0hBREVSKTsKKyAgICAgICAgV2ViR0xTaGFkZXIqIGZyYWdtZW50U2hhZGVyID0gcHJv
Z3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURF
Uik7CisgICAgICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzVmFsaWQo
KSB8fCAhZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIW1f
Y29udGV4dC0+cHJlY2lzaW9uc01hdGNoKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmpl
Y3RPclplcm8oZnJhZ21lbnRTaGFkZXIpKSB8fCAhbV9jb250ZXh0LT5jaGVja1ZhcnlpbmdzUGFj
a2luZyhvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hh
ZGVyKSkpIHsKKyAgICAgICAgICAgIHByb2dyYW0tPnNldExpbmtTdGF0dXMoZmFsc2UpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+
bGlua1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKKyAgICBwcm9ncmFtLT5pbmNyZWFz
ZUxpbmtDb3VudCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBpeGVs
U3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICAg
ICAgbV91bnBhY2tGbGlwWSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAgICAgIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgor
ICAgICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9X
RUJHTCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICAgICAgICAgIG1f
dW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFyYW0p
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgZm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBB
Q0tfQUxJR05NRU5UOgorICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAyIHx8IHBh
cmFtID09IDQgfHwgcGFyYW0gPT0gOCkgeworICAgICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBo
aWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKKyAgICAgICAgICAgICAgICBtX3BhY2tBbGln
bm1lbnQgPSBwYXJhbTsKKyAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
UEFDS19BTElHTk1FTlQ6CisgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQgPSBwYXJh
bTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
Zm9yIGFsaWdubWVudCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQg
dW5pdHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAvLyBEdWUgdG8gV2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMsIGl0IGlzIG5v
dCBwb3NzaWJsZSB0bworICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhlIFdlYkdMIEFQ
SS4KKyAgICBBU1NFUlQoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOworICAgIC8vIFZhbGlkYXRl
IGlucHV0IHBhcmFtZXRlcnMuCisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFkUGl4ZWxzIiwg
Im5vIGRlc3RpbmF0aW9uIEFycmF5QnVmZmVyVmlldyIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQ
SEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4
ZWxzIiwgImludmFsaWQgZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEgfHwgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJyZWFkUGl4ZWxzIiwgImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJR05FRF9CWVRF
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gVmFsaWRhdGUgYXJyYXkgdHlwZSBh
Z2FpbnN0IHBpeGVsIHR5cGUuCisgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlw
ZVVpbnQ4KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50
OEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciogcmVhc29u
ID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCks
ICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJyZWFk
UGl4ZWxzIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBDYWxjdWxh
dGUgYXJyYXkgc2l6ZSwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FMSUdOTUVO
VC4KKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzUmVxdWlyZWQgPSAwOworICAgIHVuc2lnbmVkIHBh
ZGRpbmcgPSAwOworICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsKKyAgICAg
ICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZv
cm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1Jl
cXVpcmVkLCAmcGFkZGluZyk7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAicmVh
ZFBpeGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVx
dWlyZWQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBs
YXJnZSBlbm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIHZvaWQqIGRh
dGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CisgICAgCisgICAgeworICAgICAgICBTY29wZWRE
cmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9y
dGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlYWRuUGl4ZWxz
RVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5ieXRlTGVuZ3Ro
KCksIGRhdGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPnJlYWRQaXhl
bHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICB9CisgICAg
CisjaWYgT1MoREFSV0lOKQorICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgLy8g
d2UgaGF2ZW4ndCBjb21wdXRlZCBwYWRkaW5nCisgICAgICAgIG1fY29udGV4dC0+Y29tcHV0ZUlt
YWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1l
bnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICAvLyBGSVhNRTogcmVtb3Zl
IHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xFUyBkcml2
ZXIgYnVnCisgICAgLy8gb24gUUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMgb2ZmLCBy
ZWFkUGl4ZWxzIHNob3VsZAorICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgor
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0
dHJpYnV0ZXMoKS5hbHBoYSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKTsKKyAgICAgICAgZm9yIChHQzNEc2l6
ZWkgaXkgPSAwOyBpeSA8IGhlaWdodDsgKytpeSkgeworICAgICAgICAgICAgZm9yIChHQzNEc2l6
ZWkgaXggPSAwOyBpeCA8IHdpZHRoOyArK2l4KSB7CisgICAgICAgICAgICAgICAgcGl4ZWxzWzNd
ID0gMjU1OworICAgICAgICAgICAgICAgIHBpeGVscyArPSA0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcGl4ZWxzICs9IHBhZGRpbmc7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIo
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NvbnRleHQtPnJlbGVhc2VTaGFkZXJDb21waWxlcigpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJi
dWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwg
Im5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
ICghdmFsaWRhdGVTaXplKCJyZW5kZXJidWZmZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9JTkRFWDg6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0I4X0FMUEhB
OF9FWFQ6CisgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0I4
X0FMUEhBOF9FWFQgJiYgIW1fZXh0c1JHQikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2Ui
LCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgIG1fcmVuZGVyYnVm
ZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0cnVlKTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5k
aW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgICAgICBpZiAoaXNEZXB0aFN0ZW5j
aWxTdXBwb3J0ZWQoKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFn
ZSh0YXJnZXQsIEV4dGVuc2lvbnMzRDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7
CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
KyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKGlzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkKCkpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFs
Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
InJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFsdWUsIEdD
M0Rib29sZWFuIGludmVydCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52
ZXJ0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzY2lzc29yKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghdmFsaWRhdGVTaXplKCJzY2lzc29yIiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBz
aGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoInNoYWRlclNvdXJjZSIsIHNoYWRlcikpCisgICAgICAgIHJldHVy
bjsKKyAgICBTdHJpbmcgc3RyaW5nV2l0aG91dENvbW1lbnRzID0gU3RyaXBDb21tZW50cyhzdHJp
bmcpLnJlc3VsdCgpOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoInNoYWRlclNvdXJjZSIsIHN0
cmluZ1dpdGhvdXRDb21tZW50cykpCisgICAgICAgIHJldHVybjsKKyAgICBzaGFkZXItPnNldFNv
dXJjZShzdHJpbmcpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG9iamVjdE9yWmVybyhz
aGFkZXIpLCBzdHJpbmdXaXRob3V0Q29tbWVudHMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNE
dWludCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jIiwgZnVu
YykpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOworICAgIG1f
c3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsK
KyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAgIG1fY29udGV4dC0+c3RlbmNp
bEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdD
M0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0
ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAo
ZmFjZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0FORF9CQUNLOgorICAg
ICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOworICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFj
ayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOworICAgICAgICBtX3N0
ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUk9OVDoKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAg
ICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9
IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCAiaW52YWxpZCBmYWNl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1Nl
cGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9zdGVuY2lsTWFzayA9
IG1hc2s7CisgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOworICAgIG1fY29udGV4dC0+c3Rl
bmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2gg
KGZhY2UpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKKyAg
ICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7CisgICAgICAgIG1fc3RlbmNpbE1hc2tCYWNrID0g
bWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6
CisgICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1h
c2s7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1NlcGFyYXRl
IiwgImludmFsaWQgZmFjZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4
dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWws
IEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBh
c3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxPcFNlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51
bSB6cGFzcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9jb250ZXh0LT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFp
bCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdl
MkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVy
cm9ycyByZXR1cm5lZC4KKyAgICBlYyA9IDA7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBBU1NF
UlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdl
MkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSkpOworICAgIEFTU0VSVCh0ZXgpOworICAgIEFTU0VSVCghbGV2ZWwgfHwg
IVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKTsKKyAgICBpZiAoIXBpeGVscykg
eworICAgICAgICAvLyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5HTCBpbXBsZW1lbnRhdGlvbiBjbGVh
cnMgdGV4dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMgdGhlcmVmb3JlIHRydWUuCisgICAg
ICAgIC8vIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGlmIHRoZXkgYXJlIHVzaW5nIEFOR0xF
X2RlcHRoX3RleHR1cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVzCisgICAgICAgIC8vIGNhbiBub3Qg
YmUgY2xlYXJlZCB3aXRoIHRleEltYWdlMkQgYW5kIG11c3QgYmUgY2xlYXJlZCBieSBiaW5kaW5n
IHRvIGFuIGZibyBhbmQgY2FsbGluZworICAgICAgICAvLyBjbGVhci4KKyAgICAgICAgaWYgKGlz
UmVzb3VyY2VTYWZlKCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBudWxscHRyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBib29sIHN1Y2NlZWQg
PSBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1fdW5w
YWNrQWxpZ25tZW50KTsKKyAgICAgICAgICAgIGlmICghc3VjY2VlZCkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodmFsaWRh
dGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSk7CisgICAg
ICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgICAg
IG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0
LCB0eXBlLCBwaXhlbHMpOworICAgICAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAgICAgLy8gVGhlIHRleEltYWdlMkQgZnVuY3Rp
b24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRh
IGZvciB0aGlzIGxldmVsLgorICAgICAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJnZXQsIGxl
dmVsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICB0ZXgtPnNl
dExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
dHlwZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRElt
cGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRy
YWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwg
bV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7
CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJ
bWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0
cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNvbnN0IHZv
aWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKKyAg
ICAKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5n
ICYmICFmbGlwWSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxE
YXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFn
ZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGlt
YWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInRleEltYWdlMkQiLCAicGFja0ltYWdlIGVycm9yIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEp
CisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFD
S19BTElHTk1FTlQsIDEpOworICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwgZWMpOwor
ICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdu
bWVudCk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhG
dW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5
cGUgZnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwg
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCkKK3sKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBm
dW5jdGlvblR5cGUsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGZ1bmN0aW9u
TmFtZSwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vdFRleFN1YkltYWdlMkQpIHsK
KyAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQp
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gRm9yIFNvdXJj
ZUFycmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVUZXhGdW5jRGF0YSgpIHdvdWxkIGhh
bmRsZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJsZVRleEZvcm1hdAorICAgICAgICAv
LyBieSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3IGlzIG51bGwgb3Igbm90LgorICAg
ICAgICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZpZXcpIHsKKyAgICAgICAg
ICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9y
bWF0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVNp
emUoZnVuY3Rpb25OYW1lLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwg
Y2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KKyAgICAgICAgaWYgKHhvZmZzZXQgKyB3
aWR0aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJiYWQgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQs
IGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwg
bGV2ZWwpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2Ui
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGV4
dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8IHRleHR1
cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5
QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwg
bGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsQWxsb3dlZCkK
KyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdl
MkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0
dXJuOworICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBwaXhlbHMtPmJhc2VBZGRyZXNzKCkgOiAw
OworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5nZVVucGFja0Fs
aWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RU
ZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cERhdGEpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGF0YSA9
IHRlbXBEYXRhLmRhdGEoKTsKKyAgICAgICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKKyAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Cisg
ICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEsIGVj
KTsKKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0Fs
aWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFw
aXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQs
IFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+
d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGJvb2wgbmVlZENvbnZl
cnNpb24gPSB0cnVlOworICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBv
ZiBmb3JtYXQgUkdCQTguCisgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGlu
YXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlw
IG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KKyAgICBpZiAoIW1fdW5wYWNr
RmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAg
aWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1f
dW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
cGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7Cisg
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25t
ZW50KTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
ZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSogaW1hZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IGRldmljZVNjYWxlRmFjdG9yKQoreworICAgIEludFNpemUgc2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKKyAgICBzaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBJbWFnZUJ1ZmZlciog
YnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOworICAgIGlmICgh
YnVmKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRf
T0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50
KCksIGltYWdlLT5zaXplKCkpOworICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCks
IHNpemUpOworICAgIGJ1Zi0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2Uo
SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVs
ZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0
ZXhJbWFnZTJEIiwgaW1hZ2UsIGVjKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JS
ZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NW
R0ltYWdlKCkpCisgICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihp
bWFnZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7
CisgICAgCisgICAgaWYgKCFpbWFnZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJ
bWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZv
clJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6
Okh0bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBl
Yyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleEltYWdlMkQiLCBjYW52YXMsIGVjKSB8fCAh
dmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRN
TENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBjYW52YXMtPndp
ZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1
cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICAvLyBJZiBwb3NzaWJs
ZSwgY29weSBmcm9tIHRoZSBjYW52YXMgZWxlbWVudCBkaXJlY3RseSB0byB0aGUgdGV4dHVyZQor
ICAgIC8vIHZpYSB0aGUgR1BVLCB3aXRob3V0IGEgcmVhZC1iYWNrIHRvIHN5c3RlbSBtZW1vcnku
CisgICAgLy8KKyAgICAvLyBGSVhNRTogcmVzdHJpY3Rpb24gb2YgKFJHQiB8fCBSR0JBKS9VTlNJ
R05FRF9CWVRFIHNob3VsZCBiZSBsaWZ0ZWQgd2hlbgorICAgIC8vIEltYWdlQnVmZmVyOjpjb3B5
VG9QbGF0Zm9ybVRleHR1cmUgaW1wbGVtZW50YXRpb25zIGFyZSBmdWxseSBmdW5jdGlvbmFsLgor
ICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQgJiYgdGV4dHVy
ZSAmJiB0eXBlID09IHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkKKyAgICAgICAgJiYg
KGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSkgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSkgeworICAgICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKyAg
ICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250
ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgIHRleHR1cmUtPnNl
dExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgp
LCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMt
PmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAgIHRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdl
dCgpLCBlYyk7CisgICAgZWxzZQorICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdy
YXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK1Bhc3NSZWZQdHI8
SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZpZGVvRnJhbWVUb0ltYWdlKEhUTUxW
aWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdTdG9yZUNvcHksIEV4
Y2VwdGlvbkNvZGUmKQoreworICAgIEludFNpemUgc2l6ZSh2aWRlby0+dmlkZW9XaWR0aCgpLCB2
aWRlby0+dmlkZW9IZWlnaHQoKSk7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVk
SW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleElt
YWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisgICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OworICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUgdGV4dHVyZSBjb3B5IGlu
c3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgorICAgIHZpZGVvLT5wYWludEN1cnJlbnRGcmFtZUluQ29u
dGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOworICAgIHJldHVybiBidWYtPmNvcHlJbWFn
ZShiYWNraW5nU3RvcmVDb3B5KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4SW1hZ2UyRCIsIHZp
ZGVvLCBlYykKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRl
eFN1YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwg
Zm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEdvIHRo
cm91Z2ggdGhlIGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3aXRob3V0
IGEgcmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KKyAgICAvLyBPdGhlcndp
c2UsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgU1cgcGF0aC4KKyAgICAvLyBGSVhN
RTogVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3JtYXQgc2hvdWQgYmUg
UkdCIG9yIFJHQkEsCisgICAgLy8gdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBhbmQgbGV2
ZWwgc2hvdWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBXZWJH
TFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwg
dGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0g
dGFyZ2V0ICYmIHRleHR1cmUKKyAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKKyAgICAgICAgJiYg
dHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAmJiAodGV4
dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgJiYg
IWxldmVsKSB7CisgICAgICAgIGlmICh2aWRlby0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGxldmVsLCB0eXBlLCBp
bnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkg
eworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgdHlw
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8g
Tm9ybWFsIHB1cmUgU1cgcGF0aC4KKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFt
ZVRvSW1hZ2UodmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBlYyk7Cisg
ICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHRleEltYWdlMkRJbXBsKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFw
aGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIGVjKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQgcGFyYW1mLCBHQzNEaW50IHBhcmFtaSwgYm9vbCBpc0Zsb2F0KQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1
cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFBhcmFtZXRlciIsIHRhcmdldCwg
ZmFsc2UpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChwbmFt
ZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgorICAgICAgICBpZiAoKGlzRmxv
YXQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFt
ZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtZiAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkVQRUFUKQorICAgICAgICAgICAgfHwgKCFpc0Zsb2F0ICYmIHBhcmFt
aSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJFUEVBVCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIi
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0
dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYworICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFu
aXNvdHJvcGljKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyLCBF
WFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoaXNGbG9hdCkgeworICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmYocG5h
bWUsIHBhcmFtZik7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBu
YW1lLCBwYXJhbWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRleC0+c2V0UGFyYW1ldGVyaShw
bmFtZSwgcGFyYW1pKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwg
cG5hbWUsIHBhcmFtaSk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZs
b2F0IHBhcmFtKQoreworICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBwYXJhbSwgMCwg
dHJ1ZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4UGFyYW1ldGVy
aShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAg
IHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCAwLCBwYXJhbSwgZmFsc2UpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8v
IEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCisgICAgZWMgPSAw
OworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBBU1NFUlQodmFsaWRhdGVUZXhG
dW5jUGFyYW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2
ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlKSk7CisgICAgQVNTRVJU
KHZhbGlkYXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpKTsKKyAgICBB
U1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCkp
OworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3Vi
SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCh4b2Zm
c2V0ICsgd2lkdGgpID49IDApOworICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdodCkgPj0gMCk7
CisgICAgQVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhvZmZzZXQgKyB3
aWR0aCkpOworICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSA+PSAoeW9m
ZnNldCArIGhlaWdodCkpOworICAgIEFTU0VSVCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdl
dCwgbGV2ZWwpID09IGZvcm1hdCk7CisgICAgQVNTRVJUKHRleC0+Z2V0VHlwZSh0YXJnZXQsIGxl
dmVsKSA9PSB0eXBlKTsKKyAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkRJbXBs
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBH
cmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlw
WSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9
IDA7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6Oklt
YWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5
QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PTkUpOyAgCisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBp
bWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBj
b25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRh
KCk7CisgICAgCisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CisgICAgaWYgKHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURv
Tm90aGluZyAmJiAhZmxpcFkpCisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAg
ZWxzZSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFn
ZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1h
dCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdo
dCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkg
eworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50
ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIGZv
cm1hdCwgdHlwZSwgIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0
YSwgZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRh
KCJ0ZXhTdWJJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzLCBOdWxsTm90QWxsb3dlZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3Vi
SW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBs
ZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlv
ZmZzZXQpKQorICAgICAgICByZXR1cm47CisgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFk
ZHJlc3MoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CisgICAgYm9vbCBjaGFuZ2VV
bnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICBpZiAoZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8
fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5l
eHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlbXBEYXRhKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7CisgICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9
IHRydWU7CisgICAgfQorICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IDEpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOworICAgIGlmIChjaGFu
Z2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBp
eGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwg
U291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsICBwaXhlbHMtPndpZHRoKCks
IHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBib29s
IG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBp
cyBhbHdheXMgb2YgZm9ybWF0IFJHQkE4LgorICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVk
IGlmIGRlc3RpbmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBh
bmQgbm8gRmxpcCBvciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYg
KGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEpCisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7
CisgICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0
LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0g
MSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgMSk7CisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCBmb3Jt
YXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+
ZGF0YSgpLCBlYyk7CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VF
bGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgi
dGV4U3ViSW1hZ2UyRCIsIGltYWdlLCBlYykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdl
Rm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+
aXNTVkdJbWFnZSgpKQorICAgICAgICBpbWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZm
ZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCks
IDEpOworICAgIAorICAgIGlmICghaW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygi
dGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRh
cmdldCwgbGV2ZWwsIGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVu
ZGVyLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZWMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0
ZXhTdWJJbWFnZTJEIiwgY2FudmFzLCBlYykKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygi
dGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LCB0
YXJnZXQsIGxldmVsLCBmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwg
MCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRh
KCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMp
OworICAgIGVsc2UKKyAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIGVjKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhU
TUxWaWRlb0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCB2aWRlbywgZWMpCisgICAgICAgIHx8ICF2
YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1M
VmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCks
IHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVv
RnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMp
OworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICB0ZXhTdWJJbWFnZTJESW1w
bCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdl
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMWYiLCAibG9jYXRpb24gbm90IGZvciBj
dXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9j
YXRpb24sIHYsIHNpemUsIDEpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0
LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplLCB2KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9j
YXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0o
KSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xaSIsICJsb2NhdGlvbiBu
b3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGlmICgobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8y
RCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSX0NVQkUp
ICYmIHggPj0gKGludCltX3RleHR1cmVVbml0cy5zaXplKCkpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWkiLCAi
aW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2
LCAxKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChsb2NhdGlvbi0+dHlwZSgpID09
IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdi0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKHYtPmRhdGEoKVtp
XSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNpemUoKSkpIHsKKyAgICAgICAg
ICAgICAgICBMT0coV2ViR0wsICJUZXh0dXJlIHVuaXQgc2l6ZT0lenUsIHZbJWRdPSVkLiBMb2Nh
dGlvbiB0eXBlID0gJTA0WC4iLCBtX3RleHR1cmVVbml0cy5zaXplKCksIGksIHYtPmRhdGEoKVtp
XSwgbG9jYXRpb24tPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQg
dGV4dHVyZSB1bml0Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCksIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlv
biwgdiwgc2l6ZSwgMSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24t
PnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlw
ZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSX0NVQkUpIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKTsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoKChHQzNEaW50Kil2KVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4
dHVyZVVuaXRzLnNpemUoKSkpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0
ZXh0dXJlIHVuaXQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCBzaXplLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
ZmxvYXQgeCwgR0MzRGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24p
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0yZiIsICJsb2NhdGlvbiBub3QgZm9y
IGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1f
Y29udGV4dC0+dW5pZm9ybTJmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwg
diwgMikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgpKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3Jt
MmZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
bV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMiwgdik7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJpKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
InVuaWZvcm0yaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTJpKGxvY2F0aW9u
LT5sb2NhdGlvbigpLCB4LCB5KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJB
cnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKCJ1bmlmb3JtMml2IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5n
dGgoKSAvIDIsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24t
PmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9u
LT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2YiLCAi
bG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
eCwgeSwgeik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlm
b3JtM2Z2IiwgbG9jYXRpb24sIHYsIDMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9j
b250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDMs
IHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9y
bTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgc2l6ZSAvIDMsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEaW50IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRp
b24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAh
PSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zaSIsICJsb2NhdGlvbiBub3Qg
Zm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IG1fY29udGV4dC0+dW5pZm9ybTNpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2l2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRp
b24sIHYsIDMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3Jt
M2l2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZv
cm0zaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHks
IEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2Nh
dGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTRmIiwgImxvY2F0aW9uIG5v
dCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgbV9jb250ZXh0LT51bmlmb3JtNGYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00ZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRmdiIs
IGxvY2F0aW9uLCB2LCA0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+
dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRh
KCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00ZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNp
emUgLyA0LCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
NGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9j
YXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0o
KSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00aSIsICJsb2NhdGlvbiBu
b3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG1fY29udGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGl2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2Iiwg
bG9jYXRpb24sIHYsIDQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51
bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHYtPmRhdGEo
KSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBz
aXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMo
InVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUg
LyA0LCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0
cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYsIDQpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHRyYW5z
cG9zZSwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZv
cm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA0KSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgc2l6ZSAvIDQsIHRyYW5zcG9zZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZv
cm1NYXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA5KSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
di0+bGVuZ3RoKCkgLyA5LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1N
YXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwg
diwgc2l6ZSwgOSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRy
aXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA5LCB0cmFuc3Bvc2UsIHYpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZs
b2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1N
YXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwg
diwgMTYpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDE2LCB0cmFuc3Bvc2UsIHYtPmRh
dGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJp
eDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRy
YW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2
IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgMTYpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXpl
IC8gMTYsIHRyYW5zcG9zZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hl
Y2tPYmplY3RUb0JlQm91bmQoInVzZVByb2dyYW0iLCBwcm9ncmFtLCBkZWxldGVkKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAgICBwcm9ncmFtID0gMDsKKyAgICBp
ZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVzZVBy
b2dyYW0iLCAicHJvZ3JhbSBub3QgdmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAobV9jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7CisgICAgICAgIGlmIChtX2N1cnJl
bnRQcm9ncmFtKQorICAgICAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+b25EZXRhY2hlZChncmFw
aGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgbV9jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07Cisg
ICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOworICAg
ICAgICBpZiAocHJvZ3JhbSkKKyAgICAgICAgICAgIHByb2dyYW0tPm9uQXR0YWNoZWQoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJ2YWxpZGF0ZVByb2dyYW0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVy
dGV4QXR0cmliMWYiLCBpbmRleCwgMSwgdjAsIDAuMGYsIDAuMGYsIDEuMGYpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRl
eCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0
cmliMWZ2IiwgaW5kZXgsIHYsIDEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6
ZWkgc2l6ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGlu
ZGV4LCB2LCBzaXplLCAxKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEp
Cit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjJmIiwgaW5kZXgsIDIsIHYw
LCB2MSwgMC4wZiwgMS4wZik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCit7CisgICAg
dmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgMik7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAgIHZlcnRleEF0dHJp
YmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIHNpemUsIDIpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIHZlcnRl
eEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZiIsIGluZGV4LCAzLCB2MCwgdjEsIHYyLCAxLjBm
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZnYo
R0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdklt
cGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCAzKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhB
dHRyaWIzZnYiLCBpbmRleCwgdiwgc2l6ZSwgMyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwg
R0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sKKyAgICB2ZXJ0ZXhB
dHRyaWJmSW1wbCgidmVydGV4QXR0cmliNGYiLCBpbmRleCwgNCwgdjAsIHYxLCB2MiwgdjMpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjRmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgi
dmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIDQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJp
YjRmdiIsIGluZGV4LCB2LCBzaXplLCA0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUs
IEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUs
IGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW52YWxpZCB0
eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVy
dGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW5kZXggb3V0IG9mIHJh
bmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHNpemUgPCAxIHx8IHNpemUg
PiA0IHx8IHN0cmlkZSA8IDAgfHwgc3RyaWRlID4gMjU1IHx8IG9mZnNldCA8IDApIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2
ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImJhZCBzaXplLCBzdHJpZGUgb3Igb2Zmc2V0Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXIpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAidmVydGV4QXR0cmliUG9pbnRlciIsICJubyBib3VuZCBBUlJBWV9CVUZGRVIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBlbGVtZW50
cyB0aGUgYm91bmQgYnVmZmVyIGNhbiBob2xkLCBnaXZlbiB0aGUgb2Zmc2V0LCBzaXplLCB0eXBl
IGFuZCBzdHJpZGUKKyAgICB1bnNpZ25lZCB0eXBlU2l6ZSA9IHNpemVJbkJ5dGVzKHR5cGUpOwor
ICAgIGlmICghdHlwZVNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW52YWxpZCB0
eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKChzdHJpZGUgJSB0eXBlU2l6
ZSkgfHwgKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkgJSB0eXBlU2l6ZSkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zmc2V0IG5vdCB2YWxpZCBm
b3IgdHlwZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RzaXplaSBieXRlc1Bl
ckVsZW1lbnQgPSBzaXplICogdHlwZVNpemU7CisgICAgCisgICAgbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgYnl0ZXNQZXJFbGVtZW50LCBzaXpl
LCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNl
dCksIG1fYm91bmRBcnJheUJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2lu
dGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXRpY19jYXN0PEdD
M0RpbnRwdHI+KG9mZnNldCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTaXplKCJ2aWV3cG9ydCIsIHdpZHRoLCBoZWlnaHQp
KQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT52aWV3cG9ydCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmb3JjZUxvc3RD
b250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAibG9zZUNvbnRl
eHQiLCAiY29udGV4dCBhbHJlYWR5IGxvc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHRHcm91cC0+bG9zZUNvbnRleHRHcm91cChtb2RlKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dExvc3QgPSB0cnVl
OworICAgIG1fY29udGV4dExvc3RNb2RlID0gbW9kZTsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBS
ZWFsTG9zdENvbnRleHQpIHsKKyAgICAgICAgLy8gSW5mb3JtIHRoZSBlbWJlZGRlciB0aGF0IGEg
bG9zdCBjb250ZXh0IHdhcyByZWNlaXZlZC4gSW4gcmVzcG9uc2UsIHRoZSBlbWJlZGRlciBtaWdo
dAorICAgICAgICAvLyBkZWNpZGUgdG8gdGFrZSBhY3Rpb24gc3VjaCBhcyBhc2tpbmcgdGhlIHVz
ZXIgZm9yIHBlcm1pc3Npb24gdG8gdXNlIFdlYkdMIGFnYWluLgorICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1l
LT5sb2FkZXIoKS5jbGllbnQoKS5kaWRMb3NlV2ViR0xDb250ZXh0KG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkpOworICAgIH0KKyAgICAKKyAg
ICBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisgICAgCisgICAgaWYgKG1fZHJhd2luZ0J1
ZmZlcikgeworICAgICAgICAvLyBNYWtlIGFic29sdXRlbHkgc3VyZSB3ZSBkbyBub3QgcmVmZXIg
dG8gYW4gYWxyZWFkeS1kZWxldGVkIHRleHR1cmUgb3IgZnJhbWVidWZmZXIuCisgICAgICAgIG1f
ZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZygwKTsKKyAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7CisgICAgfQorICAgIAorICAgIC8vIFRo
ZXJlIGlzIG5vIGRpcmVjdCB3YXkgdG8gY2xlYXIgZXJyb3JzIGZyb20gYSBHTCBpbXBsZW1lbnRh
dGlvbiBhbmQKKyAgICAvLyBsb29waW5nIHVudGlsIGdldEVycm9yKCkgYmVjb21lcyBOT19FUlJP
UiBtaWdodCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGlmCisgICAgLy8gdGhlIGRyaXZlciBvciBj
b250ZXh0IGltcGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4gU28sIGxvb3AgYSByZWFzb25hYmx5Cisg
ICAgLy8gbGFyZ2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFueSBleGlzdGluZyBlcnJvcnMu
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBpZiAobV9jb250
ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgZGlzcGxheSA9
IChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgPyBEaXNwbGF5SW5Db25zb2xlOiBEb250RGlzcGxh
eUluQ29uc29sZTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6Q09O
VEVYVF9MT1NUX1dFQkdMLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBsb3N0IiwgZGlzcGxheSk7
CisgICAgCisgICAgLy8gRG9uJ3QgYWxsb3cgcmVzdG9yYXRpb24gdW5sZXNzIHRoZSBjb250ZXh0
IGxvc3QgZXZlbnQgaGFzIGJvdGggYmVlbgorICAgIC8vIGRpc3BhdGNoZWQgYW5kIGl0cyBkZWZh
dWx0IGJlaGF2aW9yIHByZXZlbnRlZC4KKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZmFsc2U7Cisg
ICAgCisgICAgLy8gQWx3YXlzIGRlZmVyIHRoZSBkaXNwYXRjaCBvZiB0aGUgY29udGV4dCBsb3N0
IGV2ZW50LCB0byBpbXBsZW1lbnQKKyAgICAvLyB0aGUgc3BlYyBiZWhhdmlvciBvZiBxdWV1ZWlu
ZyBhIHRhc2suCisgICAgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lci5zdGFydE9uZVNo
b3QoMCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VSZXN0b3Jl
Q29udGV4dCgpCit7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCBub3QgbG9zdCIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmICghbV9yZXN0b3JlQWxsb3dlZCkgeworICAgICAgICBpZiAo
bV9jb250ZXh0TG9zdE1vZGUgPT0gU3ludGhldGljTG9zdENvbnRleHQpCisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJy
ZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IHJlc3RvcmF0aW9uIG5vdCBhbGxvd2VkIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFtX3Jlc3RvcmVUaW1lci5pc0FjdGl2
ZSgpKQorICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK1BsYXRm
b3JtTGF5ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBsYXRmb3JtTGF5ZXIoKSBjb25z
dAoreworICAgIHJldHVybiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lS
ZXNvbHV0aW9uKSA/IG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpIDogMDsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZW1vdmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZU9iamVjdChv
YmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZFNoYXJlZE9i
amVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1Bv
bGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBU1NFUlQoIWlzQ29u
dGV4dExvc3QoKSk7CisgICAgbV9jb250ZXh0R3JvdXAtPmFkZE9iamVjdChvYmplY3QpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlbW92ZUNvbnRleHRPYmplY3QoV2Vi
R0xDb250ZXh0T2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dE9iamVjdHMucmVt
b3ZlKG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkQ29u
dGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAobV9pc1Bl
bmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJU
KCFpc0NvbnRleHRMb3N0KCkpOworICAgIG1fY29udGV4dE9iamVjdHMuYWRkKG9iamVjdCk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGV0YWNoQW5kUmVtb3ZlQWxsT2Jq
ZWN0cygpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIHdoaWxlIChtX2NvbnRleHRPYmplY3RzLnNpemUoKSA+IDApIHsK
KyAgICAgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPjo6aXRlcmF0b3IgaXQgPSBtX2Nv
bnRleHRPYmplY3RzLmJlZ2luKCk7CisgICAgICAgICgqaXQpLT5kZXRhY2hDb250ZXh0KCk7Cisg
ICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omhhc1BlbmRpbmdBY3Rp
dml0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnN0b3AoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdCgpICYmICFt
X2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKKyAgICAgICAgZm9yY2VMb3N0Q29udGV4dChT
eW50aGV0aWNMb3N0Q29udGV4dCk7CisgICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgp
OworICAgIH0KK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dEJvb2xlYW5QYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7CisgICAgR0MzRGJvb2xlYW4gdmFs
dWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsICZ2YWx1ZSk7CisgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOworfQorCitXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm9vbGVhbkFycmF5UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfV1JJVEVNQVNLKSB7CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oMCwgMCk7CisgICAgfQorICAgIEdDM0Rib29sZWFuIHZhbHVl
WzRdID0gezB9OworICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKKyAg
ICBib29sIGJvb2xWYWx1ZVs0XTsKKyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgNDsgKytpaSkK
KyAgICAgICAgYm9vbFZhbHVlW2lpXSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2lpXSk7Cisg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29sVmFsdWUsIDQpOworfQorCitXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5h
bWUpCit7CisgICAgR0MzRGZsb2F0IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEZsb2F0
dihwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKK30KKwor
V2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEludFBhcmFtZXRlcihH
QzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8odmFs
dWUpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5z
aWduZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7CisgICAgR0MzRGludCB2YWx1ZSA9
IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOworfQorCitXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0V2ViR0xGbG9hdEFycmF5UGFy
YW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RmbG9hdCB2YWx1ZVs0XSA9IHswfTsK
KyAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFsdWUpOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfUkFOR0U6CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgorICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgp
KTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFdlYkdM
SW50QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7CisgICAgR0MzRGludCB2YWx1ZVs0
XSA9IHswfTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CisgICAg
dW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVM6CisgICAgICAgIGxlbmd0aCA9IDI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgorICAgICAgICBsZW5ndGggPSA0
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIH0KKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1
ZSwgbGVuZ3RoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2hlY2tU
ZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgYm9vbCBwcmVwYXJl
VG9EcmF3KQoreworICAgIGJvb2wgcmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7CisgICAgV2ViR0xU
ZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uRmxhZyBleHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8V2Vi
R0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uRmxhZz4oKG1fb2VzVGV4dHVyZUZsb2F0TGluZWFy
ID8gV2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uRmxvYXRMaW5lYXJFbmFibGVkIDogMCkg
fCAobV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyID8gV2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0
ZW5zaW9uSGFsZkZsb2F0TGluZWFyRW5hYmxlZCA6IDApKTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGlpID0gMDsgaWkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraWkpIHsKKyAgICAgICAg
aWYgKChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0
c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMp
KQorICAgICAgICAgICAgfHwgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRp
bmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNl
QmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKSkgeworICAgICAgICAgICAgaWYgKGlpICE9IG1fYWN0
aXZlVGV4dHVyZVVuaXQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1
cmUoaWkpOworICAgICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IHRydWU7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHJlc2V0QWN0aXZlVW5pdCkgeworICAgICAgICAgICAgICAgIG1fY29u
dGV4dC0+YWN0aXZlVGV4dHVyZShpaSk7CisgICAgICAgICAgICAgICAgcmVzZXRBY3RpdmVVbml0
ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleDJE
OworICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXhDdWJlTWFwOworICAgICAgICAgICAgaWYg
KHByZXBhcmVUb0RyYXcpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbXNnKFN0cmluZygidGV4
dHVyZSBib3VuZCB0byB0ZXh0dXJlIHVuaXQgIikgKyBTdHJpbmc6Om51bWJlcihpaSkKKyAgICAg
ICAgICAgICAgICAgICAgKyAiIGlzIG5vdCByZW5kZXJhYmxlLiBJdCBtYXliZSBub24tcG93ZXIt
b2YtMiBhbmQgaGF2ZSBpbmNvbXBhdGlibGUgdGV4dHVyZSBmaWx0ZXJpbmcgb3IgaXMgbm90ICd0
ZXh0dXJlIGNvbXBsZXRlJywiCisgICAgICAgICAgICAgICAgICAgICsgIiBvciBpdCBpcyBhIGZs
b2F0L2hhbGYtZmxvYXQgdHlwZSB3aXRoIGxpbmVhciBmaWx0ZXJpbmcgYW5kIHdpdGhvdXQgdGhl
IHJlbGV2YW50IGZsb2F0L2hhbGYtZmxvYXQgbGluZWFyIGV4dGVuc2lvbiBlbmFibGVkLiIpOwor
ICAgICAgICAgICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGZ1bmN0aW9uTmFtZSwgbXNn
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIHRleDJEID0gbV9ibGFja1RleHR1cmUy
RC5nZXQoKTsKKyAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV9ibGFja1RleHR1cmVDdWJl
TWFwLmdldCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0ZXgyRCA9
IG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOworICAgICAgICAgICAg
ICAgIHRleEN1YmVNYXAgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5n
LmdldCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lp
XS50ZXh0dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5n
LT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCisgICAgICAgICAgICAgICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0
T3JaZXJvKHRleDJEKSk7CisgICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1
cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5k
aW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCisgICAgICAgICAgICAgICAg
bV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UCwgb2JqZWN0T3JaZXJvKHRleEN1YmVNYXApKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
cmVzZXRBY3RpdmVVbml0KQorICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUobV9hY3Rp
dmVUZXh0dXJlVW5pdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3Jl
YXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJsYWNr
W10gPSB7MCwgMCwgMCwgMjU1fTsKKyAgICBtX2JsYWNrVGV4dHVyZTJEID0gY3JlYXRlVGV4dHVy
ZSgpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fYmxhY2tUZXh0dXJlMkQtPm9iamVjdCgpKTsKKyAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
KTsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSBjcmVhdGVUZXh0dXJlKCk7CisgICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwg
bV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29u
dGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ksIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNr
KTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+dGV4
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChH
QzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpCit7
CisgICAgdW5zaWduZWQgbmVlZCA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5
Rm9ybWF0KHRleEludGVybmFsRm9ybWF0KTsKKyAgICB1bnNpZ25lZCBoYXZlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3JtYXQpOworICAg
IHJldHVybiAobmVlZCAmIGhhdmUpID09IG5lZWQ7Cit9CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpCit7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3Qo
KSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlckZv
cm1hdCgpOworICAgIGlmIChtX2F0dHJpYnV0ZXMuYWxwaGEpCisgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsK
K30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJvdW5kRnJhbWVidWZmZXJX
aWR0aCgpCit7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5n
ZXRDb2xvckJ1ZmZlcldpZHRoKCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJh
d2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVi
dWZmZXJTaXplKCkud2lkdGgoKTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKQoreworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJIZWlnaHQoKTsKKyAgICByZXR1cm4g
bV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBtX2Nv
bnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7Cit9CisKK1dlYkdM
VGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXh0dXJlQmluZGlu
Zyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhF
bnVtc0ZvckN1YmVNYXApCit7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gbnVsbHB0cjsK
KyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQ6CisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVV
bml0XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAg
ICAgaWYgKCF1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVV
bml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgIGlmICh1c2VT
aXhFbnVtc0ZvckN1YmVNYXApIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVy
ZSB0YXJnZXQiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAg
ICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJl
Q3ViZU1hcEJpbmRpbmcuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJu
byB0ZXh0dXJlIik7CisgICAgcmV0dXJuIHRleHR1cmU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGNvbnN0IHVuc2lnbmVkIG1heFdl
YkdMTG9jYXRpb25MZW5ndGggPSAyNTY7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IG1heFdl
YkdMTG9jYXRpb25MZW5ndGgpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGxlbmd0aCA+
IDI1NiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU2l6ZShjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KQoreworICAgIGlmICh4IDwg
MCB8fCB5IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic2l6ZSA8IDAiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Ry
aW5nLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZUNoYXJhY3RlcihzdHJp
bmdbaV0pKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic3RyaW5nIG5vdCBBU0NJSSIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0Zv
cm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FM
UEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NP
TVBPTkVOVDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRleHR1cmUpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGggdGV4dHVyZSBmb3JtYXRzIG5vdCBlbmFibGVk
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9F
WFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgorICAgIGRlZmF1bHQ6
CisgICAgICAgIGlmICgoZm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQgfHwgZm9ybWF0
ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQpCisgICAgICAgICAgICAmJiBtX2V4dHNS
R0IpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJl
IGZvcm1hdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgaWYgKG1fb2VzVGV4
dHVyZUZsb2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUhhbGZG
bG9hdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1
cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgor
ICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyBWZXJpZnkgdGhh
dCB0aGUgY29tYmluYXRpb24gb2YgZm9ybWF0IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KKyAgICBz
d2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBl
IGZvciBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OlNSR0JfRVhUOgorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpIQUxGX0ZMT0FUX09FUykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHR5cGUgZm9yIFJHQiBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKKyAgICAgICAgaWYgKHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQKKyAgICAgICAgICAg
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEKKyAg
ICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUCisgICAgICAgICAg
ICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIFJHQkEgZm9ybWF0Iik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgorICAgICAgICBpZiAoIW1fd2Vi
Z2xEZXB0aFRleHR1cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBE
RVBUSF9DT01QT05FTlQgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlQKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIERF
UFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CisgICAgICAgIGlmICghbV93ZWJnbERlcHRo
VGV4dHVyZSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERFUFRIX1NU
RU5DSUwgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0
XzgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBUSF9T
VEVOQ0lMIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChsZXZlbCA+IDApIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2ZWwg
bXVzdCBiZSAwIGZvciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNMZXZlbChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkK
K3sKKyAgICBpZiAobGV2ZWwgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA8IDAiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAgIGlmIChsZXZlbCA+
PSBtX21heFRleHR1cmVMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91dCBv
ZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhDdWJlTWFwVGV4dHVyZUxl
dmVsKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBjaGVja3MgaWYgbGV2ZWwgaXMgbGVnYWwsIHNvIHdl
IHJldHVybiB0cnVlIGFuZCBkb24ndAorICAgIC8vIGdlbmVyYXRlIElOVkFMSURfRU5VTSBpZiB0
YXJnZXQgaXMgaWxsZWdhbC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKQoreworICAgIC8vIFdlIGFic29sdXRl
bHkgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgZm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgorICAg
IC8vIFRoZSB0ZXhJbWFnZTJEIGVudHJ5IHBvaW50cyB0YWtpbmcgSFRNTEltYWdlLCBldGMuIHdp
bGwgcHJvZHVjZQorICAgIC8vIHRlbXBvcmFyeSBkYXRhIGJhc2VkIG9uIHRoaXMgY29tYmluYXRp
b24sIHNvIGl0IG11c3QgYmUgbGVnYWwuCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRB
bmRUeXBlKGZ1bmN0aW9uTmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkgfHwgIXZhbGlkYXRlVGV4
RnVuY0xldmVsKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAKKyAgICBHQzNEaW50IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgPSBwb3coMi4w
LCBtX21heFRleHR1cmVMZXZlbCAtIDEgLSBsZXZlbCk7CisgICAgc3dpdGNoICh0YXJnZXQpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAod2lk
dGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsIHx8IGhlaWdodCA+IG1heFRleHR1cmVTaXplRm9y
TGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJh
bmdlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1o6CisgICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gVGV4U3ViSW1hZ2UyRCAmJiB3
aWR0aCAhPSBoZWlnaHQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCAhPSBoZWlnaHQg
Zm9yIGN1YmUgbWFwIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBoZWlnaHQgaGVyZS4gRm9yIHRleEltYWdlIHdpZHRo
ID09IGhlaWdodC4KKyAgICAgICAgLy8gRm9yIHRleFN1YkltYWdlIHRoYXQgd2lsbCBiZSBjaGVj
a2VkIHdoZW4gY2hlY2tpbmcgeW9mZnNldCArIGhlaWdodCBpcyBpbiByYW5nZS4KKyAgICAgICAg
aWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UgZm9yIGN1YmUgbWFwIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoZm9ybWF0ICE9IGludGVybmFsZm9ybWF0KSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0ICE9IGludGVybmFsZm9ybWF0Iik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKGJvcmRlcikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiYm9yZGVyICE9IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBs
ZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE51bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKK3sK
KyAgICBpZiAoIXBpeGVscykgeworICAgICAgICBpZiAoZGlzcG9zaXRpb24gPT0gTnVsbEFsbG93
ZWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVs
cyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghdmFsaWRh
dGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9y
bWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkg
eworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0IEFycmF5
QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlRfNV81XzVfMToKKyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVp
bnQxNikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX1NIT1JUIGJ1
dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQxNkFycmF5Iik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0CisgICAgICAgIGlmIChwaXhlbHMtPmdl
dFR5cGUoKSAhPSBKU0M6OlR5cGVGbG9hdDMyKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
InR5cGUgRkxPQVQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZf
ZmxvYXQKKyAgICAgICAgLy8gQXMgcGVyIHRoZSBzcGVjaWZpY2F0aW9uLCBBcnJheUJ1ZmZlclZp
ZXcgc2hvdWxkIGJlIG51bGwgd2hlbgorICAgICAgICAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
IGlzIGVuYWJsZWQuCisgICAgICAgIGlmIChwaXhlbHMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAidHlwZSBIQUxGX0ZMT0FUX09FUyBidXQgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBOVUxM
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXNSZXF1aXJlZDsKKyAgICBHQzNEZW51bSBlcnJvciA9
IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwg
aGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7CisgICAg
aWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihlcnJvciwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGRpbWVu
c2lvbnMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAocGl4ZWxzLT5i
eXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgaWYgKG1fdW5wYWNr
QWxpZ25tZW50ICE9IDEpIHsKKyAgICAgICAgICAgIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRl
SW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsICZ0b3RhbEJ5
dGVzUmVxdWlyZWQsIDApOworICAgICAgICAgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpID09
IHRvdGFsQnl0ZXNSZXF1aXJlZCkgeworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJy
YXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0IHdpdGggVU5QQUNLX0FMSUdO
TUVOVCA+IDEiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJp
ZyBlbm91Z2ggZm9yIHJlcXVlc3QiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQoreworICAgIHJldHVybiBt
X2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpOworfQorCitib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKQor
eworICAgIGlmICghcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8
IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlc1JlcXVpcmVkID0g
MDsKKyAgICAKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9BVENfUkdCX0FNRDoKKyAgICAgICAgeworICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6
ZSA9IDg7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7CisgICAgICAgIGNvbnN0
IGludCBrQmxvY2tIZWlnaHQgPSA0OworICAgICAgICBpbnQgbnVtQmxvY2tzQWNyb3NzID0gKHdp
ZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOworICAgICAgICBpbnQgbnVtQmxv
Y2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAvIGtCbG9ja0hlaWdodDsKKyAg
ICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51bUJsb2Nrc0Rvd24gKiBr
QmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EOgorICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBIQV9BTUQ6CisgICAg
ICAgIHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSAxNjsKKyAgICAgICAgY29uc3Qg
aW50IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7
CisgICAgICAgIGludCBudW1CbG9ja3NBY3Jvc3MgPSAod2lkdGggKyBrQmxvY2tXaWR0aCAtIDEp
IC8ga0Jsb2NrV2lkdGg7CisgICAgICAgIGludCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtC
bG9ja0hlaWdodCAtIDEpIC8ga0Jsb2NrSGVpZ2h0OworICAgICAgICBieXRlc1JlcXVpcmVkID0g
bnVtQmxvY2tzQWNyb3NzICogbnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BW
UlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9Q
VlJUQ180QlBQVjFfSU1HOgorICAgICAgICB7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXpl
ID0gODsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gODsKKyAgICAgICAgY29uc3Qg
aW50IGtCbG9ja0hlaWdodCA9IDg7CisgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgo
d2lkdGgsIGtCbG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDQg
KyA3KSAvIGtCbG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgorICAgICAgICB7
CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKKyAgICAgICAgY29uc3QgaW50IGtC
bG9ja1dpZHRoID0gMTY7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA4OworICAg
ICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRoLCBrQmxvY2tXaWR0aCkgKiBzdGQ6
Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiAyICsgNykgLyBrQmxvY2tTaXplOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgZm9ybWF0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYg
KHBpeGVscy0+Ynl0ZUxlbmd0aCgpICE9IGJ5dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgImxlbmd0aCBvZiBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGNvcnJlY3QgZm9yIGRpbWVuc2lv
bnMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNz
ZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7CisgICAgICAgIGNvbnN0IEdDM0RzaXplaSBr
QmxvY2tXaWR0aCA9IDQ7CisgICAgICAgIGNvbnN0IEdDM0RzaXplaSBrQmxvY2tIZWlnaHQgPSA0
OworICAgICAgICBjb25zdCBHQzNEaW50IG1heFRleHR1cmVTaXplID0gdGFyZ2V0ID8gbV9tYXhU
ZXh0dXJlU2l6ZSA6IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOworICAgICAgICBjb25zdCBHQzNE
c2l6ZWkgbWF4Q29tcHJlc3NlZERpbWVuc2lvbiA9IG1heFRleHR1cmVTaXplID4+IGxldmVsOwor
ICAgICAgICBib29sIHdpZHRoVmFsaWQgPSAobGV2ZWwgJiYgd2lkdGggPT0gMSkgfHwgKGxldmVs
ICYmIHdpZHRoID09IDIpIHx8ICghKHdpZHRoICUga0Jsb2NrV2lkdGgpICYmIHdpZHRoIDw9IG1h
eENvbXByZXNzZWREaW1lbnNpb24pOworICAgICAgICBib29sIGhlaWdodFZhbGlkID0gKGxldmVs
ICYmIGhlaWdodCA9PSAxKSB8fCAobGV2ZWwgJiYgaGVpZ2h0ID09IDIpIHx8ICghKGhlaWdodCAl
IGtCbG9ja0hlaWdodCkgJiYgaGVpZ2h0IDw9IG1heENvbXByZXNzZWREaW1lbnNpb24pOworICAg
ICAgICBpZiAoIXdpZHRoVmFsaWQgfHwgIWhlaWdodFZhbGlkKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1H
OgorICAgICAgICAvLyBIZWlnaHQgYW5kIHdpZHRoIG11c3QgYmUgcG93ZXJzIG9mIDIuCisgICAg
ICAgIGlmICgod2lkdGggJiAod2lkdGggLSAxKSkgfHwgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9y
IGxldmVsIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRU
ZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwg
V2ViR0xUZXh0dXJlKiB0ZXgpCit7CisgICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAw
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgPCAwIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgorICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogeworICAgICAgICBjb25z
dCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0g
NDsKKyAgICAgICAgaWYgKCh4b2Zmc2V0ICUga0Jsb2NrV2lkdGgpIHx8ICh5b2Zmc2V0ICUga0Js
b2NrSGVpZ2h0KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZz
ZXQgbm90IG11bHRpcGxlIG9mIDQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAod2lkdGggLSB4b2Zmc2V0ID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQs
IGxldmVsKQorICAgICAgICAgICAgfHwgaGVpZ2h0IC0geW9mZnNldCA+IHRleC0+Z2V0SGVpZ2h0
KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMg
b3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rpb25OYW1l
LCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOworICAgIH0KKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOiB7CisgICAg
ICAgIGlmICh4b2Zmc2V0IHx8IHlvZmZzZXQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
eG9mZnNldCBhbmQgeW9mZnNldCBtdXN0IGJlIHplcm8iKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAod2lkdGggIT0gdGV4LT5nZXRXaWR0aCh0YXJn
ZXQsIGxldmVsKQorICAgICAgICAgICAgfHwgaGVpZ2h0ICE9IHRleC0+Z2V0SGVpZ2h0KHRhcmdl
dCwgbGV2ZWwpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgbXVzdCBt
YXRjaCBleGlzdGluZyBsZXZlbCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0
aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKKyAgICB9Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpQT0lOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TElORV9TVFJJUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1A6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VFJJQU5HTEVfU1RSSVA6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVf
RkFOOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBkcmF3IG1v
ZGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUpCit7CisgICAgaWYgKG1fc3RlbmNpbE1hc2sgIT0gbV9zdGVuY2lsTWFza0JhY2sg
fHwgbV9zdGVuY2lsRnVuY1JlZiAhPSBtX3N0ZW5jaWxGdW5jUmVmQmFjayB8fCBtX3N0ZW5jaWxG
dW5jTWFzayAhPSBtX3N0ZW5jaWxGdW5jTWFza0JhY2spIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJmcm9udCBhbmQgYmFjayBzdGVuY2lscyBzZXR0aW5ncyBkbyBub3QgbWF0Y2giKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gZnVuYykKK3sKKyAgICBzd2l0Y2ggKGZ1bmMpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMRVNTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFUVVBTDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpHUkVBVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdF
UVVBTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpOT1RFUVVBTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFdB
WVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgZnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwcmludEdMRXJyb3JUb0NvbnNvbGUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFs
bG93ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAtLW1fbnVtR0xFcnJvcnNUb0NvbnNv
bGVBbGxvd2VkOworICAgIHByaW50V2FybmluZ1RvQ29uc29sZShtZXNzYWdlKTsKKyAgICAKKyAg
ICBpZiAoIW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKQorICAgICAgICBwcmludFdhcm5p
bmdUb0NvbnNvbGUoIldlYkdMOiB0b28gbWFueSBlcnJvcnMsIG5vIG1vcmUgZXJyb3JzIHdpbGwg
YmUgcmVwb3J0ZWQgdG8gdGhlIGNvbnNvbGUgZm9yIHRoaXMgY29udGV4dC4iKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwcmludFdhcm5pbmdUb0NvbnNvbGUoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghY2FudmFzKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
OjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgbWVzc2FnZSk7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0
ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50KQoreworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDA6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RF
TkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBp
ZiAobV93ZWJnbERyYXdCdWZmZXJzCisgICAgICAgICAgICAmJiBhdHRhY2htZW50ID4gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwCisgICAgICAgICAgICAmJiBhdHRhY2htZW50
IDwgc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hN
RU5UMCArIGdldE1heENvbG9yQXR0YWNobWVudHMoKSkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50Iik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGVU5DX0FERDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1NV
QlRSQUNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfUkVWRVJTRV9TVUJUUkFD
VDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUlOX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6TUFYX0VYVDoKKyAgICAgICAgaWYgKChtb2RlID09IEV4dGVuc2lvbnMzRDo6TUlOX0VYVCB8
fCBtb2RlID09IEV4dGVuc2lvbnMzRDo6TUFYX0VYVCkgJiYgIW1fZXh0QmxlbmRNaW5NYXgpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgbW9kZSIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKK3sKKyAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01J
TlVTX0NPTlNUQU5UX0NPTE9SKQorICAgICAgICAmJiAoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpDT05TVEFOVF9BTFBIQSB8fCBkc3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19D
T05TVEFOVF9BTFBIQSkpCisgICAgICAgIHx8ICgoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpD
T05TVEFOVF9DT0xPUiB8fCBkc3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05T
VEFOVF9DT0xPUikKKyAgICAgICAgJiYgKHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RB
TlRfQUxQSEEgfHwgc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRf
QUxQSEEpKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImluY29tcGF0aWJsZSBzcmMgYW5kIGRz
dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ2FwYWJpbGl0eShjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNhcCkKK3sKKyAgICBzd2l0Y2ggKGNhcCkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVTExfRkFDRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9U
RVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVfQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBj
YXBhYmlsaXR5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
RmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICgh
dikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5j
dGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWly
ZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWly
ZWRNaW5TaXplKQoreworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXki
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlm
b3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0
YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCB2b2lkKiB2
LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICByZXR1
cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9u
LCBmYWxzZSwgdiwgc2l6ZSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVk
TWluU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9y
bU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXpl
aSByZXF1aXJlZE1pblNpemUpCit7CisgICAgaWYgKCFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsb2NhdGlvbiBpcyBub3QgZnJvbSBjdXJyZW50IHBy
b2dyYW0iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXYpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaWYgKHRyYW5zcG9zZSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAidHJhbnNwb3NlIG5vdCBG
QUxTRSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChzaXplIDwgcmVx
dWlyZWRNaW5TaXplIHx8IChzaXplICUgcmVxdWlyZWRNaW5TaXplKSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCBzaXplIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK1dlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBXZWJHTEJ1ZmZlciogYnVm
ZmVyID0gMDsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLmdldCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6CisgICAgICAgIGJ1
ZmZlciA9IG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAibm8gYnVmZmVyIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBzd2l0
Y2ggKHVzYWdlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVc6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVc6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXOgorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0K
KyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHVzYWdlIik7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgp
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBpbWFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGNvbnN0IFVSTCYgdXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3Bv
bnNlKCkudXJsKCk7CisgICAgaWYgKHVybC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1
cmwuaXNWYWxpZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2Up
KSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBI
VE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
IWNhbnZhcyB8fCAhY2FudmFzLT5idWZmZXIoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gY2Fu
dmFzIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdvdWxkVGFpbnRP
cmlnaW4oY2FudmFzKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShWSURF
TykKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MVmlkZW9FbGVt
ZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRo
KCkgfHwgIXZpZGVvLT52aWRlb0hlaWdodCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyB2aWRl
byIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3Jp
Z2luKHZpZGVvKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9h
dCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGlu
ZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW5kZXggb3V0
IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gSW4gR0wsIHdlIHNr
aXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KKyAgICBpZiAoaW5kZXggfHwgaXNHTEVT
MkNvbXBsaWFudCgpKSB7CisgICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRTaXplKSB7CisgICAgICAg
IGNhc2UgMToKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWYoaW5kZXgsIHYw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBtX2Nv
bnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Yo
aW5kZXgsIHYwLCB2MSwgdjIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoK
KyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIs
IHYzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIFZlcnRleEF0
dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0cmliVmFsdWVbaW5kZXhdOworICAg
IGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7CisgICAgYXR0cmliVmFsdWUudmFsdWVbMV0gPSB2
MTsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOworICAgIGF0dHJpYlZhbHVlLnZhbHVl
WzNdID0gdjM7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0
cmliZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0
MzJBcnJheSogdiwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2KSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZlcnRl
eEF0dHJpYmZ2SW1wbChmdW5jdGlvbk5hbWUsIGluZGV4LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgp
LCBleHBlY3RlZFNpemUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZl
cnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKHNpemUgPCBleHBlY3RlZFNpemUpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgc2l6ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpbmRl
eCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBv
ZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lw
IHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJD
b21wbGlhbnQoKSkgeworICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBj
YXNlIDE6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgdik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4
LCB2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBt
X2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBt
X3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XTsKKyAgICBhdHRyaWJWYWx1ZS5pbml0VmFsdWUoKTsK
KyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgZXhwZWN0ZWRTaXplOyArK2lpKQorICAgICAgICBh
dHRyaWJWYWx1ZS52YWx1ZVtpaV0gPSB2W2lpXTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjppbml0VmVydGV4QXR0cmliMCgpCit7CisgICAgV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICAKKyAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmplY3Qo
KSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZh
bHNlLCAwLCAwKTsKKyAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSLCAwKTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOwor
ICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOworICAgIG1fdmVydGV4QXR0cmliMEJ1
ZmZlclZhbHVlWzBdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXSA9
IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBmOworICAgIG1f
dmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKKyAgICBtX2ZvcmNlQXR0cmliMEJ1
ZmZlclJlZmlsbCA9IGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSBmYWxz
ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzaW11bGF0ZVZlcnRleEF0
dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCkKK3sKKyAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlP
YmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOworICAgIGNvbnN0IFZlcnRleEF0dHJpYlZh
bHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0cmliVmFsdWVbMF07CisgICAgaWYgKCFtX2N1
cnJlbnRQcm9ncmFtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCB1c2luZ1ZlcnRl
eEF0dHJpYjAgPSBtX2N1cnJlbnRQcm9ncmFtLT5pc1VzaW5nVmVydGV4QXR0cmliMCgpOworICAg
IGlmICh1c2luZ1ZlcnRleEF0dHJpYjApCisgICAgICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmUgPSB0cnVlOworICAgIGlmIChzdGF0ZS5lbmFibGVkICYmIHVzaW5nVmVydGV4QXR0cmliMCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdXNpbmdWZXJ0ZXhBdHRyaWIwICYmICFt
X3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV92
ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IHRydWU7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci0+
b2JqZWN0KCkpOworICAgIEdDM0RzaXplaXB0ciBidWZmZXJEYXRhU2l6ZSA9IChudW1WZXJ0ZXgg
KyAxKSAqIDQgKiBzaXplb2YoR0MzRGZsb2F0KTsKKyAgICBpZiAoYnVmZmVyRGF0YVNpemUgPiBt
X3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplKSB7CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVyRGF0
YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBidWZmZXJEYXRhU2l6ZSwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVyk7CisgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1
ZmZlclNpemUgPSBidWZmZXJEYXRhU2l6ZTsKKyAgICAgICAgbV9mb3JjZUF0dHJpYjBCdWZmZXJS
ZWZpbGwgPSB0cnVlOworICAgIH0KKyAgICBpZiAodXNpbmdWZXJ0ZXhBdHRyaWIwCisgICAgICAg
ICYmIChtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbAorICAgICAgICAgICAgfHwgYXR0cmliVmFs
dWUudmFsdWVbMF0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0KKyAgICAgICAgICAg
IHx8IGF0dHJpYlZhbHVlLnZhbHVlWzFdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFd
CisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVsyXSAhPSBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVsyXQorICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbM10gIT0gbV92
ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10pKSB7CisgICAgICAgICAgICBhdXRvIGJ1ZmZlckRh
dGEgPSBzdGQ6Om1ha2VfdW5pcXVlPEdDM0RmbG9hdFtdPigobnVtVmVydGV4ICsgMSkgKiA0KTsK
KyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyAr
K2lpKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDRdID0gYXR0cmliVmFsdWUu
dmFsdWVbMF07CisgICAgICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAxXSA9IGF0dHJp
YlZhbHVlLnZhbHVlWzFdOworICAgICAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0g
PSBhdHRyaWJWYWx1ZS52YWx1ZVsyXTsKKyAgICAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICog
NCArIDNdID0gYXR0cmliVmFsdWUudmFsdWVbM107CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOwor
ICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0gPSBhdHRyaWJWYWx1ZS52
YWx1ZVsxXTsKKyAgICAgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gYXR0
cmliVmFsdWUudmFsdWVbMl07CisgICAgICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOworICAgICAgICAgICAgbV9mb3JjZUF0dHJpYjBC
dWZmZXJSZWZpbGwgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0
YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBidWZmZXJEYXRhU2l6ZSwgYnVm
ZmVyRGF0YS5nZXQoKSk7CisgICAgICAgIH0KKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBv
aW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXN0b3JlU3Rh
dGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpCit7CisgICAgY29uc3QgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICBpZiAoc3RhdGUuYnVm
ZmVyQmluZGluZyAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG9iamVjdE9yWmVy
byhzdGF0ZS5idWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliUG9pbnRlcigwLCBzdGF0ZS5zaXplLCBzdGF0ZS50eXBlLCBzdGF0ZS5ub3JtYWxpemVk
LCBzdGF0ZS5vcmlnaW5hbFN0cmlkZSwgc3RhdGUub2Zmc2V0KTsKKyAgICB9CisgICAgbV9jb250
ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG9iamVjdE9y
WmVybyhtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCkpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQoreworICAgIFJlZlB0cjxX
ZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0cnVlLCAiIik7CisgICAgY2Fu
dmFzKCktPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIG1fcmVzdG9yZUFsbG93ZWQgPSBldmVu
dC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFs
TG9zdENvbnRleHQgJiYgbV9yZXN0b3JlQWxsb3dlZCkKKyAgICAgICAgbV9yZXN0b3JlVGltZXIu
c3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1h
eWJlUmVzdG9yZUNvbnRleHQoKQoreworICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKKyAgICBp
ZiAoIW1fY29udGV4dExvc3QpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUaGUgcmVu
ZGVyaW5nIGNvbnRleHQgaXMgbm90IHJlc3RvcmVkIHVubGVzcyB0aGUgZGVmYXVsdCBiZWhhdmlv
ciBvZiB0aGUKKyAgICAvLyB3ZWJnbGNvbnRleHRsb3N0IGV2ZW50IHdhcyBwcmV2ZW50ZWQgZWFy
bGllci4KKyAgICAvLworICAgIC8vIEJlY2F1c2Ugb2YgdGhlIHdheSBtX3Jlc3RvcmVUaW1lciBp
cyBzZXQgdXAgZm9yIHJlYWwgdnMuIHN5bnRoZXRpYyBsb3N0CisgICAgLy8gY29udGV4dCBldmVu
dHMsIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB0ZXN0IHNob3J0LWNpcmN1aXRp
bmcKKyAgICAvLyB0aGUgcmV0cnkgbG9vcCBmb3IgcmVhbCBjb250ZXh0IGxvc3QgZXZlbnRzLgor
ICAgIGlmICghbV9yZXN0b3JlQWxsb3dlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlu
dCBjb250ZXh0TG9zdFJlYXNvbiA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCk7CisgICAgCisgICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNv
bikgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgorICAgICAgICAvLyBU
aGUgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5CisgICAg
ICAgIC8vIHN1cHBvcnQgR0xfQVJCX3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRp
dmVseSwgdGhlCisgICAgICAgIC8vIFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQg
aGF2ZSBiZWVuIHVzZWQgdG8gZm9yY2UKKyAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9B
UkI6CisgICAgICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYg
dGhpcyBjb250ZXh0IHdhcworICAgICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhp
Y3MgcmVzZXQuCisgICAgICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wg
Y29udGVudCBvbiB0aGUgcGFnZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5v
dCByZXN0b3JpbmcgdGhlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpJTk5PQ0VOVF9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gQWx3YXlz
IGFsbG93IHRoZSBjb250ZXh0IHRvIGJlIHJlc3RvcmVkLgorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6VU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8g
V2Fybi4gSWRlYWxseSwgcHJvbXB0IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCisg
ICAgICAgIC8vIGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBo
aWNzIGNhcmQgdG8KKyAgICAgICAgLy8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3
YW50IHRvIGNvbnRpbnVlIHJ1bm5pbmcKKyAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYg
dGhleSBzYXkgInllcyIgc2hvdWxkIHdlIHN0YXJ0CisgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8g
cmVzdG9yZSB0aGUgY29udGV4dC4KKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJO
SU5HOiBXZWJHTCBjb250ZW50IG9uIHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFw
aGljcyBjYXJkIHRvIHJlc2V0Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBG
cmFtZSogZnJhbWUgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS5jbGll
bnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Cisg
ICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisgICAgU2Nyb2xsVmlldyogcm9vdCA9IHZp
ZXctPnJvb3QoKTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVybjsKKyAgICBIb3N0V2lu
ZG93KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdpbmRvdygpOworICAgIGlmICghaG9zdFdpbmRv
dykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKG1fYXR0cmlidXRlcywgaG9zdFdpbmRv
dykpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUg
PT0gUmVhbExvc3RDb250ZXh0KQorICAgICAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVT
aG90KHNlY29uZHNCZXR3ZWVuUmVzdG9yZUF0dGVtcHRzKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgLy8gVGhpcyBsaWtlbHkgc2hvdWxkbid0IGhhcHBlbiBidXQgaXMgdGhlIGJlc3Qgd2F5
IHRvIHJlcG9ydCBpdCB0byB0aGUgV2ViR0wgYXBwLgorICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiIiwgImVycm9yIHJl
c3RvcmluZyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8g
Q29uc3RydWN0IGEgbmV3IGRyYXdpbmcgYnVmZmVyIHdpdGggdGhlIG5ldyBHcmFwaGljc0NvbnRl
eHQzRC4KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+ZGlzY2FyZFJlc291cmNlcygpOworICAgICAgICBEcmF3aW5nQnVmZmVyOjpQcmVzZXJ2ZURy
YXdpbmdCdWZmZXIgcHJlc2VydmUgPSBtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVy
ID8gRHJhd2luZ0J1ZmZlcjo6UHJlc2VydmUgOiBEcmF3aW5nQnVmZmVyOjpEaXNjYXJkOworICAg
ICAgICBEcmF3aW5nQnVmZmVyOjpBbHBoYVJlcXVpcmVtZW50IGFscGhhID0gbV9hdHRyaWJ1dGVz
LmFscGhhID8gRHJhd2luZ0J1ZmZlcjo6QWxwaGEgOiBEcmF3aW5nQnVmZmVyOjpPcGFxdWU7Cisg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShjb250ZXh0Lmdl
dCgpLCBtX2RyYXdpbmdCdWZmZXItPnNpemUoKSwgcHJlc2VydmUsIGFscGhhKTsKKyAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfQorICAgIAorICAgIG1fY29udGV4dCA9IGNv
bnRleHQ7CisgICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOworICAgIHNldHVwRmxhZ3MoKTsKKyAg
ICBpbml0aWFsaXplTmV3Q29udGV4dCgpOworICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KFdl
YkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dHJlc3RvcmVk
RXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOworfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmIHRleHQpIGNvbnN0Cit7CisgICAg
aWYgKHRleHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBXVEY6OmVtcHR5U3RyaW5nKCk7Cisg
ICAgcmV0dXJuIHRleHQ7Cit9CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdl
QnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5KQorICAgIDogbV9i
dWZmZXJzKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPihj
YXBhY2l0eSkpCisgICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5KQoreworfQorCitJbWFnZUJ1ZmZl
ciogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAw
OyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1
ZmZlcnNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYnVmKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBidWJibGVUb0Zyb250KGkpOworICAgICAgICByZXR1cm4gYnVmOworICAg
IH0KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUsIDEpOworICAgIGlmICghdGVtcCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgaSA9IHN0ZDo6bWluKG1fY2FwYWNpdHkgLSAxLCBpKTsKKyAgICBtX2J1ZmZl
cnNbaV0gPSBXVEY6Om1vdmUodGVtcCk7CisgICAgCisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1f
YnVmZmVyc1tpXS5nZXQoKTsKKyAgICBidWJibGVUb0Zyb250KGkpOworICAgIHJldHVybiBidWY7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNo
ZTo6YnViYmxlVG9Gcm9udChpbnQgaWR4KQoreworICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAw
OyAtLWkpCisgICAgICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKK30KKwor
bmFtZXNwYWNlIHsKKyAgICAKKyAgICBTdHJpbmcgR2V0RXJyb3JTdHJpbmcoR0MzRGVudW0gZXJy
b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTToKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9F
TlVNIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRToKKyAg
ICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9WQUxVRSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OOgorICAgICAgICAgICAgcmV0dXJuICJJTlZBTElE
X09QRVJBVElPTiI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1P
Ulk6CisgICAgICAgICAgICByZXR1cm4gIk9VVF9PRl9NRU1PUlkiOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKKyAgICAgICAg
ICAgIHJldHVybiAiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0w6CisgICAgICAgICAgICByZXR1
cm4gIkNPTlRFWFRfTE9TVF9XRUJHTCI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoIldlYkdMIEVSUk9SKCUwNHgpIiwgZXJyb3IpOworICAgICAg
ICB9CisgICAgfQorICAgIAorfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVE
aXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5KQoreworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlICYmIGRpc3BsYXkgPT0gRGlzcGxheUluQ29uc29sZSkgeworICAgICAgICBTdHJp
bmcgc3RyID0gU3RyaW5nKCJXZWJHTDogIikgKyBHZXRFcnJvclN0cmluZyhlcnJvcikgKyAgIjog
IiArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7Cisg
ICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIpOworICAgIH0KKyAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKK30KKworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCit7CisgICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJv
cnNUb0NvbnNvbGUpIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsg
U3RyaW5nKGZ1bmN0aW9uTmFtZSkgKyAiOiAiICsgU3RyaW5nKGRlc2NyaXB0aW9uKTsKKyAgICAg
ICAgcHJpbnRHTEVycm9yVG9Db25zb2xlKHN0cik7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmFwcGx5U3RlbmNpbFRlc3QoKQoreworICAgIGJvb2wgaGF2ZVN0
ZW5jaWxCdWZmZXIgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcp
CisgICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmhhc1N0
ZW5jaWxCdWZmZXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXM+IGF0dHJpYnV0ZXMgPSBnZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgICAgICBo
YXZlU3RlbmNpbEJ1ZmZlciA9IGF0dHJpYnV0ZXMtPnN0ZW5jaWwoKTsKKyAgICB9CisgICAgZW5h
YmxlT3JEaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QsCisgICAgICAgICAg
ICAgICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgJiYgaGF2ZVN0ZW5jaWxCdWZmZXIpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBj
YXBhYmlsaXR5LCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgICAgICBtX2Nv
bnRleHQtPmVuYWJsZShjYXBhYmlsaXR5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+
ZGlzYWJsZShjYXBhYmlsaXR5KTsKK30KKworSW50U2l6ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpjbGFtcGVkQ2FudmFzU2l6ZSgpCit7CisgICAgcmV0dXJuIEludFNpemUoY2xhbXAoY2Fu
dmFzKCktPndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBdKSwKKyAgICAgICAgICAgICAg
ICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzFdKSk7
Cit9CisKK0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0TWF4RHJhd0J1ZmZl
cnMoKQoreworICAgIGlmICghc3VwcG9ydHNEcmF3QnVmZmVycygpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoIW1fbWF4RHJhd0J1ZmZlcnMpCisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1fbWF4RHJhd0J1ZmZl
cnMpOworICAgIGlmICghbV9tYXhDb2xvckF0dGFjaG1lbnRzKQorICAgICAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1f
bWF4Q29sb3JBdHRhY2htZW50cyk7CisgICAgLy8gV0VCR0xfZHJhd19idWZmZXJzIHJlcXVpcmVz
IE1BWF9DT0xPUl9BVFRBQ0hNRU5UUyA+PSBNQVhfRFJBV19CVUZGRVJTLgorICAgIHJldHVybiBz
dGQ6Om1pbihtX21heERyYXdCdWZmZXJzLCBtX21heENvbG9yQXR0YWNobWVudHMpOworfQorCitH
QzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldE1heENvbG9yQXR0YWNobWVudHMo
KQoreworICAgIGlmICghc3VwcG9ydHNEcmF3QnVmZmVycygpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJ
bnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENv
bG9yQXR0YWNobWVudHMpOworICAgIHJldHVybiBtX21heENvbG9yQXR0YWNobWVudHM7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVu
dW0gYnVmKQoreworICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcigpCit7CisgICAg
RXhjZXB0aW9uQ29kZSBlYzsKKyAgICBiaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSwgZWMpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKCkKK3sK
KyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJl
MkRCaW5kaW5nLmdldCgpLCBlYyk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6c3VwcG9ydHNEcmF3QnVmZmVycygpCit7CisgICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xS
ZXF1aXJlbWVudHNDaGVja2VkKSB7CisgICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVt
ZW50c0NoZWNrZWQgPSB0cnVlOworICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2Vi
R0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKHRoaXMpOworICAgIH0KKyAgICByZXR1cm4gbV9kcmF3
QnVmZmVyc1N1cHBvcnRlZDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
cmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBpZiAoIXByaW1jb3VudCkgewor
ICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0FycmF5cygiZHJhd0FycmF5c0luc3RhbmNlZCIsIG1v
ZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxh
dGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCisgICAgICAgIHZlcnRl
eEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAt
IDEpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJl
Q29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgdHJ1ZSk7CisgICAgCisgICAgbV9j
b250ZXh0LT5kcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50
KTsKKyAgICAKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2lt
dWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlv
bigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJl
Q29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgZmFsc2UpOworICAgIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdF
bGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgaWYg
KCFwcmltY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgIGlm
ICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIG1vZGUsIGNv
dW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzLCBwcmltY291bnQpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICAKKyAgICBib29sIHZlcnRl
eEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkg
eworICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQorICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFy
cmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwg
bnVtRWxlbWVudHMpOworICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVW
ZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKKyAgICB9CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0
cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0lu
c3RhbmNlZCIsIHRydWUpOworICAgIAorICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzSW5zdGFu
Y2VkKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBw
cmltY291bnQpOworICAgIAorICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0
dHJpYjBTaW11bGF0ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBT
aW11bGF0aW9uKCk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVj
a1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIGZhbHNlKTsKKyAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29y
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4
QXR0cmliRGl2aXNvciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJp
YkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliRGl2
aXNvcihpbmRleCwgZGl2aXNvcik7Cit9CisKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlX2gKKyNkZWZpbmUgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZV9oCisKKyNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUg
IldlYkdMR2V0SW5mby5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxydW50aW1lL0Zs
b2F0MzJBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSW50MzJBcnJheS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFO
R0xFSW5zdGFuY2VkQXJyYXlzOworY2xhc3MgRVhUQmxlbmRNaW5NYXg7CitjbGFzcyBFWFRUZXh0
dXJlRmlsdGVyQW5pc290cm9waWM7CitjbGFzcyBFWFRTaGFkZXJUZXh0dXJlTE9EOworY2xhc3Mg
RVhUc1JHQjsKK2NsYXNzIEVYVEZyYWdEZXB0aDsKK2NsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7Citj
bGFzcyBIVE1MVmlkZW9FbGVtZW50OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbWFnZURh
dGE7CitjbGFzcyBJbnRTaXplOworY2xhc3MgT0VTU3RhbmRhcmREZXJpdmF0aXZlczsKK2NsYXNz
IE9FU1RleHR1cmVGbG9hdDsKK2NsYXNzIE9FU1RleHR1cmVGbG9hdExpbmVhcjsKK2NsYXNzIE9F
U1RleHR1cmVIYWxmRmxvYXQ7CitjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyOworY2xh
c3MgT0VTVmVydGV4QXJyYXlPYmplY3Q7CitjbGFzcyBPRVNFbGVtZW50SW5kZXhVaW50OworY2xh
c3MgV2ViR0xBY3RpdmVJbmZvOworY2xhc3MgV2ViR0xCdWZmZXI7CitjbGFzcyBXZWJHTENvbnRl
eHRHcm91cDsKK2NsYXNzIFdlYkdMQ29udGV4dE9iamVjdDsKK2NsYXNzIFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEM7CitjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM7CitjbGFzcyBX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzsKK2NsYXNzIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM7
CitjbGFzcyBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOworY2xhc3MgV2ViR0xEZWJ1Z1NoYWRlcnM7
CitjbGFzcyBXZWJHTERlcHRoVGV4dHVyZTsKK2NsYXNzIFdlYkdMRHJhd0J1ZmZlcnM7CitjbGFz
cyBXZWJHTEV4dGVuc2lvbjsKK2NsYXNzIFdlYkdMRnJhbWVidWZmZXI7CitjbGFzcyBXZWJHTExv
c2VDb250ZXh0OworY2xhc3MgV2ViR0xPYmplY3Q7CitjbGFzcyBXZWJHTFByb2dyYW07CitjbGFz
cyBXZWJHTFJlbmRlcmJ1ZmZlcjsKK2NsYXNzIFdlYkdMU2hhZGVyOworY2xhc3MgV2ViR0xTaGFy
ZWRPYmplY3Q7CitjbGFzcyBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDsKK2NsYXNzIFdlYkdM
VGV4dHVyZTsKK2NsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uOworY2xhc3MgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0LCBw
dWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IGNyZWF0ZShIVE1MQ2FudmFzRWxlbWVudCos
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIH5X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKCk7CisKKyNpZiBQTEFURk9STShXSU4pCisvLyBGSVhN
RTogSW1wbGVtZW50IGFjY2VsZXJhdGVkIDNkIGNhbnZhcyBvbiBXaW5kb3dzLgordmlydHVhbCBi
b29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorI2Vs
c2UKK3ZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorI2VuZGlmCisKK2ludCBkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdDsKK2ludCBk
cmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3Q7CisKK3ZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51
bSB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGF0dGFjaFNoYWRlcihXZWJHTFByb2dy
YW0qLCBXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgYmluZEF0dHJpYkxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVm
ZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFy
Z2V0LCBXZWJHTEZyYW1lYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBiaW5kUmVuZGVy
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2Rl
Jik7Cit2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgRXhj
ZXB0aW9uQ29kZSYpOwordm9pZCBibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBn
cmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSk7Cit2b2lkIGJsZW5kRXF1YXRp
b24oR0MzRGVudW0gbW9kZSk7Cit2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBt
b2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpOwordm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2Zh
Y3RvciwgR0MzRGVudW0gZGZhY3Rvcik7Cit2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVt
IHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0
QWxwaGEpOworCit2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6
ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgYnVmZmVyRGF0YShHQzNE
ZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9u
Q29kZSYpOwordm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3
KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBidWZmZXJTdWJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEs
IEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxv
bmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwor
CitHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCk7Cit2b2lk
IGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKK3ZvaWQgY2xlYXJDb2xvcihHQzNEZmxvYXQgcmVk
LCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwordm9p
ZCBjbGVhckRlcHRoKEdDM0RmbG9hdCk7Cit2b2lkIGNsZWFyU3RlbmNpbChHQzNEaW50KTsKK3Zv
aWQgY29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29s
ZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKTsKK3ZvaWQgY29tcGlsZVNoYWRlcihXZWJHTFNo
YWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKKwordm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwordm9pZCBjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZm
ZXJWaWV3KiBkYXRhKTsKKwordm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcik7Cit2
b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworCitQYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PiBjcmVhdGVCdWZmZXIoKTsKK1Bhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gY3JlYXRlRnJh
bWVidWZmZXIoKTsKK1Bhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBjcmVhdGVQcm9ncmFtKCk7CitQ
YXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5kZXJidWZmZXIoKTsKK1Bhc3NS
ZWZQdHI8V2ViR0xTaGFkZXI+IGNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25D
b2RlJik7CitQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOworCit2b2lk
IGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOworCit2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZl
ciopOwordm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7Cit2b2lkIGRl
bGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7Cit2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJH
TFJlbmRlcmJ1ZmZlciopOwordm9pZCBkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqKTsKK3ZvaWQg
ZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKKwordm9pZCBkZXB0aEZ1bmMoR0MzRGVudW0p
Owordm9pZCBkZXB0aE1hc2soR0MzRGJvb2xlYW4pOwordm9pZCBkZXB0aFJhbmdlKEdDM0RmbG9h
dCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpOwordm9pZCBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFt
KiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGRpc2FibGUoR0MzRGVudW0g
Y2FwKTsKK3ZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNl
cHRpb25Db2RlJik7Cit2b2lkIGRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJz
dCwgR0MzRHNpemVpIGNvdW50LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGRyYXdFbGVtZW50cyhH
QzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBv
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKwordm9pZCBlbmFibGUoR0MzRGVudW0gY2FwKTsKK3Zv
aWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUm
KTsKK3ZvaWQgZmluaXNoKCk7Cit2b2lkIGZsdXNoKCk7Cit2b2lkIGZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVu
ZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKK3Zv
aWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSosIEdDM0RpbnQgbGV2ZWwsIEV4
Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOwordm9pZCBnZW5l
cmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpOworCitQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5m
bz4gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGluZGV4LCBFeGNlcHRp
b25Db2RlJik7CitQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5pZm9ybShX
ZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworYm9vbCBnZXRB
dHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+
JiwgRXhjZXB0aW9uQ29kZSYpOworR0MzRGludCBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dy
YW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworV2ViR0xHZXRJbmZvIGdldEJ1ZmZlclBhcmFtZXRl
cihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CitQYXNz
UmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CitH
QzNEZW51bSBnZXRFcnJvcigpOworV2ViR0xFeHRlbnNpb24qIGdldEV4dGVuc2lvbihjb25zdCBT
dHJpbmcmIG5hbWUpOworV2ViR0xHZXRJbmZvIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJik7CitXZWJHTEdldEluZm8gZ2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBu
YW1lLCBFeGNlcHRpb25Db2RlJik7CitXZWJHTEdldEluZm8gZ2V0UHJvZ3JhbVBhcmFtZXRlcihX
ZWJHTFByb2dyYW0qLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworU3RyaW5nIGdl
dFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKK1dlYkdMR2V0
SW5mbyBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYpOworV2ViR0xHZXRJbmZvIGdldFNoYWRlclBhcmFtZXRlcihX
ZWJHTFNoYWRlciosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CitTdHJpbmcgZ2V0
U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NSZWZQdHI8
V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNE
ZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25Db2RlJik7
CitTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwor
VmVjdG9yPFN0cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworV2ViR0xHZXRJbmZvIGdl
dFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJik7CitXZWJHTEdldEluZm8gZ2V0VW5pZm9ybShXZWJHTFByb2dyYW0qLCBjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiosIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NSZWZQdHI8V2ViR0xVbmlm
b3JtTG9jYXRpb24+IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJik7CitXZWJHTEdldEluZm8gZ2V0VmVydGV4QXR0cmliKEdDM0R1
aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworbG9uZyBsb25nIGdl
dFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpOworCit2
b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKTsKK0dDM0Rib29sZWFuIGlz
QnVmZmVyKFdlYkdMQnVmZmVyKik7Citib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKK0dDM0Ri
b29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXApOworR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZl
cihXZWJHTEZyYW1lYnVmZmVyKik7CitHQzNEYm9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9ncmFt
Kik7CitHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOworR0Mz
RGJvb2xlYW4gaXNTaGFkZXIoV2ViR0xTaGFkZXIqKTsKK0dDM0Rib29sZWFuIGlzVGV4dHVyZShX
ZWJHTFRleHR1cmUqKTsKKwordm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKK3ZvaWQgbGlua1By
b2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBwaXhlbFN0b3JlaShH
QzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Cit2b2lkIHBvbHlnb25PZmZzZXQoR0MzRGZs
b2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKTsKK3ZvaWQgcmVhZFBpeGVscyhHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25D
b2RlJik7Cit2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwordm9pZCByZW5kZXJidWZmZXJT
dG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Cit2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RmbG9h
dCB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KTsKK3ZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKK3ZvaWQgc2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwordm9p
ZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7
Cit2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywg
R0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwordm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCk7
Cit2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzayk7
Cit2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0g
enBhc3MpOwordm9pZCBzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBm
YWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpOworCit2b2lkIHRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwK
KyAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLAorICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgQXJyYXlCdWZmZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB0ZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEq
LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25D
b2RlJik7Cit2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2lm
IEVOQUJMRShWSURFTykKK3ZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKKyNlbmRpZgorCit2b2lkIHRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKTsKK3ZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKKwordm9pZCB0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgQXJyYXlCdWZmZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2lmIEVOQUJMRShW
SURFTykKK3ZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlv
bkNvZGUmKTsKKyNlbmRpZgorCit2b2lkIHVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZv
cm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlv
bkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGludCB4LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0xaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJik7Cit2b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1
bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCwgR0MzRGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTJmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYpOwordm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9p
ZCB1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50
IHgsIEdDM0RpbnQgeSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtMml2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYpOwordm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5p
Zm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3Jt
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJik7Cit2b2lkIHVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEV4Y2VwdGlvbkNvZGUmKTsKK3Zv
aWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMy
QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9h
dCB3LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKK3Zv
aWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTRp
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RpbnQgeiwgR0MzRGludCB3LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm00
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBF
eGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYp
Owordm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRp
b25Db2RlJik7Cit2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybU1hdHJp
eDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRy
YW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUm
KTsKK3ZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworCit2b2lkIHVzZVByb2dyYW0oV2ViR0xQ
cm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9n
cmFtKiwgRXhjZXB0aW9uQ29kZSYpOworCit2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgeCk7Cit2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwg
RmxvYXQzMkFycmF5KiB2YWx1ZXMpOwordm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Cit2b2lkIHZlcnRleEF0dHJp
YjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpOwordm9pZCB2ZXJ0
ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKK3ZvaWQg
dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNp
emVpIHNpemUpOwordm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0
IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Cit2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwordm9pZCB2ZXJ0ZXhBdHRyaWIzZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Cit2b2lk
IHZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHks
IEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdyk7Cit2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwordm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Cit2b2lkIHZl
cnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0g
dHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisKK3Zv
aWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCk7CisKKy8vIFdFQktJVF9sb3NlX2NvbnRleHQgc3VwcG9ydAorZW51bSBMb3N0
Q29udGV4dE1vZGUgeworICAgIC8vIExvc3QgY29udGV4dCBvY2N1cnJlZCBhdCB0aGUgZ3JhcGhp
Y3Mgc3lzdGVtIGxldmVsLgorICAgIFJlYWxMb3N0Q29udGV4dCwKKyAgICAKKyAgICAvLyBMb3N0
IGNvbnRleHQgcHJvdm9rZWQgYnkgV0VCS0lUX2xvc2VfY29udGV4dC4KKyAgICBTeW50aGV0aWNM
b3N0Q29udGV4dAorfTsKK3ZvaWQgZm9yY2VMb3N0Q29udGV4dChMb3N0Q29udGV4dE1vZGUpOwor
dm9pZCBmb3JjZVJlc3RvcmVDb250ZXh0KCk7Cit2b2lkIGxvc2VDb250ZXh0SW1wbChMb3N0Q29u
dGV4dE1vZGUpOworCitHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KK1dlYkdMQ29udGV4dEdyb3VwKiBjb250ZXh0
R3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRHcm91cC5nZXQoKTsgfQordmlydHVhbCBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisKK3ZvaWQgcmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCit2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQo
KTsKK3ZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpIG92ZXJyaWRl
OworUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KCk7CisKK3ZvaWQgcmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7Cit2b2lk
IHJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0Kik7CisKK3Vuc2lnbmVkIGdl
dE1heFZlcnRleEF0dHJpYnMoKSBjb25zdCB7IHJldHVybiBtX21heFZlcnRleEF0dHJpYnM7IH0K
KworLy8gQU5HTEVfaW5zdGFuY2VkX2FycmF5cyBleHRlbnNpb24gZnVuY3Rpb25zLgordm9pZCBk
cmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7Cit2b2lkIGRyYXdFbGVtZW50c0luc3RhbmNl
ZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9u
ZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpOwordm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29y
KEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKTsKKworcHJvdGVjdGVkOgorV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZShIVE1MQ2FudmFzRWxlbWVudCosIEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzKTsKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoSFRNTENhbnZhc0VsZW1l
bnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMpOworCitwcml2YXRlOgorZnJpZW5kIGNsYXNzIFdlYkdMRHJhd0J1ZmZlcnM7Citm
cmllbmQgY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsKK2ZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsK
K2ZyaWVuZCBjbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKK2ZyaWVuZCBjbGFzcyBXZWJHTERl
YnVnU2hhZGVyczsKK2ZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOworZnJp
ZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzsKK2ZyaWVuZCBjbGFzcyBXZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQzsKK2ZyaWVuZCBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRFcnJvck1lc3NhZ2VDYWxsYmFjazsKK2ZyaWVuZCBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTOworCit2b2lkIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cit2b2lkIHNldHVwRmxhZ3Mo
KTsKKworLy8gQWN0aXZlRE9NT2JqZWN0Cit2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5
KCkgY29uc3Qgb3ZlcnJpZGU7Cit2aXJ0dWFsIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwordmlydHVh
bCBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gIldlYkdMUmVuZGVyaW5nQ29udGV4dCI7IH0KKwordm9pZCBhZGRTaGFyZWRPYmplY3QoV2Vi
R0xTaGFyZWRPYmplY3QqKTsKK3ZvaWQgYWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmpl
Y3QqKTsKK3ZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworCit2b2lkIGRlc3Ryb3lH
cmFwaGljc0NvbnRleHQzRCgpOwordm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKKworLy8gUXVl
cnkgd2hldGhlciBpdCBpcyBidWlsdCBvbiB0b3Agb2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVu
dGF0aW9uLgorYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgeyByZXR1cm4gbV9pc0dMRVMyQ29tcGxp
YW50OyB9CisvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gaXMgTlBPVCBzdHJpY3Qu
Citib29sIGlzR0xFUzJOUE9UU3RyaWN0KCkgeyByZXR1cm4gbV9pc0dMRVMyTlBPVFN0cmljdDsg
fQorLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGdlbmVyYXRlcyBlcnJvcnMgb24g
b3V0LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzZXMuCitib29sIGlzRXJyb3JHZW5lcmF0ZWRPbk91
dE9mQm91bmRzQWNjZXNzZXMoKSB7IHJldHVybiBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91
bmRzQWNjZXNzZXM7IH0KKy8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0aWFs
aXplcyB0ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCitib29sIGlzUmVzb3VyY2VTYWZlKCkg
eyByZXR1cm4gbV9pc1Jlc291cmNlU2FmZTsgfQorLy8gUXVlcnkgaWYgZGVwdGhfc3RlbmNpbCBi
dWZmZXIgaXMgc3VwcG9ydGVkLgorYm9vbCBpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpIHsgcmV0
dXJuIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7IH0KKworLy8gSGVscGVyIHRvIHJldHVybiB0
aGUgc2l6ZSBpbiBieXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBlcworLy8gbGlrZSBHTF9GTE9BVCwg
R0xfSU5ULCBldGMuCit1bnNpZ25lZCBzaXplSW5CeXRlcyhHQzNEZW51bSB0eXBlKTsKKworLy8g
QmFzaWMgdmFsaWRhdGlvbiBvZiBjb3VudCBhbmQgb2Zmc2V0IGFnYWluc3QgbnVtYmVyIG9mIGVs
ZW1lbnRzIGluIGVsZW1lbnQgYXJyYXkgYnVmZmVyCitib29sIHZhbGlkYXRlRWxlbWVudEFycmF5
U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsK
KworLy8gQ29uc2VydmF0aXZlIGJ1dCBxdWljayBpbmRleCB2YWxpZGF0aW9uCitib29sIHZhbGlk
YXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCYgbnVtRWxl
bWVudHNSZXF1aXJlZCk7CisKKy8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlvbiAt
LSBvbmx5IGRvbmUgaWYgY29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCitib29sIHZhbGlkYXRlSW5k
ZXhBcnJheVByZWNpc2UoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRy
IG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpOworYm9vbCB2YWxpZGF0ZVZl
cnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmltaXRpdmVD
b3VudCA9IDApOworCitib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciosIFdlYkdM
T2JqZWN0Kik7CisKK2Jvb2wgdmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNE
c2l6ZWkgcHJpbWNvdW50KTsKK2Jvb2wgdmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHBy
aW1jb3VudCk7CisKKy8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0Lgordm9pZCBh
ZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChHQzNEZW51bSk7CisKK1Bhc3NSZWZQdHI8SW1hZ2U+
IGRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UqLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBk
ZXZpY2VTY2FsZUZhY3Rvcik7CisKKyNpZiBFTkFCTEUoVklERU8pCitQYXNzUmVmUHRyPEltYWdl
PiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgQmFja2luZ1N0b3JlQ29weSwg
RXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKK1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9j
b250ZXh0OworUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBtX2NvbnRleHRHcm91cDsKKworLy8g
T3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBEcmF3aW5nQnVmZmVyLCBpbnN0
ZWFkIG9mIGRpcmVjdGx5CisvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0LgorUmVm
UHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKworLy8gRGlzcGF0Y2hlcyBhIGNv
bnRleHQgbG9zdCBldmVudCBvbmNlIGl0IGlzIGRldGVybWluZWQgdGhhdCBvbmUgaXMgbmVlZGVk
LgorLy8gVGhpcyBpcyB1c2VkIGJvdGggZm9yIHN5bnRoZXRpYyBhbmQgcmVhbCBjb250ZXh0IGxv
c3Nlcy4gRm9yIHJlYWwgb25lcywgaXQncworLy8gbGlrZWx5IHRoYXQgdGhlcmUncyBubyBKYXZh
U2NyaXB0IG9uIHRoZSBzdGFjaywgYnV0IHRoYXQgbWlnaHQgYmUgZGVwZW5kZW50CisvLyBvbiBo
b3cgZXhhY3RseSB0aGUgcGxhdGZvcm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxv
c3QuIEZvciBiZXR0ZXIKKy8vIHBvcnRhYmlsaXR5IHdlIGFsd2F5cyBkZWZlciB0aGUgZGlzcGF0
Y2ggb2YgdGhlIGV2ZW50LgorVGltZXIgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcjsK
K2Jvb2wgbV9yZXN0b3JlQWxsb3dlZDsKK1RpbWVyIG1fcmVzdG9yZVRpbWVyOworCitib29sIG1f
bmVlZHNVcGRhdGU7Citib29sIG1fbWFya2VkQ2FudmFzRGlydHk7CitIYXNoU2V0PFdlYkdMQ29u
dGV4dE9iamVjdCo+IG1fY29udGV4dE9iamVjdHM7CisKKy8vIExpc3Qgb2YgYm91bmQgVkJPJ3Mu
IFVzZWQgdG8gbWFpbnRhaW4gaW5mbyBhYm91dCBzaXplcyBmb3IgQVJSQVlfQlVGRkVSIGFuZCBz
dG9yZWQgdmFsdWVzIGZvciBFTEVNRU5UX0FSUkFZX0JVRkZFUgorUmVmUHRyPFdlYkdMQnVmZmVy
PiBtX2JvdW5kQXJyYXlCdWZmZXI7CisKK1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
PiBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsKK1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTPiBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Q7Cit2b2lkIHNldEJvdW5kVmVydGV4QXJy
YXlPYmplY3QoUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBhcnJheU9iamVj
dCkKK3sKKyAgICBpZiAoYXJyYXlPYmplY3QpCisgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdCA9IGFycmF5T2JqZWN0OworICAgIGVsc2UKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7Cit9CisKK2NsYXNzIFZlcnRleEF0
dHJpYlZhbHVlIHsKK3B1YmxpYzoKKyAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSgpCisgICAgeworICAg
ICAgICBpbml0VmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0VmFsdWUoKQorICAg
IHsKKyAgICAgICAgdmFsdWVbMF0gPSAwLjBmOworICAgICAgICB2YWx1ZVsxXSA9IDAuMGY7Cisg
ICAgICAgIHZhbHVlWzJdID0gMC4wZjsKKyAgICAgICAgdmFsdWVbM10gPSAxLjBmOworICAgIH0K
KyAgICAKKyAgICBHQzNEZmxvYXQgdmFsdWVbNF07Cit9OworVmVjdG9yPFZlcnRleEF0dHJpYlZh
bHVlPiBtX3ZlcnRleEF0dHJpYlZhbHVlOwordW5zaWduZWQgbV9tYXhWZXJ0ZXhBdHRyaWJzOwor
UmVmUHRyPFdlYkdMQnVmZmVyPiBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7Citsb25nIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclNpemU7CitHQzNEZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVb
NF07Citib29sIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsOworYm9vbCBtX3ZlcnRleEF0dHJp
YjBVc2VkQmVmb3JlOworCitSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOwor
UmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG1fZnJhbWVidWZmZXJCaW5kaW5nOworUmVmUHRyPFdl
YkdMUmVuZGVyYnVmZmVyPiBtX3JlbmRlcmJ1ZmZlckJpbmRpbmc7CitzdHJ1Y3QgVGV4dHVyZVVu
aXRTdGF0ZSB7CisgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4dHVyZTJEQmluZGluZzsKKyAg
ICBSZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7Cit9OworVmVjdG9y
PFRleHR1cmVVbml0U3RhdGU+IG1fdGV4dHVyZVVuaXRzOwordW5zaWduZWQgbG9uZyBtX2FjdGl2
ZVRleHR1cmVVbml0OworCitSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZTJEOwor
UmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFja1RleHR1cmVDdWJlTWFwOworCitWZWN0b3I8R0Mz
RGVudW0+IG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOworCisvLyBGaXhlZC1zaXplIGNhY2hl
IG9mIHJldXNhYmxlIGltYWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCitj
bGFzcyBMUlVJbWFnZUJ1ZmZlckNhY2hlIHsKK3B1YmxpYzoKKyAgICBMUlVJbWFnZUJ1ZmZlckNh
Y2hlKGludCBjYXBhY2l0eSk7CisgICAgLy8gVGhlIHBvaW50ZXIgcmV0dXJuZWQgaXMgb3duZWQg
YnkgdGhlIGltYWdlIGJ1ZmZlciBtYXAuCisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKGNv
bnN0IEludFNpemUmIHNpemUpOworcHJpdmF0ZToKKyAgICB2b2lkIGJ1YmJsZVRvRnJvbnQoaW50
IGlkeCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5b
XT4gbV9idWZmZXJzOworICAgIGludCBtX2NhcGFjaXR5OworfTsKK0xSVUltYWdlQnVmZmVyQ2Fj
aGUgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlOworCitHQzNEaW50IG1fbWF4VGV4dHVyZVNpemU7CitH
QzNEaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOworR0MzRGludCBtX21heFJlbmRlcmJ1ZmZl
clNpemU7CitHQzNEaW50IG1fbWF4Vmlld3BvcnREaW1zWzJdOworR0MzRGludCBtX21heFRleHR1
cmVMZXZlbDsKK0dDM0RpbnQgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOworCitHQzNEaW50IG1f
bWF4RHJhd0J1ZmZlcnM7CitHQzNEaW50IG1fbWF4Q29sb3JBdHRhY2htZW50czsKK0dDM0RlbnVt
IG1fYmFja0RyYXdCdWZmZXI7Citib29sIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0No
ZWNrZWQ7Citib29sIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7CisKK0dDM0RpbnQgbV9wYWNrQWxp
Z25tZW50OworR0MzRGludCBtX3VucGFja0FsaWdubWVudDsKK2Jvb2wgbV91bnBhY2tGbGlwWTsK
K2Jvb2wgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhOworR0MzRGVudW0gbV91bnBhY2tDb2xvcnNw
YWNlQ29udmVyc2lvbjsKK2Jvb2wgbV9jb250ZXh0TG9zdDsKK0xvc3RDb250ZXh0TW9kZSBtX2Nv
bnRleHRMb3N0TW9kZTsKK0dyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRl
czsKKworYm9vbCBtX2xheWVyQ2xlYXJlZDsKK0dDM0RmbG9hdCBtX2NsZWFyQ29sb3JbNF07Citi
b29sIG1fc2Npc3NvckVuYWJsZWQ7CitHQzNEZmxvYXQgbV9jbGVhckRlcHRoOworR0MzRGludCBt
X2NsZWFyU3RlbmNpbDsKK0dDM0Rib29sZWFuIG1fY29sb3JNYXNrWzRdOworR0MzRGJvb2xlYW4g
bV9kZXB0aE1hc2s7CisKK2Jvb2wgbV9zdGVuY2lsRW5hYmxlZDsKK0dDM0R1aW50IG1fc3RlbmNp
bE1hc2ssIG1fc3RlbmNpbE1hc2tCYWNrOworR0MzRGludCBtX3N0ZW5jaWxGdW5jUmVmLCBtX3N0
ZW5jaWxGdW5jUmVmQmFjazsgLy8gTm90ZSB0aGF0IHRoZXNlIGFyZSB0aGUgdXNlciBzcGVjaWZp
ZWQgdmFsdWVzLCBub3QgdGhlIGludGVybmFsIGNsYW1wZWQgdmFsdWUuCitHQzNEdWludCBtX3N0
ZW5jaWxGdW5jTWFzaywgbV9zdGVuY2lsRnVuY01hc2tCYWNrOworCitib29sIG1faXNHTEVTMkNv
bXBsaWFudDsKK2Jvb2wgbV9pc0dMRVMyTlBPVFN0cmljdDsKK2Jvb2wgbV9pc0Vycm9yR2VuZXJh
dGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzOworYm9vbCBtX2lzUmVzb3VyY2VTYWZlOworYm9vbCBt
X2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkOworYm9vbCBtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRl
ZDsKKworYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlOworaW50IG1fbnVtR0xFcnJv
cnNUb0NvbnNvbGVBbGxvd2VkOworCisvLyBBIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBjYW4gYmUg
Y3JlYXRlZCBpbiBhIHN0YXRlIHdoZXJlIGl0IGFwcGVhcnMgYXMKKy8vIGEgdmFsaWQgYW5kIGFj
dGl2ZSBjb250ZXh0LCBidXQgd2lsbCBub3QgZXhlY3V0ZSBhbnkgaW1wb3J0YW50IG9wZXJhdGlv
bnMKKy8vIHVudGlsIGl0cyBsb2FkIHBvbGljeSBpcyBjb21wbGV0ZWx5IHJlc29sdmVkLgorYm9v
bCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb247Citib29sIG1faGFzUmVxdWVzdGVkUG9saWN5
UmVzb2x1dGlvbjsKK2Jvb2wgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpOworCisvLyBFbmFibGVk
IGV4dGVuc2lvbiBvYmplY3RzLgorc3RkOjp1bmlxdWVfcHRyPEVYVEZyYWdEZXB0aD4gbV9leHRG
cmFnRGVwdGg7CitzdGQ6OnVuaXF1ZV9wdHI8RVhUQmxlbmRNaW5NYXg+IG1fZXh0QmxlbmRNaW5N
YXg7CitzdGQ6OnVuaXF1ZV9wdHI8RVhUc1JHQj4gbV9leHRzUkdCOworc3RkOjp1bmlxdWVfcHRy
PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWM7CitzdGQ6OnVuaXF1ZV9wdHI8RVhUU2hhZGVyVGV4dHVyZUxPRD4gbV9leHRTaGFkZXJUZXh0
dXJlTE9EOworc3RkOjp1bmlxdWVfcHRyPE9FU1RleHR1cmVGbG9hdD4gbV9vZXNUZXh0dXJlRmxv
YXQ7CitzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVG
bG9hdExpbmVhcjsKK3N0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0PiBtX29lc1Rl
eHR1cmVIYWxmRmxvYXQ7CitzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVh
cj4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyOworc3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXM+IG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlczsKK3N0ZDo6dW5pcXVlX3B0
cjxPRVNWZXJ0ZXhBcnJheU9iamVjdD4gbV9vZXNWZXJ0ZXhBcnJheU9iamVjdDsKK3N0ZDo6dW5p
cXVlX3B0cjxPRVNFbGVtZW50SW5kZXhVaW50PiBtX29lc0VsZW1lbnRJbmRleFVpbnQ7CitzdGQ6
OnVuaXF1ZV9wdHI8V2ViR0xMb3NlQ29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0Oworc3RkOjp1
bmlxdWVfcHRyPFdlYkdMRGVidWdSZW5kZXJlckluZm8+IG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5m
bzsKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHTERlYnVnU2hhZGVycz4gbV93ZWJnbERlYnVnU2hhZGVy
czsKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDPiBtX3dlYmdsQ29t
cHJlc3NlZFRleHR1cmVBVEM7CitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDPiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQzsKK3N0ZDo6dW5pcXVlX3B0cjxX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQzsK
K3N0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVyZT4gbV93ZWJnbERlcHRoVGV4dHVyZTsK
K3N0ZDo6dW5pcXVlX3B0cjxXZWJHTERyYXdCdWZmZXJzPiBtX3dlYmdsRHJhd0J1ZmZlcnM7Citz
dGQ6OnVuaXF1ZV9wdHI8QU5HTEVJbnN0YW5jZWRBcnJheXM+IG1fYW5nbGVJbnN0YW5jZWRBcnJh
eXM7CisKKy8vIEhlbHBlcnMgZm9yIGdldFBhcmFtZXRlciBhbmQgb3RoZXJzCitXZWJHTEdldElu
Zm8gZ2V0Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSk7CitXZWJHTEdldEluZm8gZ2V0Qm9vbGVh
bkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKK1dlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRl
cihHQzNEZW51bSk7CitXZWJHTEdldEluZm8gZ2V0SW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKK1dl
YkdMR2V0SW5mbyBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihHQzNEZW51bSk7CitXZWJHTEdldElu
Zm8gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKK1dlYkdMR2V0SW5mbyBn
ZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKKworLy8gQ2xlYXIgdGhlIGJhY2ti
dWZmZXIgaWYgaXQgd2FzIGNvbXBvc2l0ZWQgc2luY2UgdGhlIGxhc3Qgb3BlcmF0aW9uLgorLy8g
Y2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55IGNsZWFyIHRoYXQgd291bGQg
aGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKKy8vIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0
cnVlIGlmIHRoYXQgY2xlYXIgaXMgbm93IHVubmVjZXNzYXJ5LgorYm9vbCBjbGVhcklmQ29tcG9z
aXRlZChHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0gMCk7CisKKy8vIEhlbHBlciB0byByZXN0b3Jl
IHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1lYnVmZmVyIG1heSBkZXN0cm95Lgordm9pZCBy
ZXN0b3JlU3RhdGVBZnRlckNsZWFyKCk7CisKK3ZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKK3Zv
aWQgdGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSos
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB0ZXhTdWJJbWFnZTJEQmFz
ZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7
Cit2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBi
b29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKKwordm9p
ZCBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOworCit2b2lkIGNy
ZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9y
IGNvcHlUZXh7U3VifUltYWdlLCBjaGVjayB3aGV0aGVyIHRoZSBpbnRlcm5hbGZvcm1hdAorLy8g
YW5kIHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVm
ZmVyIGNvbWJpbmF0aW9uCisvLyBpcyB2YWxpZC4KK2Jvb2wgaXNUZXhJbnRlcm5hbEZvcm1hdENv
bG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChHQzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwgR0Mz
RGVudW0gY29sb3JCdWZmZXJGb3JtYXQpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRo
ZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBmb3JtYXQuCitHQzNEZW51bSBnZXRC
b3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdl
dCB0aGUgYm91bmQgZnJhbWVidWZmZXIncyB3aWR0aC4KK2ludCBnZXRCb3VuZEZyYW1lYnVmZmVy
V2lkdGgoKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZm
ZXIncyBoZWlnaHQuCitpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpOworCisvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmVyaWZ5IGxpbWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5k
IGF0dHJpYnV0ZSBsb2NhdGlvbnMuCitib29sIHZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmKTsKKworLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIGNoZWNrIGlmIHNpemUgaXMgbm9uLW5lZ2F0aXZlLgorLy8gR2VuZXJhdGUgR0wgZXJyb3Ig
YW5kIHJldHVybiBmYWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0
cnVlLgorYm9vbCB2YWxpZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50
IHgsIEdDM0RpbnQgeSk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBhbGwgY2hh
cmFjdGVycyBpbiB0aGUgc3RyaW5nIGJlbG9uZyB0byB0aGUKKy8vIEFTQ0lJIHN1YnNldCBhcyBk
ZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCitib29sIHZhbGlkYXRlU3Ry
aW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJik7CisKKy8vIEhlbHBl
ciBmdW5jdGlvbiB0byBjaGVjayB0YXJnZXQgYW5kIHRleHR1cmUgYm91bmQgdG8gdGhlIHRhcmdl
dC4KKy8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0dXJuIDAgaWYgdGFyZ2V0IGlzIGludmFs
aWQgb3IgdGV4dHVyZSBib3VuZCBpcworLy8gbnVsbC4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHRl
eHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KK1dlYkdMVGV4dHVyZSogdmFsaWRhdGVUZXh0dXJl
QmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1
c2VTaXhFbnVtc0ZvckN1YmVNYXApOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5w
dXQgZm9ybWF0L3R5cGUgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgorLy8gR2Vu
ZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFs
aWQuCitib29sIHZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOwor
CisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgbGV2ZWwgZm9yIGZ1bmN0aW9ucyB7
Y29weX1UZXh7U3VifUltYWdlLgorLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZh
bHNlIGlmIGxldmVsIGlzIGludmFsaWQuCitib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKKwor
ZW51bSBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSB7CisgICAgTm90VGV4U3ViSW1hZ2Uy
RCwKKyAgICBUZXhTdWJJbWFnZTJELAorfTsKKworZW51bSBUZXhGdW5jVmFsaWRhdGlvblNvdXJj
ZVR5cGUgeworICAgIFNvdXJjZUFycmF5QnVmZmVyVmlldywKKyAgICBTb3VyY2VJbWFnZURhdGEs
CisgICAgU291cmNlSFRNTEltYWdlRWxlbWVudCwKKyAgICBTb3VyY2VIVE1MQ2FudmFzRWxlbWVu
dCwKKyAgICBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LAorfTsKKworLy8gSGVscGVyIGZ1bmN0aW9u
IGZvciB0ZXh7U3VifUltYWdlMkQgdG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xl
dmVsL3RhcmdldC93aWR0aC9oZWlnaHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQu
CisvLyBPdGhlcndpc2UsIGl0IHdvdWxkIHJldHVybiBxdWlja2x5IHdpdGhvdXQgZG9pbmcgb3Ro
ZXIgd29yay4KK2Jvb2wgdmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
VGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlw
ZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRHNpemVpIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hl
Y2sgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCisv
LyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUg
aW52YWxpZC4KK2Jvb2wgdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4RnVuY1ZhbGlkYXRp
b25GdW5jdGlvblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKTsK
KworZW51bSBOdWxsRGlzcG9zaXRpb24geworICAgIE51bGxBbGxvd2VkLAorICAgIE51bGxOb3RB
bGxvd2VkCit9OworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZ2l2
ZW4gQXJyYXlCdWZmZXJWaWV3CisvLyBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlu
cyBlbm91Z2ggZGF0YSBmb3IgdGhlIHRleEltYWdlIGNhbGwuCisvLyBHZW5lcmF0ZXMgR0wgZXJy
b3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KK2Jvb2wgdmFs
aWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWws
CisgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywK
KyAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24pOworCisvLyBIZWxwZXIg
ZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBnaXZlbiB0ZXh0dXJlIGZvcm1hdCBpcyBzZXR0YWJsZSBh
cyBpbgorLy8geW91IGNhbiBzdXBwbHkgZGF0YSB0byB0ZXhJbWFnZTJELCBvciBjYWxsIHRleElt
YWdlMkQsIGNvcHlUZXhJbWFnZTJEIGFuZAorLy8gY29weVRleFN1YkltYWdlMkQuCisvLyBHZW5l
cmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgdGhlIGZvcm1hdCBpcyBub3Qgc2V0
dGFibGUuCitib29sIHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBmb3JtYXQpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRh
dGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgaXMgY29ycmVjdCBzaXplCisvLyBmb3IgdGhlIGdp
dmVuIGZvcm1hdCBhbmQgZGltZW5zaW9ucy4KK2Jvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVu
Y0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3
KiBwaXhlbHMpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcgY29tcHJlc3Nl
ZCB0ZXh0dXJlIGZvcm1hdHMuCitib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNE
ZW51bSBmb3JtYXQpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3Nl
ZCB0ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIHZhbGlkIGZvcgorLy8gdGhlIGdpdmVuIGZvcm1hdC4K
K2Jvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOworCisvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIHZhbGlkIGZvcgor
Ly8gdGhlIGdpdmVuIGZvcm1hdC4KK2Jvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5z
aW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBmb3JtYXQsIFdlYkdMVGV4dHVyZSopOworCisvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmFsaWRhdGUgbW9kZSBmb3IgZHJhd3tBcnJheXMvRWxlbWVudHN9LgorYm9vbCB2YWxpZGF0
ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOworCisvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaWYgZnJvbnQvYmFjayBzdGVuY2lsTWFzayBhbmQgc3Rl
bmNpbEZ1bmMgc2V0dGluZ3MgYXJlIHRoZSBzYW1lLgorYm9vbCB2YWxpZGF0ZVN0ZW5jaWxTZXR0
aW5ncyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
dmFsaWRhdGUgc3RlbmNpbCBmdW5jLgorYm9vbCB2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRl
eFBhcmFtZXRlcmYgYW5kIHRleFBhcmFtZXRlcmkuCit2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFt
ZiwgYm9vbCBpc0Zsb2F0KTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50IEdMIGVycm9y
cyB0byBjb25zb2xlLgordm9pZCBwcmludEdMRXJyb3JUb0NvbnNvbGUoY29uc3QgU3RyaW5nJik7
Cit2b2lkIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25z
dCBjaGFyKiByZWFzb24pOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJpbnQgd2FybmluZ3Mg
dG8gY29uc29sZS4gQ3VycmVudGx5CisvLyB1c2VkIG9ubHkgdG8gd2FybiBhYm91dCB1c2Ugb2Yg
b2Jzb2xldGUgZnVuY3Rpb25zLgordm9pZCBwcmludFdhcm5pbmdUb0NvbnNvbGUoY29uc3QgU3Ry
aW5nJik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJz
IGZvciBmcmFtZWJ1ZmZlciBmdW5jdGlvbnMuCisvLyBHZW5lcmF0ZSBHTCBlcnJvciBpZiBwYXJh
bWV0ZXJzIGFyZSBpbGxlZ2FsLgorYm9vbCB2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRl
cnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0
dGFjaG1lbnQpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZXF1YXRp
b24gbW9kZS4KK2Jvb2wgdmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0pOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQg
ZnVuYyBmYWN0b3JzLgorYm9vbCB2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCk7CisKKy8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSBhIEdMIGNhcGFiaWxpdHkuCitib29sIHZhbGlkYXRlQ2FwYWJp
bGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKworLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIHVuaWZvcm0gZnVuY3Rpb25z
LgorYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkg
bW9kKTsKK2Jvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJBcnJheSosIEdDM0RzaXpl
aSBtb2QpOworYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCB2b2lkKiwgR0MzRHNpemVpLCBH
QzNEc2l6ZWkgbW9kKTsKK2Jvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKK2Jvb2wgdmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiwg
R0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlk
YXRlIHBhcmFtZXRlcnMgZm9yIGJ1ZmZlckRhdGEuCisvLyBSZXR1cm4gdGhlIGN1cnJlbnQgYm91
bmQgYnVmZmVyIHRvIHRhcmdldCwgb3IgMCBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorV2Vi
R0xCdWZmZXIqIHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHVzYWdlKTsKKworLy8gSGVscGVyIGZ1
bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIGltYWdlIGlzIHJlYWR5IGFu
ZCB3b3VsZG4ndCB0YWludCBPcmlnaW4uCitib29sIHZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3Vy
ZSBjYW52YXMgaXMgcmVhZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KK2Jvb2wgdmFsaWRh
dGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNF
bGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworCisjaWYgRU5BQkxFKFZJREVPKQorLy8gSGVscGVy
IGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIHZpZGVvIGlzIHJlYWR5
IHdvdWxkbid0IHRhaW50IE9yaWdpbi4KK2Jvb2wgdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKKyNlbmRpZgorCisvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciB2ZXJ0ZXhBdHRyaWJOZnt2fS4K
K3ZvaWQgdmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWlu
dCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdD
M0RmbG9hdCwgR0MzRGZsb2F0KTsKK3ZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBl
eHBlY3RlZFNpemUpOwordm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkg
ZXhwZWN0ZWRTaXplKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBkZWxldGUqIChkZWxldGVC
dWZmZXIsIGRlbGV0ZVByb2dyYW0sIGV0YykgZnVuY3Rpb25zLgorLy8gUmV0dXJuIGZhbHNlIGlm
IGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLgorYm9vbCBk
ZWxldGVPYmplY3QoV2ViR0xPYmplY3QqKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBiaW5k
KiAoYmluZEJ1ZmZlciwgYmluZFRleHR1cmUsIGV0YykgYW5kIHVzZVByb2dyYW0uCisvLyBJZiB0
aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8gdHJ1ZSB1
cG9uIHJldHVybi4KKy8vIFJldHVybiBmYWxzZSBpZiBjYWxsZXIgc2hvdWxkIHJldHVybiB3aXRo
b3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4KK2Jvb2wgY2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCosIGJvb2wmIGRlbGV0ZWQpOworCisvLyBI
ZWxwZXJzIGZvciBzaW11bGF0aW5nIHZlcnRleEF0dHJpYjAKK3ZvaWQgaW5pdFZlcnRleEF0dHJp
YjAoKTsKK2Jvb2wgc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1WZXJ0ZXgpOwor
dm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworCit2b2lk
IGRpc3BhdGNoQ29udGV4dExvc3RFdmVudCgpOworLy8gSGVscGVyIGZvciByZXN0b3JhdGlvbiBh
ZnRlciBjb250ZXh0IGxvc3QuCit2b2lkIG1heWJlUmVzdG9yZUNvbnRleHQoKTsKKworLy8gRGV0
ZXJtaW5lIGlmIHdlIGFyZSBydW5uaW5nIHByaXZpbGVnZWQgY29kZSBpbiB0aGUgYnJvd3Nlciwg
Zm9yIGV4YW1wbGUsCisvLyBhIFNhZmFyaSBvciBDaHJvbWUgZXh0ZW5zaW9uLgorYm9vbCBhbGxv
d1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3Q7CisKK2VudW0gQ29uc29sZURpc3BsYXlQcmVm
ZXJlbmNlIHsKKyAgICBEaXNwbGF5SW5Db25zb2xlLAorICAgIERvbnREaXNwbGF5SW5Db25zb2xl
Cit9OworCisvLyBXcmFwcGVyIGZvciBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJy
b3IgdGhhdCBzZW5kcyBhIG1lc3NhZ2UKKy8vIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCit2
b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgPSBEaXNw
bGF5SW5Db25zb2xlKTsKKworU3RyaW5nIGVuc3VyZU5vdE51bGwoY29uc3QgU3RyaW5nJikgY29u
c3Q7CisKKy8vIEVuYWJsZSBvciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBiYXNlZCBvbiB1c2VyIHNl
dHRpbmcgYW5kCisvLyB3aGV0aGVyIHRoZSBjdXJyZW50IEZCTyBoYXMgYSBzdGVuY2lsIGJ1ZmZl
ci4KK3ZvaWQgYXBwbHlTdGVuY2lsVGVzdCgpOworCisvLyBIZWxwZXIgZm9yIGVuYWJsaW5nIG9y
IGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCit2b2lkIGVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBj
YXBhYmlsaXR5LCBib29sIGVuYWJsZSk7CisKKy8vIENsYW1wIHRoZSB3aWR0aCBhbmQgaGVpZ2h0
IHRvIEdMX01BWF9WSUVXUE9SVF9ESU1TLgorSW50U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwor
CisvLyBGaXJzdCB0aW1lIGNhbGxlZCwgaWYgRVhUX2RyYXdfYnVmZmVycyBpcyBzdXBwb3J0ZWQs
IHF1ZXJ5IHRoZSB2YWx1ZTsgb3RoZXJ3aXNlIHJldHVybiAwLgorLy8gTGF0ZXIsIHJldHVybiB0
aGUgY2FjaGVkIHZhbHVlLgorR0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOworR0MzRGludCBn
ZXRNYXhDb2xvckF0dGFjaG1lbnRzKCk7CisKK3ZvaWQgc2V0QmFja0RyYXdCdWZmZXIoR0MzRGVu
dW0pOworCit2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKK3ZvaWQgcmVzdG9yZUN1
cnJlbnRUZXh0dXJlMkQoKTsKKworLy8gQ2hlY2sgaWYgRVhUX2RyYXdfYnVmZmVycyBleHRlbnNp
b24gaXMgc3VwcG9ydGVkIGFuZCBpZiBpdCBzYXRpc2ZpZXMgdGhlIFdlYkdMIHJlcXVpcmVtZW50
cy4KK2Jvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NzggQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyovCisKK3R5
cGVkZWYgdW5zaWduZWQgbG9uZyAgR0xlbnVtOwordHlwZWRlZiBib29sZWFuICAgICAgICBHTGJv
b2xlYW47Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMYml0ZmllbGQ7Cit0eXBlZGVmIGJ5dGUg
ICAgICAgICAgIEdMYnl0ZTsgICAgICAgICAvKiAnYnl0ZScgc2hvdWxkIGJlIGEgc2lnbmVkIDgg
Yml0IHR5cGUuICovCit0eXBlZGVmIHNob3J0ICAgICAgICAgIEdMc2hvcnQ7Cit0eXBlZGVmIGxv
bmcgICAgICAgICAgIEdMaW50OwordHlwZWRlZiBsb25nICAgICAgICAgICBHTHNpemVpOwordHlw
ZWRlZiBsb25nIGxvbmcgICAgICBHTGludHB0cjsKK3R5cGVkZWYgbG9uZyBsb25nICAgICAgR0xz
aXplaXB0cjsKK3R5cGVkZWYgb2N0ZXQgICAgICAgICAgR0x1Ynl0ZTsgICAgICAgIC8qICdvY3Rl
dCcgc2hvdWxkIGJlIGFuIHVuc2lnbmVkIDggYml0IHR5cGUuICovCit0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IEdMdXNob3J0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTHVpbnQ7Cit0eXBlZGVm
IHVucmVzdHJpY3RlZCBmbG9hdCBHTGZsb2F0OwordHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQg
R0xjbGFtcGY7CisKK1sKK05vSW50ZXJmYWNlT2JqZWN0LAorQ29uZGl0aW9uYWw9V0VCR0wsCitK
U0N1c3RvbU1hcmtGdW5jdGlvbiwKK0RvTm90Q2hlY2tDb25zdGFudHMsCitdIGludGVyZmFjZSBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CisKKy8q
IENsZWFyQnVmZmVyTWFzayAqLworY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAgICAg
ICAgICAgICA9IDB4MDAwMDAxMDA7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CVUZGRVJfQklUICAg
ICAgICAgICAgID0gMHgwMDAwMDQwMDsKK2NvbnN0IEdMZW51bSBDT0xPUl9CVUZGRVJfQklUICAg
ICAgICAgICAgICAgPSAweDAwMDA0MDAwOworCisvKiBCZWdpbk1vZGUgKi8KK2NvbnN0IEdMZW51
bSBQT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA7Citjb25zdCBHTGVudW0g
TElORVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAxOworY29uc3QgR0xlbnVtIExJ
TkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMjsKK2NvbnN0IEdMZW51bSBMSU5F
X1NUUklQICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDM7Citjb25zdCBHTGVudW0gVFJJQU5H
TEVTICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA0OworY29uc3QgR0xlbnVtIFRSSUFOR0xF
X1NUUklQICAgICAgICAgICAgICAgICA9IDB4MDAwNTsKK2NvbnN0IEdMZW51bSBUUklBTkdMRV9G
QU4gICAgICAgICAgICAgICAgICAgPSAweDAwMDY7CisKKy8qIEFscGhhRnVuY3Rpb24gKG5vdCBz
dXBwb3J0ZWQgaW4gRVMyMCkgKi8KKy8qICAgICAgTkVWRVIgKi8KKy8qICAgICAgTEVTUyAqLwor
LyogICAgICBFUVVBTCAqLworLyogICAgICBMRVFVQUwgKi8KKy8qICAgICAgR1JFQVRFUiAqLwor
LyogICAgICBOT1RFUVVBTCAqLworLyogICAgICBHRVFVQUwgKi8KKy8qICAgICAgQUxXQVlTICov
CisKKy8qIEJsZW5kaW5nRmFjdG9yRGVzdCAqLworY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDA7Citjb25zdCBHTGVudW0gT05FICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMTsKK2NvbnN0IEdMZW51bSBTUkNfQ09MT1IgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAzMDA7Citjb25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAg
ID0gMHgwMzAxOworY29uc3QgR0xlbnVtIFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9
IDB4MDMwMjsKK2NvbnN0IEdMZW51bSBPTkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgPSAw
eDAzMDM7Citjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MzA0OworY29uc3QgR0xlbnVtIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA9IDB4MDMw
NTsKKworLyogQmxlbmRpbmdGYWN0b3JTcmMgKi8KKy8qICAgICAgWkVSTyAqLworLyogICAgICBP
TkUgKi8KK2NvbnN0IEdMZW51bSBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAz
MDY7Citjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgID0gMHgwMzA3
OworY29uc3QgR0xlbnVtIFNSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAgICA9IDB4MDMwODsK
Ky8qICAgICAgU1JDX0FMUEhBICovCisvKiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KKy8q
ICAgICAgRFNUX0FMUEhBICovCisvKiAgICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgKi8KKworLyog
QmxlbmRFcXVhdGlvblNlcGFyYXRlICovCitjb25zdCBHTGVudW0gRlVOQ19BREQgICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4MDA2OworY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OICAgICAg
ICAgICAgICAgICA9IDB4ODAwOTsKK2NvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAg
ICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworY29uc3Qg
R0xlbnVtIEJMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA9IDB4ODgzRDsKKworLyogQmxl
bmRTdWJ0cmFjdCAqLworY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAgICAg
ICA9IDB4ODAwQTsKK2NvbnN0IEdMZW51bSBGVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAg
PSAweDgwMEI7CisKKy8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLworY29uc3QgR0xlbnVt
IEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9IDB4ODBDODsKK2NvbnN0IEdMZW51bSBC
TEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgPSAweDgwQzk7Citjb25zdCBHTGVudW0gQkxF
TkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgID0gMHg4MENBOworY29uc3QgR0xlbnVtIEJMRU5E
X1NSQ19BTFBIQSAgICAgICAgICAgICAgICA9IDB4ODBDQjsKK2NvbnN0IEdMZW51bSBDT05TVEFO
VF9DT0xPUiAgICAgICAgICAgICAgICAgPSAweDgwMDE7Citjb25zdCBHTGVudW0gT05FX01JTlVT
X0NPTlNUQU5UX0NPTE9SICAgICAgID0gMHg4MDAyOworY29uc3QgR0xlbnVtIENPTlNUQU5UX0FM
UEhBICAgICAgICAgICAgICAgICA9IDB4ODAwMzsKK2NvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09O
U1RBTlRfQUxQSEEgICAgICAgPSAweDgwMDQ7Citjb25zdCBHTGVudW0gQkxFTkRfQ09MT1IgICAg
ICAgICAgICAgICAgICAgID0gMHg4MDA1OworCisvKiBCdWZmZXIgT2JqZWN0cyAqLworY29uc3Qg
R0xlbnVtIEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4ODg5MjsKK2NvbnN0IEdM
ZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgPSAweDg4OTM7Citjb25zdCBHTGVu
dW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0OworY29uc3QgR0xlbnVt
IEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA9IDB4ODg5NTsKKworY29uc3QgR0xlbnVt
IFNUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAgICA9IDB4ODhFMDsKK2NvbnN0IEdMZW51bSBT
VEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgPSAweDg4RTQ7Citjb25zdCBHTGVudW0gRFlO
QU1JQ19EUkFXICAgICAgICAgICAgICAgICAgID0gMHg4OEU4OworCitjb25zdCBHTGVudW0gQlVG
RkVSX1NJWkUgICAgICAgICAgICAgICAgICAgID0gMHg4NzY0OworY29uc3QgR0xlbnVtIEJVRkZF
Ul9VU0FHRSAgICAgICAgICAgICAgICAgICA9IDB4ODc2NTsKKworY29uc3QgR0xlbnVtIENVUlJF
TlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA9IDB4ODYyNjsKKworLyogQ3VsbEZhY2VNb2RlICov
Citjb25zdCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0Owor
Y29uc3QgR0xlbnVtIEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNTsKK2Nv
bnN0IEdMZW51bSBGUk9OVF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgPSAweDA0MDg7CisKKy8q
IERlcHRoRnVuY3Rpb24gKi8KKy8qICAgICAgTkVWRVIgKi8KKy8qICAgICAgTEVTUyAqLworLyog
ICAgICBFUVVBTCAqLworLyogICAgICBMRVFVQUwgKi8KKy8qICAgICAgR1JFQVRFUiAqLworLyog
ICAgICBOT1RFUVVBTCAqLworLyogICAgICBHRVFVQUwgKi8KKy8qICAgICAgQUxXQVlTICovCisK
Ky8qIEVuYWJsZUNhcCAqLworY29uc3QgR0xlbnVtIFRFWFRVUkVfMkQgICAgICAgICAgICAgICAg
ICAgICA9IDB4MERFMTsKK2NvbnN0IEdMZW51bSBDVUxMX0ZBQ0UgICAgICAgICAgICAgICAgICAg
ICAgPSAweDBCNDQ7Citjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgwQkUyOworY29uc3QgR0xlbnVtIERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MEJEMDsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX1RFU1QgICAgICAgICAgICAgICAgICAgPSAw
eDBCOTA7Citjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgID0gMHgw
QjcxOworY29uc3QgR0xlbnVtIFNDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA9IDB4MEMx
MTsKK2NvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9GSUxMICAgICAgICAgICAgPSAweDgwMzc7
Citjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAgICAgID0gMHg4MDlFOwor
Y29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICA9IDB4ODBBMDsKKwor
LyogRXJyb3JDb2RlICovCitjb25zdCBHTGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAg
ICAgID0gMDsKK2NvbnN0IEdMZW51bSBJTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgPSAw
eDA1MDA7Citjb25zdCBHTGVudW0gSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgID0gMHgw
NTAxOworY29uc3QgR0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUw
MjsKK2NvbnN0IEdMZW51bSBPVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgPSAweDA1MDU7
CisKKy8qIEZyb250RmFjZURpcmVjdGlvbiAqLworY29uc3QgR0xlbnVtIENXICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKK2NvbnN0IEdMZW51bSBDQ1cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDA5MDE7CisKKy8qIEdldFBOYW1lICovCitjb25zdCBHTGVudW0g
TElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOworY29uc3QgR0xlbnVtIEFM
SUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA9IDB4ODQ2RDsKK2NvbnN0IEdMZW51bSBBTElB
U0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgPSAweDg0NkU7Citjb25zdCBHTGVudW0gQ1VMTF9G
QUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1OworY29uc3QgR0xlbnVtIEZST05UX0ZB
Q0UgICAgICAgICAgICAgICAgICAgICA9IDB4MEI0NjsKK2NvbnN0IEdMZW51bSBERVBUSF9SQU5H
RSAgICAgICAgICAgICAgICAgICAgPSAweDBCNzA7Citjb25zdCBHTGVudW0gREVQVEhfV1JJVEVN
QVNLICAgICAgICAgICAgICAgID0gMHgwQjcyOworY29uc3QgR0xlbnVtIERFUFRIX0NMRUFSX1ZB
TFVFICAgICAgICAgICAgICA9IDB4MEI3MzsKK2NvbnN0IEdMZW51bSBERVBUSF9GVU5DICAgICAg
ICAgICAgICAgICAgICAgPSAweDBCNzQ7Citjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxV
RSAgICAgICAgICAgID0gMHgwQjkxOworY29uc3QgR0xlbnVtIFNURU5DSUxfRlVOQyAgICAgICAg
ICAgICAgICAgICA9IDB4MEI5MjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0ZBSUwgICAgICAgICAg
ICAgICAgICAgPSAweDBCOTQ7Citjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwg
ICAgICAgID0gMHgwQjk1OworY29uc3QgR0xlbnVtIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTICAg
ICAgICA9IDB4MEI5NjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX1JFRiAgICAgICAgICAgICAgICAg
ICAgPSAweDBCOTc7Citjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAgICAg
ID0gMHgwQjkzOworY29uc3QgR0xlbnVtIFNURU5DSUxfV1JJVEVNQVNLICAgICAgICAgICAgICA9
IDB4MEI5ODsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAgICAgICAgPSAw
eDg4MDA7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4
ODAxOworY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICA9IDB4ODgw
MjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTICAgPSAweDg4MDM7
Citjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOwor
Y29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICA9IDB4OENBNDsKK2Nv
bnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAgICAgICAgPSAweDhDQTU7Citjb25z
dCBHTGVudW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOworY29uc3Qg
R0xlbnVtIFNDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICA9IDB4MEMxMDsKKy8qICAgICAg
U0NJU1NPUl9URVNUICovCitjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAg
ICAgID0gMHgwQzIyOworY29uc3QgR0xlbnVtIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAg
ICA9IDB4MEMyMzsKK2NvbnN0IEdMZW51bSBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAg
PSAweDBDRjU7Citjb25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAgID0g
MHgwRDA1OworY29uc3QgR0xlbnVtIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICA9IDB4
MEQzMzsKK2NvbnN0IEdMZW51bSBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgPSAweDBE
M0E7Citjb25zdCBHTGVudW0gU1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUw
OworY29uc3QgR0xlbnVtIFJFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MjsK
K2NvbnN0IEdMZW51bSBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTM7Citj
b25zdCBHTGVudW0gQkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OworY29u
c3QgR0xlbnVtIEFMUEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NTsKK2NvbnN0
IEdMZW51bSBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTY7Citjb25zdCBH
TGVudW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OworY29uc3QgR0xl
bnVtIFBPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICA9IDB4MkEwMDsKKy8qICAgICAgUE9M
WUdPTl9PRkZTRVRfRklMTCAqLworY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAg
ICAgICAgICA9IDB4ODAzODsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0JJTkRJTkdfMkQgICAgICAg
ICAgICAgPSAweDgwNjk7Citjb25zdCBHTGVudW0gU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAg
ICAgID0gMHg4MEE4OworY29uc3QgR0xlbnVtIFNBTVBMRVMgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODBBOTsKK2NvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0VfVkFMVUUgICAgICAgICAg
PSAweDgwQUE7Citjb25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgID0g
MHg4MEFCOworCisvKiBHZXRUZXh0dXJlUGFyYW1ldGVyICovCisvKiAgICAgIFRFWFRVUkVfTUFH
X0ZJTFRFUiAqLworLyogICAgICBURVhUVVJFX01JTl9GSUxURVIgKi8KKy8qICAgICAgVEVYVFVS
RV9XUkFQX1MgKi8KKy8qICAgICAgVEVYVFVSRV9XUkFQX1QgKi8KKworY29uc3QgR0xlbnVtIENP
TVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA9IDB4ODZBMzsKKworLyogSGludE1vZGUgKi8K
K2NvbnN0IEdMZW51bSBET05UX0NBUkUgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDA7Citj
b25zdCBHTGVudW0gRkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAxOworY29u
c3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMjsKKworLyog
SGludFRhcmdldCAqLworY29uc3QgR0xlbnVtIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAg
ICAgPSAweDgxOTI7CisKKy8qIERhdGFUeXBlICovCitjb25zdCBHTGVudW0gQllURSAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgxNDAwOworY29uc3QgR0xlbnVtIFVOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICAgICA9IDB4MTQwMTsKK2NvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDE0MDI7Citjb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlQgICAg
ICAgICAgICAgICAgID0gMHgxNDAzOworY29uc3QgR0xlbnVtIElOVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MTQwNDsKK2NvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAg
ICAgICAgICAgPSAweDE0MDU7Citjb25zdCBHTGVudW0gRkxPQVQgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxNDA2OworCisvKiBQaXhlbEZvcm1hdCAqLworY29uc3QgR0xlbnVtIERFUFRI
X0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKK2NvbnN0IEdMZW51bSBBTFBIQSAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDY7Citjb25zdCBHTGVudW0gUkdCICAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA3OworY29uc3QgR0xlbnVtIFJHQkEgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKK2NvbnN0IEdMZW51bSBMVU1JTkFOQ0UgICAg
ICAgICAgICAgICAgICAgICAgPSAweDE5MDk7Citjb25zdCBHTGVudW0gTFVNSU5BTkNFX0FMUEhB
ICAgICAgICAgICAgICAgID0gMHgxOTBBOworCisvKiBQaXhlbFR5cGUgKi8KKy8qICAgICAgVU5T
SUdORURfQllURSAqLworY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAg
ICA9IDB4ODAzMzsKK2NvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAg
PSAweDgwMzQ7Citjb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgID0g
MHg4MzYzOworCisvKiBTaGFkZXJzICovCitjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAg
ICAgICAgICAgICAgICAgPSAweDhCMzA7Citjb25zdCBHTGVudW0gVkVSVEVYX1NIQURFUiAgICAg
ICAgICAgICAgICAgICAgPSAweDhCMzE7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9BVFRSSUJT
ICAgICAgICAgICAgICAgPSAweDg4Njk7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9VTklGT1JN
X1ZFQ1RPUlMgICAgICAgPSAweDhERkI7Citjb25zdCBHTGVudW0gTUFYX1ZBUllJTkdfVkVDVE9S
UyAgICAgICAgICAgICAgPSAweDhERkM7Citjb25zdCBHTGVudW0gTUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFMgPSAweDhCNEQ7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTICAgPSAweDhCNEM7Citjb25zdCBHTGVudW0gTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgICAgICAgICAgPSAweDg4NzI7Citjb25zdCBHTGVudW0gTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fVkVDVE9SUyAgICAgPSAweDhERkQ7Citjb25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAg
ICAgICAgICAgICAgICAgPSAweDhCNEY7Citjb25zdCBHTGVudW0gREVMRVRFX1NUQVRVUyAgICAg
ICAgICAgICAgICAgICAgPSAweDhCODA7Citjb25zdCBHTGVudW0gTElOS19TVEFUVVMgICAgICAg
ICAgICAgICAgICAgICAgPSAweDhCODI7Citjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAg
ICAgICAgICAgICAgICAgPSAweDhCODM7Citjb25zdCBHTGVudW0gQVRUQUNIRURfU0hBREVSUyAg
ICAgICAgICAgICAgICAgPSAweDhCODU7Citjb25zdCBHTGVudW0gQUNUSVZFX1VOSUZPUk1TICAg
ICAgICAgICAgICAgICAgPSAweDhCODY7Citjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMg
ICAgICAgICAgICAgICAgPSAweDhCODk7Citjb25zdCBHTGVudW0gU0hBRElOR19MQU5HVUFHRV9W
RVJTSU9OICAgICAgICAgPSAweDhCOEM7Citjb25zdCBHTGVudW0gQ1VSUkVOVF9QUk9HUkFNICAg
ICAgICAgICAgICAgICAgPSAweDhCOEQ7CisKKy8qIFN0ZW5jaWxGdW5jdGlvbiAqLworY29uc3Qg
R0xlbnVtIE5FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMDsKK2NvbnN0IEdM
ZW51bSBMRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDE7Citjb25zdCBHTGVu
dW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAyOworY29uc3QgR0xlbnVt
IExFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMzsKK2NvbnN0IEdMZW51bSBH
UkVBVEVSICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDQ7Citjb25zdCBHTGVudW0gTk9U
RVFVQUwgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjA1OworY29uc3QgR0xlbnVtIEdFUVVB
TCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNjsKK2NvbnN0IEdMZW51bSBBTFdBWVMg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDc7CisKKy8qIFN0ZW5jaWxPcCAqLworLyog
ICAgICBaRVJPICovCitjb25zdCBHTGVudW0gS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxRTAwOworY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MUUwMTsKK2NvbnN0IEdMZW51bSBJTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDFFMDI7Citjb25zdCBHTGVudW0gREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgx
RTAzOworY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTUw
QTsKK2NvbnN0IEdMZW51bSBJTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgPSAweDg1MDc7
Citjb25zdCBHTGVudW0gREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0gMHg4NTA4Owor
CisvKiBTdHJpbmdOYW1lICovCitjb25zdCBHTGVudW0gVkVORE9SICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxRjAwOworY29uc3QgR0xlbnVtIFJFTkRFUkVSICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MUYwMTsKK2NvbnN0IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDFGMDI7CisKKy8qIFRleHR1cmVNYWdGaWx0ZXIgKi8KK2NvbnN0IEdMZW51bSBORUFS
RVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI2MDA7Citjb25zdCBHTGVudW0gTElORUFS
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNjAxOworCisvKiBUZXh0dXJlTWluRmlsdGVy
ICovCisvKiAgICAgIE5FQVJFU1QgKi8KKy8qICAgICAgTElORUFSICovCitjb25zdCBHTGVudW0g
TkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgID0gMHgyNzAwOworY29uc3QgR0xlbnVtIExJ
TkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICA9IDB4MjcwMTsKK2NvbnN0IEdMZW51bSBORUFS
RVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7Citjb25zdCBHTGVudW0gTElORUFS
X01JUE1BUF9MSU5FQVIgICAgICAgICAgID0gMHgyNzAzOworCisvKiBUZXh0dXJlUGFyYW1ldGVy
TmFtZSAqLworY29uc3QgR0xlbnVtIFRFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4
MjgwMDsKK2NvbnN0IEdMZW51bSBURVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgPSAweDI4
MDE7Citjb25zdCBHTGVudW0gVEVYVFVSRV9XUkFQX1MgICAgICAgICAgICAgICAgID0gMHgyODAy
OworY29uc3QgR0xlbnVtIFRFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsK
KworLyogVGV4dHVyZVRhcmdldCAqLworLyogICAgICBURVhUVVJFXzJEICovCitjb25zdCBHTGVu
dW0gVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOworCitjb25zdCBHTGVu
dW0gVEVYVFVSRV9DVUJFX01BUCAgICAgICAgICAgICAgID0gMHg4NTEzOworY29uc3QgR0xlbnVt
IFRFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICA9IDB4ODUxNDsKK2NvbnN0IEdMZW51bSBU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7Citjb25zdCBHTGVudW0gVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9YICAgID0gMHg4NTE2OworY29uc3QgR0xlbnVtIFRFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICA9IDB4ODUxNzsKK2NvbnN0IEdMZW51bSBURVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7Citjb25zdCBHTGVudW0gVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9aICAgID0gMHg4NTE5OworY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWiAgICA9IDB4ODUxQTsKK2NvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBf
VEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7CisKKy8qIFRleHR1cmVVbml0ICovCitjb25zdCBH
TGVudW0gVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMwOworY29uc3QgR0xl
bnVtIFRFWFRVUkUxICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKK2NvbnN0IEdMZW51
bSBURVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzI7Citjb25zdCBHTGVudW0g
VEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMzOworY29uc3QgR0xlbnVtIFRF
WFRVUkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKK2NvbnN0IEdMZW51bSBURVhU
VVJFNSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzU7Citjb25zdCBHTGVudW0gVEVYVFVS
RTYgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM2OworY29uc3QgR0xlbnVtIFRFWFRVUkU3
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKK2NvbnN0IEdMZW51bSBURVhUVVJFOCAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzg7Citjb25zdCBHTGVudW0gVEVYVFVSRTkgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEM5OworY29uc3QgR0xlbnVtIFRFWFRVUkUxMCAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTEgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0Q0I7Citjb25zdCBHTGVudW0gVEVYVFVSRTEyICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NENDOworY29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODRDRDsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTQgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0Q0U7Citjb25zdCBHTGVudW0gVEVYVFVSRTE1ICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NENGOworY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODREMDsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTcgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0RDE7Citjb25zdCBHTGVudW0gVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEQyOworY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODREMzsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDQ7Citjb25zdCBHTGVudW0gVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEQ1OworY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
NjsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDc7
Citjb25zdCBHTGVudW0gVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ4Owor
Y29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREOTsKK2Nv
bnN0IEdMZW51bSBURVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REE7Citjb25z
dCBHTGVudW0gVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERCOworY29uc3Qg
R0xlbnVtIFRFWFRVUkUyOCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREQzsKK2NvbnN0IEdM
ZW51bSBURVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REQ7Citjb25zdCBHTGVu
dW0gVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERFOworY29uc3QgR0xlbnVt
IFRFWFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKK2NvbnN0IEdMZW51bSBB
Q1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAgPSAweDg0RTA7CisKKy8qIFRleHR1cmVXcmFw
TW9kZSAqLworY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MjkwMTsKK2NvbnN0IEdMZW51bSBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgPSAweDgx
MkY7Citjb25zdCBHTGVudW0gTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgID0gMHg4Mzcw
OworCisvKiBVbmlmb3JtIFR5cGVzICovCitjb25zdCBHTGVudW0gRkxPQVRfVkVDMiAgICAgICAg
ICAgICAgICAgICAgID0gMHg4QjUwOworY29uc3QgR0xlbnVtIEZMT0FUX1ZFQzMgICAgICAgICAg
ICAgICAgICAgICA9IDB4OEI1MTsKK2NvbnN0IEdMZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAg
ICAgICAgICAgPSAweDhCNTI7Citjb25zdCBHTGVudW0gSU5UX1ZFQzIgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4QjUzOworY29uc3QgR0xlbnVtIElOVF9WRUMzICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4OEI1NDsKK2NvbnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDhCNTU7Citjb25zdCBHTGVudW0gQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjU2OworY29uc3QgR0xlbnVtIEJPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1NzsKK2NvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNTg7Citjb25zdCBHTGVudW0gQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjU5OworY29uc3QgR0xlbnVtIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
QTsKK2NvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUI7
Citjb25zdCBHTGVudW0gRkxPQVRfTUFUNCAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVDOwor
Y29uc3QgR0xlbnVtIFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1RTsKK2Nv
bnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgPSAweDhCNjA7CisKKy8q
IFZlcnRleCBBcnJheXMgKi8KK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJM
RUQgICAgICAgID0gMHg4NjIyOworY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0la
RSAgICAgICAgICAgPSAweDg2MjM7Citjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9T
VFJJREUgICAgICAgICA9IDB4ODYyNDsKK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZ
X1RZUEUgICAgICAgICAgID0gMHg4NjI1OworY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRCAgICAgPSAweDg4NkE7Citjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9B
UlJBWV9QT0lOVEVSICAgICAgICA9IDB4ODY0NTsKK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklC
X0FSUkFZX0JVRkZFUl9CSU5ESU5HID0gMHg4ODlGOworCisvKiBTaGFkZXIgU291cmNlICovCitj
b25zdCBHTGVudW0gQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgID0gMHg4QjgxOworCisv
KiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLworY29uc3QgR0xlbnVtIExPV19G
TE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKK2NvbnN0IEdMZW51bSBNRURJVU1f
RkxPQVQgICAgICAgICAgICAgICAgICAgPSAweDhERjE7Citjb25zdCBHTGVudW0gSElHSF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgID0gMHg4REYyOworY29uc3QgR0xlbnVtIExPV19JTlQgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKK2NvbnN0IEdMZW51bSBNRURJVU1fSU5UICAg
ICAgICAgICAgICAgICAgICAgPSAweDhERjQ7Citjb25zdCBHTGVudW0gSElHSF9JTlQgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4REY1OworCisvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCitj
b25zdCBHTGVudW0gRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgID0gMHg4RDQwOworY29u
c3QgR0xlbnVtIFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MTsKKworY29u
c3QgR0xlbnVtIFJHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKK2NvbnN0
IEdMZW51bSBSR0I1X0ExICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwNTc7Citjb25zdCBH
TGVudW0gUkdCNTY1ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RDYyOworY29uc3QgR0xl
bnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKK2NvbnN0IEdMZW51
bSBTVEVOQ0lMX0lOREVYICAgICAgICAgICAgICAgICAgPSAweDE5MDE7Citjb25zdCBHTGVudW0g
U1RFTkNJTF9JTkRFWDggICAgICAgICAgICAgICAgID0gMHg4RDQ4OworY29uc3QgR0xlbnVtIERF
UFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKKworY29uc3QgR0xlbnVtIFNS
R0JfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQwOworY29u
c3QgR0xlbnVtIFNSR0JfQUxQSEFfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHg4QzQyOworY29uc3QgR0xlbnVtIFNSR0I4X0FMUEhBOF9FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4QzQzOworY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
Q09MT1JfRU5DT0RJTkdfRVhUICAgID0gMHg4MjEwOworCitjb25zdCBHTGVudW0gTUlOX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA3OworY29uc3QgR0xlbnVtIE1BWF9FWFQgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODAwODsKKworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZF
Ul9XSURUSCAgICAgICAgICAgICA9IDB4OEQ0MjsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJf
SEVJR0hUICAgICAgICAgICAgPSAweDhENDM7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lO
VEVSTkFMX0ZPUk1BVCAgID0gMHg4RDQ0OworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9SRURf
U0laRSAgICAgICAgICA9IDB4OEQ1MDsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfR1JFRU5f
U0laRSAgICAgICAgPSAweDhENTE7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVfU0la
RSAgICAgICAgID0gMHg4RDUyOworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9BTFBIQV9TSVpF
ICAgICAgICA9IDB4OEQ1MzsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAg
ICAgICAgPSAweDhENTQ7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAg
ICAgID0gMHg4RDU1OworCitjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfVFlQRSAgICAgICAgICAgPSAweDhDRDA7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgPSAweDhDRDE7Citjb25zdCBHTGVudW0gRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAweDhDRDI7Citjb25z
dCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgPSAw
eDhDRDM7CisKK2NvbnN0IEdMZW51bSBDT0xPUl9BVFRBQ0hNRU5UMCAgICAgICAgICAgICAgPSAw
eDhDRTA7Citjb25zdCBHTGVudW0gREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4
RDAwOworY29uc3QgR0xlbnVtIFNURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICA9IDB4OEQy
MDsKK2NvbnN0IEdMZW51bSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgPSAweDgyMUE7
CisKK2NvbnN0IEdMZW51bSBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworCitj
b25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAgPSAw
eDhDRDU7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAg
ICAgICAgPSAweDhDRDY7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNT
SU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9ESU1FTlNJT05TICAgICAgICAgPSAweDhDRDk7Citjb25zdCBHTGVudW0gRlJBTUVCVUZG
RVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAweDhDREQ7CisKK2NvbnN0IEdMZW51
bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Citjb25zdCBHTGVudW0g
UkVOREVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4Q0E3OworY29uc3QgR0xlbnVtIE1B
WF9SRU5ERVJCVUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRFODsKKworY29uc3QgR0xlbnVtIElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUwNjsKKworLyogV2ViR0wtc3BlY2lm
aWMgZW51bXMgKi8KK2NvbnN0IEdMZW51bSBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAgICAg
ICAgID0gMHg5MjQwOworY29uc3QgR0xlbnVtIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJH
TCAgICAgPSAweDkyNDE7Citjb25zdCBHTGVudW0gQ09OVEVYVF9MT1NUX1dFQkdMICAgICAgICAg
ICAgICAgICA9IDB4OTI0MjsKK2NvbnN0IEdMZW51bSBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJT
SU9OX1dFQkdMID0gMHg5MjQzOworY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAg
ICAgICAgICAgICAgPSAweDkyNDQ7CisKK3JlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdp
bmdCdWZmZXJXaWR0aDsKK3JlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJI
ZWlnaHQ7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOworW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBHTHVpbnQgaW5kZXgsIERPTVN0cmluZyBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRCdWZmZXIoR0xlbnVtIHRhcmdl
dCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJHTEZy
YW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGJpbmRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xS
ZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdMZW51bSB0YXJnZXQsIFdlYkdMVGV4
dHVyZSB0ZXh0dXJlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZENv
bG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBm
IGFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9u
KEdMZW51bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVx
dWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOworW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVuYyhHTGVudW0gc2ZhY3RvciwgR0xl
bnVtIGRmYWN0b3IpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVu
Y1NlcGFyYXRlKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwg
R0xlbnVtIGRzdEFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEs
IEdMZW51bSB1c2FnZSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICBidWZmZXJEYXRhKEdMZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldz8gZGF0
YSwgR0xlbnVtIHVzYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBH
TGVudW0gdXNhZ2UpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFy
cmF5QnVmZmVyPyBkYXRhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0
LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVudW0g
ICAgICAgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0gdGFyZ2V0KTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZpZWxkIG1hc2spOworW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1w
ZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpOworW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoR0xjbGFtcGYgZGVwdGgpOworW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNpbChHTGludCBzKTsKK1tTdHJpY3RU
eXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb2xvck1hc2soR0xib29sZWFuIHJlZCwgR0xib29s
ZWFuIGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFuIGFscGhhKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGNvbXBpbGVTaGFkZXIoV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNv
bXByZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVy
LCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3IGRhdGEpOworCitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgY29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgY29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xC
dWZmZXIgY3JlYXRlQnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTEZyYW1lYnVm
ZmVyIGNyZWF0ZUZyYW1lYnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFByb2dy
YW0gY3JlYXRlUHJvZ3JhbSgpOworW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xSZW5kZXJidWZm
ZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIFdlYkdMU2hhZGVyIGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7CitbU3RyaWN0VHlw
ZUNoZWNraW5nXSBXZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVyZSgpOworCitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2UoR0xlbnVtIG1vZGUpOworCitbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyIGJ1ZmZlcik7
CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIoV2Vi
R0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVy
IHJlbmRlcmJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRl
U2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CisKK1tTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBkZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpOworW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoTWFzayhHTGJvb2xlYW4gZmxhZyk7CitbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhSYW5nZShHTGNsYW1wZiB6TmVhciwg
R0xjbGFtcGYgekZhcik7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIFdlYkdMU2hhZGVy
IHNoYWRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGlzYWJsZShHTGVu
dW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOworW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0FycmF5cyhHTGVudW0g
bW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOworW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBH
THNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKworW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGVuYWJsZShHTGVudW0gY2FwKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KEdMdWludCBpbmRleCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
ZmluaXNoKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0g
cmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOworW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0
YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlLCBHTGludCBsZXZlbCk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBnZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KTsKKwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0
QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgpOworW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZl
VW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsKKworW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgZ2V0QXR0YWNoZWRTaGFk
ZXJzKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gR0xpbnQg
ICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBET01TdHJpbmcg
bmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdldEJ1ZmZlclBhcmFt
ZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOworCitbU3RyaWN0VHlwZUNoZWNraW5n
XSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmddIEdMZW51bSBnZXRFcnJvcigpOworCisvLyBvYmplY3QgZ2V0RXh0ZW5z
aW9uKERPTVN0cmluZyBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdl
dEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOworW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRQYXJhbWV0ZXIo
R0xlbnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0
aW9uXSBhbnkgZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0xlbnVt
IHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9
TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQ
cm9ncmFtIHByb2dyYW0pOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIGFueSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBh
bnkgZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyIHNoYWRlciwgR0xlbnVtIHBuYW1lKTsK
KworW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBS
YWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVy
IHNoYWRlcik7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xT
aGFkZXJQcmVjaXNpb25Gb3JtYXQgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdMZW51bSBzaGFk
ZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFRy
ZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcg
ICAgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25z
KCk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkg
Z2V0VGV4UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7CisKK1tTdHJpY3RU
eXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VW5pZm9ybShXZWJH
TFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24pOworCitbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdl
dFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOwor
CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFZl
cnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIEdMc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdMdWludCBpbmRleCwgR0xl
bnVtIHBuYW1lKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFu
ICAgIGlzQnVmZmVyKFdlYkdMQnVmZmVyIGJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBH
TGJvb2xlYW4gICAgaXNDb250ZXh0TG9zdCgpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29s
ZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9v
bGVhbiAgICBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOworW1N0
cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJv
Z3JhbSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNSZW5kZXJidWZmZXIo
V2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdM
Ym9vbGVhbiAgICBpc1NoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOworW1N0cmljdFR5cGVDaGVj
a2luZ10gR0xib29sZWFuICAgIGlzVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CitbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgbGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgbGlua1By
b2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIHBpeGVsU3RvcmVpKEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdM
ZmxvYXQgdW5pdHMpOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3
IHBpeGVscyk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZW5kZXJi
dWZmZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lzc29yKEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHNoYWRlclNvdXJjZShXZWJHTFNoYWRlciBzaGFk
ZXIsIERPTVN0cmluZyBzdHJpbmcpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IHN0ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBm
YWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE1hc2soR0x1aW50IG1hc2spOworW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVtIGZhY2Us
IEdMdWludCBtYXNrKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2ls
T3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3BTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xl
bnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKKworW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBu
YW1lLCBHTGZsb2F0IHBhcmFtKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0
ZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwor
CisvLyBTdXBwb3J0ZWQgZm9ybXM6CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKK0dM
aW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8g
cGl4ZWxzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7
CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
CitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudD8gaW1hZ2UpOwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1h
Z2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAor
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMpOwor
I2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKK0dMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRlbyk7CisjZW5kaWYKKworW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgCitHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOworW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKK0dMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7CitbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAorR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCitH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ/IGNhbnZhcyk7Cisj
aWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKK0dMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRlbyk7CisjZW5kaWYK
KworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4KTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWkoV2ViR0xVbmlmb3JtTG9jYXRpb24g
bG9jYXRpb24sIEdMaW50IHgpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgdW5pZm9ybTFpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwg
SW50MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCB1bmlmb3JtMmYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xm
bG9hdCB5KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkIHVuaWZvcm0yZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJh
eSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3Jt
MmkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpOworW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJp
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKK1tTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2YoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOworW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNm
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOworW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zaShXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7CitbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2l2KFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOworW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZihXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVu
aWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGkoV2Vi
R0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdM
aW50IHcpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgdW5pZm9ybTRpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2
KTsKKworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybU1hdHJpeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFu
IHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSBhcnJh
eSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1
bmlmb3JtTWF0cml4NGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xlYW4g
dHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CisKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1
aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIHZlcnRleEF0dHJpYjJmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQg
eSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdM
dWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0
IHksIEdMZmxvYXQgeik7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4
QXR0cmliM2Z2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5keCwgR0xmbG9h
dCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJh
eSB2YWx1ZXMpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgdmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5keCwgR0xpbnQgc2l6ZSwgR0xlbnVt
IHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCAKK0dMc2l6ZWkgc3RyaWRlLCBHTGludHB0ciBv
ZmZzZXQpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmlld3BvcnQoR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAJKHJldmlzaW9uIDE3
ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIK
IAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMU2hhZGVy
OjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIEdDM0RlbnVtIHR5cGUpCitQYXNz
UmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFNoYWRlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqIGN0eCwgR0MzRGVudW0gdHlwZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdlYkdMU2hhZGVyKGN0eCwgdHlwZSkpOwogfQogCi1XZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIEdDM0RlbnVtIHR5cGUpCitXZWJHTFNoYWRlcjo6
V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4LCBHQzNEZW51bSB0eXBl
KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAgICwgbV90eXBlKHR5cGUpCiAgICAg
LCBtX3NvdXJjZSgiIikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFk
ZXIuaAkocmV2aXNpb24gMTc4NjA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xTaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBXZWJHTFNo
YWRlciBmaW5hbCA6IHB1YmxpYyBXZWJHTFNoCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xT
aGFkZXIoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGUoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiwgR0MzRGVudW0pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSosIEdDM0RlbnVtKTsK
IAogICAgIEdDM0RlbnVtIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBj
b25zdCBTdHJpbmcmIGdldFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CkBAIC00
Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZhbGlkKGJvb2wgdmFsaWQpIHsgbV9p
c1ZhbGlkID0gdmFsaWQ7IH0KIAogcHJpdmF0ZToKLSAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRl
cmluZ0NvbnRleHQqLCBHQzNEZW51bSk7CisgICAgV2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSosIEdDM0RlbnVtKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJ
bXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5j
cHAJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2hhcmVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAjaW5j
bHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3Vw
LmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMU2hh
cmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCitXZWJHTFNoYXJlZE9iamVjdDo6V2ViR0xTaGFyZWRPYmplY3QoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMT2JqZWN0KGNvbnRleHQpLAogICAgICAg
bV9jb250ZXh0R3JvdXAoY29udGV4dC0+Y29udGV4dEdyb3VwKCkpCiB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmgJKHJldmlzaW9uIDE3
ODYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3Mg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsK
IAogLy8gV2ViR0xTaGFyZWRPYmplY3QgdGhlIGJhc2UgY2xhc3MgZm9yIG9iamVjdHMgdGhhdCBj
YW4gYmUgc2hhcmVkIGJ5IG11bHRpcGxlCiAvLyBXZWJHTFJlbmRlcmluZ0NvbnRleHRzLgpAQCAt
NDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZShjb25zdCBXZWJHTENv
bnRleHRHcm91cCogY29udGV4dEdyb3VwLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqKSBj
b25zdCBvdmVycmlkZQorICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRl
eHRHcm91cCogY29udGV4dEdyb3VwLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKikg
Y29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBjb250ZXh0R3JvdXAgPT0gbV9j
b250ZXh0R3JvdXA7CiAgICAgfQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXRhY2hDb250ZXh0R3JvdXAoKTsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMU2hhcmVkT2JqZWN0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdMU2hhcmVkT2JqZWN0KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNHcm91cE9yQ29udGV4
dCgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNiAr
MzEsMTYgQEAKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2Vi
R0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1QYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xUZXh0
dXJlOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogewogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgV2ViR0xUZXh0dXJlKGN0eCkpOwogfQogCi1XZWJHTFRleHR1cmU6Oldl
YkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKK1dlYkdMVGV4dHVyZTo6V2Vi
R0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKICAgICA6IFdlYkdMU2hh
cmVkT2JqZWN0KGN0eCkKICAgICAsIG1fdGFyZ2V0KDApCiAgICAgLCBtX21pbkZpbHRlcihHcmFw
aGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHJldmlzaW9uIDE3ODYwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfldlYkdMVGV4dHVyZSgpOwogCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGUoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdm9pZCBzZXRUYXJnZXQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IG1heExldmVsKTsKICAgICB2b2lkIHNldFBhcmFtZXRlcmkoR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIEdDM0RpbnQgY29tcHV0ZUxldmVsQ291bnQoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KTsKIAogcHJpdmF0ZToKLSAgICBXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgV2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwg
UGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwCShyZXZp
c2lvbiAxNzg2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE2IEBACiAjaW5j
bHVkZSAiV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9u
czNELmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NS
ZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uzo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4LCBWYW9UeXBlIHR5cGUpCitQYXNz
UmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IFdlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVM6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgsIFZhb1R5cGUgdHlwZSkK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoY3R4
LCB0eXBlKSk7CiB9CiAKLVdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIFZhb1R5cGUgdHlwZSkKK1dl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4LCBWYW9UeXBlIHR5cGUpCiAgICAgOiBXZWJHTENvbnRl
eHRPYmplY3QoY3R4KQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX2hhc0V2ZXJCZWVuQm91
bmQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCShyZXZpc2lvbiAxNzg2MDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgfldlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVMoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVM+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBWYW9UeXBl
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBjcmVh
dGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSosIFZhb1R5cGUpOwogICAgIAogICAgIC8vIENh
Y2hlZCB2YWx1ZXMgZm9yIHZlcnRleCBhdHRyaWIgcmFuZ2UgY2hlY2tzCiAgICAgc3RydWN0IFZl
cnRleEF0dHJpYlN0YXRlIHsKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
VmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcik7CiAK
IHByaXZhdGU6Ci0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqLCBWYW9UeXBlKTsKKyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqLCBWYW9UeXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVP
YmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7
CiAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzg2MDgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNS0wMS0xNiAgUm9nZXIgRm9u
ZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkdMMjogU3VwcG9ydCB3ZWJn
bDIgY29udGV4dCBjcmVhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNjQwOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUwMDIxNzA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvYmFkLWFyZ3VtZW50cy10ZXN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9udWxsLW9iamVjdC1iZWhhdmlvdXItZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9qcy9kb20vZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWV4
cGVjdGVkLnR4dDoKKwogMjAxNS0wMS0xNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgdGhlIGFsdGVybmF0aXZlIHN5bnRheCBmb3IgQ1NTIFNl
bGVjdG9yJ3MgZGVzY2VuZGFudCBjb21iaW5hdG9yICgiPj4iKQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvYmFkLWFyZ3VtZW50cy10ZXN0LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9iYWQtYXJndW1lbnRzLXRlc3Qt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNzg2MDQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9iYWQtYXJndW1lbnRzLXRlc3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC01LDIxICs1LDIxIEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEK
IFBBU1MgUHJvZ3JhbSBDb21waWxlZAogUEFTUyBTaGFkZXIgQ29tcGlsZWQKIFBBU1MgZ2V0VW5p
Zm9ybUxvY2F0aW9uIHN1Y2NlZWRlZAotUEFTUyBjb250ZXh0LmNvbXBpbGVTaGFkZXIoYXJndW1l
bnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdzaGFkZXInKSB0byBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY29tcGlsZVNoYWRlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9m
IFdlYkdMU2hhZGVyLgotUEFTUyBjb250ZXh0LmxpbmtQcm9ncmFtKGFyZ3VtZW50KSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dC5saW5rUHJvZ3JhbSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUHJvZ3Jh
bS4KLVBBU1MgY29udGV4dC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgYXJndW1lbnQpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCdzaGFkZXInKSB0byBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuYXR0YWNoU2hhZGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xTaGFkZXIu
Ci1QQVNTIGNvbnRleHQuYXR0YWNoU2hhZGVyKGFyZ3VtZW50LCBzaGFkZXIpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmF0dGFjaFNoYWRlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUHJvZ3JhbS4K
LVBBU1MgY29udGV4dC5kZXRhY2hTaGFkZXIocHJvZ3JhbSwgYXJndW1lbnQpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCdzaGFkZXInKSB0byBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQuZGV0YWNoU2hhZGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xTaGFkZXIuCi1Q
QVNTIGNvbnRleHQuZGV0YWNoU2hhZGVyKGFyZ3VtZW50LCBzaGFkZXIpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmRldGFjaFNoYWRlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUHJvZ3JhbS4KLVBB
U1MgY29udGV4dC51c2VQcm9ncmFtKGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC51c2VQcm9n
cmFtIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgotUEFTUyBjb250ZXh0LnNo
YWRlclNvdXJjZShhcmd1bWVudCwgJ2ZvbycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFy
Z3VtZW50IDEgKCdzaGFkZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuc2hhZGVyU291cmNl
IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xTaGFkZXIuCi1QQVNTIGNvbnRleHQuYmluZEF0
dHJpYkxvY2F0aW9uKGFyZ3VtZW50LCAwLCAnZm9vJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuYmluZEF0
dHJpYkxvY2F0aW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgotUEFTUyBj
b250ZXh0LmJpbmRCdWZmZXIoY29udGV4dC5BUlJBWV9CVUZGRVIsIGFyZ3VtZW50KSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAyICgnYnVmZmVyJykgdG8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmJpbmRCdWZmZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTEJ1ZmZlci4K
LVBBU1MgY29udGV4dC5iaW5kRnJhbWVidWZmZXIoY29udGV4dC5GUkFNRUJVRkZFUiwgYXJndW1l
bnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCdmcmFtZWJ1ZmZlcicp
IHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5iaW5kRnJhbWVidWZmZXIgbXVzdCBiZSBhbiBpbnN0
YW5jZSBvZiBXZWJHTEZyYW1lYnVmZmVyLgotUEFTUyBjb250ZXh0LmJpbmRSZW5kZXJidWZmZXIo
Y29udGV4dC5SRU5ERVJCVUZGRVIsIGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBBcmd1bWVudCAyICgncmVuZGVyYnVmZmVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmJp
bmRSZW5kZXJidWZmZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFJlbmRlcmJ1ZmZlci4K
LVBBU1MgY29udGV4dC5iaW5kVGV4dHVyZShjb250ZXh0LlRFWFRVUkVfMkQsIGFyZ3VtZW50KSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAyICgndGV4dHVyZScpIHRvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dC5iaW5kVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdM
VGV4dHVyZS4KLVBBU1MgY29udGV4dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihjb250ZXh0LkZS
QU1FQlVGRkVSLCBjb250ZXh0LkRFUFRIX0FUVEFDSE1FTlQsIGNvbnRleHQuUkVOREVSQlVGRkVS
LCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgNCAoJ3JlbmRl
cmJ1ZmZlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUmVuZGVyYnVmZmVyLgotUEFTUyBjb250ZXh0
LmZyYW1lYnVmZmVyVGV4dHVyZTJEKGNvbnRleHQuRlJBTUVCVUZGRVIsIGNvbnRleHQuQ09MT1Jf
QVRUQUNITUVOVDAsIGNvbnRleHQuVEVYVFVSRV8yRCwgYXJndW1lbnQsIDApIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDQgKCd0ZXh0dXJlJykgdG8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmZyYW1lYnVmZmVyVGV4dHVyZTJEIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xU
ZXh0dXJlLgorUEFTUyBjb250ZXh0LmNvbXBpbGVTaGFkZXIoYXJndW1lbnQpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdzaGFkZXInKSB0byBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmNvbXBpbGVTaGFkZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFNoYWRl
ci4KK1BBU1MgY29udGV4dC5saW5rUHJvZ3JhbShhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmxpbmtQcm9ncmFtIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgorUEFT
UyBjb250ZXh0LmF0dGFjaFNoYWRlcihwcm9ncmFtLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9u
IFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ3NoYWRlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuYXR0YWNoU2hhZGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xTaGFkZXIuCitQ
QVNTIGNvbnRleHQuYXR0YWNoU2hhZGVyKGFyZ3VtZW50LCBzaGFkZXIpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5hdHRhY2hTaGFkZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0u
CitQQVNTIGNvbnRleHQuZGV0YWNoU2hhZGVyKHByb2dyYW0sIGFyZ3VtZW50KSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAyICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5kZXRhY2hTaGFkZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFNoYWRl
ci4KK1BBU1MgY29udGV4dC5kZXRhY2hTaGFkZXIoYXJndW1lbnQsIHNoYWRlcikgdGhyZXcgZXhj
ZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmRldGFjaFNoYWRlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUHJv
Z3JhbS4KK1BBU1MgY29udGV4dC51c2VQcm9ncmFtKGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UudXNlUHJvZ3JhbSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUHJvZ3JhbS4KK1BB
U1MgY29udGV4dC5zaGFkZXJTb3VyY2UoYXJndW1lbnQsICdmb28nKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBBcmd1bWVudCAxICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5zaGFkZXJTb3VyY2UgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFNoYWRlci4KK1BB
U1MgY29udGV4dC5iaW5kQXR0cmliTG9jYXRpb24oYXJndW1lbnQsIDAsICdmb28nKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuYmluZEF0dHJpYkxvY2F0aW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2Yg
V2ViR0xQcm9ncmFtLgorUEFTUyBjb250ZXh0LmJpbmRCdWZmZXIoY29udGV4dC5BUlJBWV9CVUZG
RVIsIGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAyICgnYnVm
ZmVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5iaW5kQnVmZmVyIG11c3QgYmUgYW4g
aW5zdGFuY2Ugb2YgV2ViR0xCdWZmZXIuCitQQVNTIGNvbnRleHQuYmluZEZyYW1lYnVmZmVyKGNv
bnRleHQuRlJBTUVCVUZGRVIsIGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBB
cmd1bWVudCAyICgnZnJhbWVidWZmZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmJp
bmRGcmFtZWJ1ZmZlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMRnJhbWVidWZmZXIuCitQ
QVNTIGNvbnRleHQuYmluZFJlbmRlcmJ1ZmZlcihjb250ZXh0LlJFTkRFUkJVRkZFUiwgYXJndW1l
bnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCdyZW5kZXJidWZmZXIn
KSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmJpbmRSZW5kZXJidWZmZXIgbXVzdCBiZSBh
biBpbnN0YW5jZSBvZiBXZWJHTFJlbmRlcmJ1ZmZlci4KK1BBU1MgY29udGV4dC5iaW5kVGV4dHVy
ZShjb250ZXh0LlRFWFRVUkVfMkQsIGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBBcmd1bWVudCAyICgndGV4dHVyZScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuYmlu
ZFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFRleHR1cmUuCitQQVNTIGNvbnRl
eHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5E
RVBUSF9BVFRBQ0hNRU5ULCBjb250ZXh0LlJFTkRFUkJVRkZFUiwgYXJndW1lbnQpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDQgKCdyZW5kZXJidWZmZXInKSB0byBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIG11c3QgYmUgYW4gaW5z
dGFuY2Ugb2YgV2ViR0xSZW5kZXJidWZmZXIuCitQQVNTIGNvbnRleHQuZnJhbWVidWZmZXJUZXh0
dXJlMkQoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5DT0xPUl9BVFRBQ0hNRU5UMCwgY29u
dGV4dC5URVhUVVJFXzJELCBhcmd1bWVudCwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
QXJndW1lbnQgNCAoJ3RleHR1cmUnKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmZyYW1l
YnVmZmVyVGV4dHVyZTJEIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xUZXh0dXJlLgogUEFT
UyBjb250ZXh0LnVuaWZvcm0yZnYoYXJndW1lbnQsIG5ldyBGbG9hdDMyQXJyYXkoWzAuMCwgMC4w
XSkpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIGNvbnRleHQu
dW5pZm9ybTJpdihhcmd1bWVudCwgbmV3IEludDMyQXJyYXkoWzAsIDBdKSkgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1MgY29udGV4dC51bmlmb3JtTWF0cml4MmZ2
KGFyZ3VtZW50LCBmYWxzZSwgbmV3IEZsb2F0MzJBcnJheShbMC4wLCAwLjAsIDAuMCwgMC4wXSkp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCkBAIC0yNywyNSArMjcsMjUg
QEAgUEFTUyBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIoYXJndW1lbgogUEFTUyBjb250ZXh0
LmdldFNoYWRlclBhcmFtZXRlcihhcmd1bWVudCwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogVHlwZSBlcnJvci4KIFBBU1MgY29udGV4dC5nZXRVbmlmb3JtKGFyZ3VtZW50LCBsb2MpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIGNvbnRleHQuZ2V0VW5p
Zm9ybShwcm9ncmFtLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBl
cnJvci4KLVBBU1MgY29udGV4dC5nZXRVbmlmb3JtTG9jYXRpb24oYXJndW1lbnQsICd1X21vZGVs
Vmlld1Byb2pNYXRyaXgnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgn
cHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5nZXRVbmlmb3JtTG9jYXRpb24gbXVz
dCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCi1QQVNTIGNvbnRleHQuZ2V0UHJvZ3Jh
bUluZm9Mb2coYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEg
KCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmdldFByb2dyYW1JbmZvTG9nIG11
c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgotUEFTUyBjb250ZXh0LmdldFNoYWRl
ckluZm9Mb2coYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEg
KCdzaGFkZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuZ2V0U2hhZGVySW5mb0xvZyBtdXN0
IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMU2hhZGVyLgotUEFTUyBjb250ZXh0LmdldFNoYWRlclNv
dXJjZShhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3No
YWRlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5nZXRTaGFkZXJTb3VyY2UgbXVzdCBiZSBh
biBpbnN0YW5jZSBvZiBXZWJHTFNoYWRlci4KLVBBU1MgY29udGV4dC5jb21waWxlU2hhZGVyKGFy
Z3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgnc2hhZGVyJykg
dG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNvbXBpbGVTaGFkZXIgbXVzdCBiZSBhbiBpbnN0YW5j
ZSBvZiBXZWJHTFNoYWRlci4KLVBBU1MgY29udGV4dC5saW5rUHJvZ3JhbShhcmd1bWVudCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJl
bmRlcmluZ0NvbnRleHQubGlua1Byb2dyYW0gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFBy
b2dyYW0uCi1QQVNTIGNvbnRleHQuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGFyZ3VtZW50KSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAyICgnc2hhZGVyJykgdG8gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmF0dGFjaFNoYWRlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMU2hh
ZGVyLgotUEFTUyBjb250ZXh0LmF0dGFjaFNoYWRlcihhcmd1bWVudCwgc2hhZGVyKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dC5hdHRhY2hTaGFkZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dy
YW0uCi1QQVNTIGNvbnRleHQuZGV0YWNoU2hhZGVyKHByb2dyYW0sIGFyZ3VtZW50KSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAyICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmRldGFjaFNoYWRlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMU2hhZGVy
LgotUEFTUyBjb250ZXh0LmRldGFjaFNoYWRlcihhcmd1bWVudCwgc2hhZGVyKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5n
Q29udGV4dC5kZXRhY2hTaGFkZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0u
Ci1QQVNTIGNvbnRleHQudXNlUHJvZ3JhbShhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQudXNl
UHJvZ3JhbSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUHJvZ3JhbS4KLVBBU1MgY29udGV4
dC5zaGFkZXJTb3VyY2UoYXJndW1lbnQsICdmb28nKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBBcmd1bWVudCAxICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LnNoYWRlclNv
dXJjZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMU2hhZGVyLgotUEFTUyBjb250ZXh0LmJp
bmRBdHRyaWJMb2NhdGlvbihhcmd1bWVudCwgMCwgJ2ZvbycpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IEFyZ3VtZW50IDEgKCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmJp
bmRBdHRyaWJMb2NhdGlvbiBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUHJvZ3JhbS4KLVBB
U1MgY29udGV4dC5iaW5kQnVmZmVyKGNvbnRleHQuQVJSQVlfQlVGRkVSLCBhcmd1bWVudCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ2J1ZmZlcicpIHRvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dC5iaW5kQnVmZmVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xCdWZm
ZXIuCi1QQVNTIGNvbnRleHQuYmluZEZyYW1lYnVmZmVyKGNvbnRleHQuRlJBTUVCVUZGRVIsIGFy
Z3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAyICgnZnJhbWVidWZm
ZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuYmluZEZyYW1lYnVmZmVyIG11c3QgYmUgYW4g
aW5zdGFuY2Ugb2YgV2ViR0xGcmFtZWJ1ZmZlci4KLVBBU1MgY29udGV4dC5iaW5kUmVuZGVyYnVm
ZmVyKGNvbnRleHQuUkVOREVSQlVGRkVSLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogQXJndW1lbnQgMiAoJ3JlbmRlcmJ1ZmZlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dC5iaW5kUmVuZGVyYnVmZmVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xSZW5kZXJidWZm
ZXIuCi1QQVNTIGNvbnRleHQuYmluZFRleHR1cmUoY29udGV4dC5URVhUVVJFXzJELCBhcmd1bWVu
dCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ3RleHR1cmUnKSB0byBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuYmluZFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBX
ZWJHTFRleHR1cmUuCi1QQVNTIGNvbnRleHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoY29udGV4
dC5GUkFNRUJVRkZFUiwgY29udGV4dC5ERVBUSF9BVFRBQ0hNRU5ULCBjb250ZXh0LlJFTkRFUkJV
RkZFUiwgYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDQgKCdy
ZW5kZXJidWZmZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFJlbmRlcmJ1ZmZlci4KLVBBU1MgY29u
dGV4dC5mcmFtZWJ1ZmZlclRleHR1cmUyRChjb250ZXh0LkZSQU1FQlVGRkVSLCBjb250ZXh0LkNP
TE9SX0FUVEFDSE1FTlQwLCBjb250ZXh0LlRFWFRVUkVfMkQsIGFyZ3VtZW50LCAwKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCA0ICgndGV4dHVyZScpIHRvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdl
YkdMVGV4dHVyZS4KK1BBU1MgY29udGV4dC5nZXRVbmlmb3JtTG9jYXRpb24oYXJndW1lbnQsICd1
X21vZGVsVmlld1Byb2pNYXRyaXgnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVu
dCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuZ2V0VW5pZm9ybUxv
Y2F0aW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgorUEFTUyBjb250ZXh0
LmdldFByb2dyYW1JbmZvTG9nKGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBB
cmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuZ2V0UHJv
Z3JhbUluZm9Mb2cgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCitQQVNTIGNv
bnRleHQuZ2V0U2hhZGVySW5mb0xvZyhhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogQXJndW1lbnQgMSAoJ3NoYWRlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuZ2V0
U2hhZGVySW5mb0xvZyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMU2hhZGVyLgorUEFTUyBj
b250ZXh0LmdldFNoYWRlclNvdXJjZShhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogQXJndW1lbnQgMSAoJ3NoYWRlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuZ2V0
U2hhZGVyU291cmNlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xTaGFkZXIuCitQQVNTIGNv
bnRleHQuY29tcGlsZVNoYWRlcihhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
QXJndW1lbnQgMSAoJ3NoYWRlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY29tcGls
ZVNoYWRlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMU2hhZGVyLgorUEFTUyBjb250ZXh0
LmxpbmtQcm9ncmFtKGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVu
dCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UubGlua1Byb2dyYW0g
bXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCitQQVNTIGNvbnRleHQuYXR0YWNo
U2hhZGVyKHByb2dyYW0sIGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1
bWVudCAyICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5hdHRhY2hTaGFk
ZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFNoYWRlci4KK1BBU1MgY29udGV4dC5hdHRh
Y2hTaGFkZXIoYXJndW1lbnQsIHNoYWRlcikgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJn
dW1lbnQgMSAoJ3Byb2dyYW0nKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmF0dGFjaFNo
YWRlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUHJvZ3JhbS4KK1BBU1MgY29udGV4dC5k
ZXRhY2hTaGFkZXIocHJvZ3JhbSwgYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6
IEFyZ3VtZW50IDIgKCdzaGFkZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmRldGFj
aFNoYWRlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMU2hhZGVyLgorUEFTUyBjb250ZXh0
LmRldGFjaFNoYWRlcihhcmd1bWVudCwgc2hhZGVyKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBBcmd1bWVudCAxICgncHJvZ3JhbScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuZGV0
YWNoU2hhZGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgorUEFTUyBjb250
ZXh0LnVzZVByb2dyYW0oYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3Vt
ZW50IDEgKCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS51c2VQcm9ncmFt
IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xQcm9ncmFtLgorUEFTUyBjb250ZXh0LnNoYWRl
clNvdXJjZShhcmd1bWVudCwgJ2ZvbycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3Vt
ZW50IDEgKCdzaGFkZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLnNoYWRlclNvdXJj
ZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMU2hhZGVyLgorUEFTUyBjb250ZXh0LmJpbmRB
dHRyaWJMb2NhdGlvbihhcmd1bWVudCwgMCwgJ2ZvbycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEFyZ3VtZW50IDEgKCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5i
aW5kQXR0cmliTG9jYXRpb24gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCitQ
QVNTIGNvbnRleHQuYmluZEJ1ZmZlcihjb250ZXh0LkFSUkFZX0JVRkZFUiwgYXJndW1lbnQpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCdidWZmZXInKSB0byBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmJpbmRCdWZmZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJH
TEJ1ZmZlci4KK1BBU1MgY29udGV4dC5iaW5kRnJhbWVidWZmZXIoY29udGV4dC5GUkFNRUJVRkZF
UiwgYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCdmcmFt
ZWJ1ZmZlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuYmluZEZyYW1lYnVmZmVyIG11
c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xGcmFtZWJ1ZmZlci4KK1BBU1MgY29udGV4dC5iaW5k
UmVuZGVyYnVmZmVyKGNvbnRleHQuUkVOREVSQlVGRkVSLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ3JlbmRlcmJ1ZmZlcicpIHRvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuYmluZFJlbmRlcmJ1ZmZlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdl
YkdMUmVuZGVyYnVmZmVyLgorUEFTUyBjb250ZXh0LmJpbmRUZXh0dXJlKGNvbnRleHQuVEVYVFVS
RV8yRCwgYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCd0
ZXh0dXJlJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5iaW5kVGV4dHVyZSBtdXN0IGJl
IGFuIGluc3RhbmNlIG9mIFdlYkdMVGV4dHVyZS4KK1BBU1MgY29udGV4dC5mcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcihjb250ZXh0LkZSQU1FQlVGRkVSLCBjb250ZXh0LkRFUFRIX0FUVEFDSE1FTlQs
IGNvbnRleHQuUkVOREVSQlVGRkVSLCBhcmd1bWVudCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogQXJndW1lbnQgNCAoJ3JlbmRlcmJ1ZmZlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFJl
bmRlcmJ1ZmZlci4KK1BBU1MgY29udGV4dC5mcmFtZWJ1ZmZlclRleHR1cmUyRChjb250ZXh0LkZS
QU1FQlVGRkVSLCBjb250ZXh0LkNPTE9SX0FUVEFDSE1FTlQwLCBjb250ZXh0LlRFWFRVUkVfMkQs
IGFyZ3VtZW50LCAwKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCA0ICgndGV4
dHVyZScpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuZnJhbWVidWZmZXJUZXh0dXJlMkQg
bXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFRleHR1cmUuCiBQQVNTIGNvbnRleHQudW5pZm9y
bTJmdihhcmd1bWVudCwgbmV3IEZsb2F0MzJBcnJheShbMC4wLCAwLjBdKSkgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1MgY29udGV4dC51bmlmb3JtMml2KGFyZ3Vt
ZW50LCBuZXcgSW50MzJBcnJheShbMCwgMF0pKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBU
eXBlIGVycm9yLgogUEFTUyBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYoYXJndW1lbnQsIGZhbHNl
LCBuZXcgRmxvYXQzMkFycmF5KFswLjAsIDAuMCwgMC4wLCAwLjBdKSkgdGhyZXcgZXhjZXB0aW9u
IFR5cGVFcnJvcjogVHlwZSBlcnJvci4KQEAgLTUzLDEwICs1MywxMCBAQCBQQVNTIGNvbnRleHQu
Z2V0UHJvZ3JhbVBhcmFtZXRlcihhcmd1bWVuCiBQQVNTIGNvbnRleHQuZ2V0U2hhZGVyUGFyYW1l
dGVyKGFyZ3VtZW50LCAwKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgog
UEFTUyBjb250ZXh0LmdldFVuaWZvcm0oYXJndW1lbnQsIGxvYykgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1MgY29udGV4dC5nZXRVbmlmb3JtKHByb2dyYW0sIGFy
Z3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgotUEFTUyBjb250
ZXh0LmdldFVuaWZvcm1Mb2NhdGlvbihhcmd1bWVudCwgJ3VfbW9kZWxWaWV3UHJvak1hdHJpeCcp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDEgKCdwcm9ncmFtJykgdG8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmdldFVuaWZvcm1Mb2NhdGlvbiBtdXN0IGJlIGFuIGluc3RhbmNl
IG9mIFdlYkdMUHJvZ3JhbS4KLVBBU1MgY29udGV4dC5nZXRQcm9ncmFtSW5mb0xvZyhhcmd1bWVu
dCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3Byb2dyYW0nKSB0byBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuZ2V0UHJvZ3JhbUluZm9Mb2cgbXVzdCBiZSBhbiBpbnN0YW5j
ZSBvZiBXZWJHTFByb2dyYW0uCi1QQVNTIGNvbnRleHQuZ2V0U2hhZGVySW5mb0xvZyhhcmd1bWVu
dCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMSAoJ3NoYWRlcicpIHRvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dC5nZXRTaGFkZXJJbmZvTG9nIG11c3QgYmUgYW4gaW5zdGFuY2Ug
b2YgV2ViR0xTaGFkZXIuCi1QQVNTIGNvbnRleHQuZ2V0U2hhZGVyU291cmNlKGFyZ3VtZW50KSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1bWVudCAxICgnc2hhZGVyJykgdG8gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmdldFNoYWRlclNvdXJjZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdl
YkdMU2hhZGVyLgorUEFTUyBjb250ZXh0LmdldFVuaWZvcm1Mb2NhdGlvbihhcmd1bWVudCwgJ3Vf
bW9kZWxWaWV3UHJvak1hdHJpeCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50
IDEgKCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5nZXRVbmlmb3JtTG9j
YXRpb24gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFByb2dyYW0uCitQQVNTIGNvbnRleHQu
Z2V0UHJvZ3JhbUluZm9Mb2coYXJndW1lbnQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFy
Z3VtZW50IDEgKCdwcm9ncmFtJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5nZXRQcm9n
cmFtSW5mb0xvZyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMUHJvZ3JhbS4KK1BBU1MgY29u
dGV4dC5nZXRTaGFkZXJJbmZvTG9nKGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBBcmd1bWVudCAxICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5nZXRT
aGFkZXJJbmZvTG9nIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xTaGFkZXIuCitQQVNTIGNv
bnRleHQuZ2V0U2hhZGVyU291cmNlKGFyZ3VtZW50KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBBcmd1bWVudCAxICgnc2hhZGVyJykgdG8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5nZXRT
aGFkZXJTb3VyY2UgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTFNoYWRlci4KIFBBU1MgY29u
dGV4dC5jb21waWxlU2hhZGVyKGFyZ3VtZW50KSBpcyB1bmRlZmluZWQuCiBQQVNTIGNvbnRleHQu
bGlua1Byb2dyYW0oYXJndW1lbnQpIGlzIHVuZGVmaW5lZC4KIFBBU1MgY29udGV4dC5hdHRhY2hT
aGFkZXIocHJvZ3JhbSwgYXJndW1lbnQpIGlzIHVuZGVmaW5lZC4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL251bGwtb2JqZWN0LWJlaGF2aW91ci1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvbnVsbC1vYmplY3QtYmVo
YXZpb3VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTc4NjA0KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvbnVsbC1vYmplY3QtYmVoYXZpb3VyLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQsMTAgKzE0LDEwIEBAIFBBU1MgY29udGV4dC5kZXRhY2hTaGFkZXIodW5k
ZWZpbmVkLCBzaGEKIFBBU1MgY29udGV4dC5zaGFkZXJTb3VyY2UodW5kZWZpbmVkLCB1bmRlZmlu
ZWQpIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9WQUxVRS4KIFBBU1MgY29udGV4dC5zaGFk
ZXJTb3VyY2UodW5kZWZpbmVkLCAnZm9vJykgd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX1ZB
TFVFLgogUEFTUyBjb250ZXh0LmJpbmRBdHRyaWJMb2NhdGlvbih1bmRlZmluZWQsIDAsICdmb28n
KSB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfVkFMVUUuCi1QQVNTIGNvbnRleHQuYmluZEJ1
ZmZlcihjb250ZXh0LkFSUkFZX0JVRkZFUiwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
QXJndW1lbnQgMiAoJ2J1ZmZlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5iaW5kQnVmZmVy
IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgV2ViR0xCdWZmZXIuCi1QQVNTIGNvbnRleHQuYmluZEZy
YW1lYnVmZmVyKGNvbnRleHQuRlJBTUVCVUZGRVIsIDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEFyZ3VtZW50IDIgKCdmcmFtZWJ1ZmZlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5i
aW5kRnJhbWVidWZmZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBXZWJHTEZyYW1lYnVmZmVyLgot
UEFTUyBjb250ZXh0LmJpbmRSZW5kZXJidWZmZXIoY29udGV4dC5SRU5ERVJCVUZGRVIsIDApIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFyZ3VtZW50IDIgKCdyZW5kZXJidWZmZXInKSB0byBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuYmluZFJlbmRlcmJ1ZmZlciBtdXN0IGJlIGFuIGluc3RhbmNl
IG9mIFdlYkdMUmVuZGVyYnVmZmVyLgotUEFTUyBjb250ZXh0LmJpbmRUZXh0dXJlKGNvbnRleHQu
VEVYVFVSRV8yRCwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ3Rl
eHR1cmUnKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHQuYmluZFRleHR1cmUgbXVzdCBiZSBhbiBp
bnN0YW5jZSBvZiBXZWJHTFRleHR1cmUuCitQQVNTIGNvbnRleHQuYmluZEJ1ZmZlcihjb250ZXh0
LkFSUkFZX0JVRkZFUiwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAo
J2J1ZmZlcicpIHRvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuYmluZEJ1ZmZlciBtdXN0IGJl
IGFuIGluc3RhbmNlIG9mIFdlYkdMQnVmZmVyLgorUEFTUyBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZl
cihjb250ZXh0LkZSQU1FQlVGRkVSLCAwKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcmd1
bWVudCAyICgnZnJhbWVidWZmZXInKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmJpbmRG
cmFtZWJ1ZmZlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFdlYkdMRnJhbWVidWZmZXIuCitQQVNT
IGNvbnRleHQuYmluZFJlbmRlcmJ1ZmZlcihjb250ZXh0LlJFTkRFUkJVRkZFUiwgMCkgdGhyZXcg
ZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ3JlbmRlcmJ1ZmZlcicpIHRvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuYmluZFJlbmRlcmJ1ZmZlciBtdXN0IGJlIGFuIGluc3RhbmNl
IG9mIFdlYkdMUmVuZGVyYnVmZmVyLgorUEFTUyBjb250ZXh0LmJpbmRUZXh0dXJlKGNvbnRleHQu
VEVYVFVSRV8yRCwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJndW1lbnQgMiAoJ3Rl
eHR1cmUnKSB0byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmJpbmRUZXh0dXJlIG11c3QgYmUg
YW4gaW5zdGFuY2Ugb2YgV2ViR0xUZXh0dXJlLgogUEFTUyBjb250ZXh0LmJpbmRCdWZmZXIoY29u
dGV4dC5BUlJBWV9CVUZGRVIsIG51bGwpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCiBQ
QVNTIGNvbnRleHQuYmluZEZyYW1lYnVmZmVyKGNvbnRleHQuRlJBTUVCVUZGRVIsIG51bGwpIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCiBQQVNTIGNvbnRleHQuYmluZFJlbmRlcmJ1ZmZl
cihjb250ZXh0LlJFTkRFUkJVRkZFUiwgbnVsbCkgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
Ui4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9qcy9kb20vZ2xvYmFsLWNvbnN0cnVj
dG9ycy1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvanMvZG9tL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDE3ODYwNCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9qcy9k
b20vZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTg4Myw2ICsxODgzLDExIEBAIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG8KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdXYXZlU2hhcGVyTm9kZScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dhdmVTaGFwZXJOb2RlJyku
ZW51bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ1dhdmVTaGFwZXJOb2RlJykuY29uZmlndXJhYmxlIGlzIHRydWUKK1BBU1MgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXZWJHTDJSZW5kZXJpbmdDb250
ZXh0JykudmFsdWUgaXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dAorUEFTUyBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dlYkdMMlJlbmRlcmluZ0NvbnRleHQnKS5oYXNP
d25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdXZWJHTDJSZW5kZXJpbmdDb250ZXh0JykuaGFzT3duUHJvcGVydHko
J3NldCcpIGlzIGZhbHNlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnV2ViR0wyUmVuZGVyaW5nQ29udGV4dCcpLmVudW1lcmFibGUgaXMgZmFsc2UKK1BBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXZWJHTDJSZW5kZXJpbmdD
b250ZXh0JykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdXZWJHTEFjdGl2ZUluZm8nKS52YWx1ZSBpcyBXZWJHTEFjdGl2
ZUluZm8KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXZWJH
TEFjdGl2ZUluZm8nKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXZWJHTEFjdGl2ZUluZm8nKS5oYXNP
d25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UK
</data>
<flag name="review"
          id="269751"
          type_id="1"
          status="+"
          setter="dino"
    />
    <flag name="commit-queue"
          id="269755"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>244824</attachid>
            <date>2015-01-16 17:46:54 -0800</date>
            <delta_ts>2015-01-16 17:46:54 -0800</delta_ts>
            <desc>Archive of layout-test-results from ews103 for mac-mavericks</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>562303</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
7jHGYMiXFu8hS3VUf/77Q7jkHhQml2ZYMO+M+WNMXCpoJTDOIdAP2AH4NGh6Q21cJ5LKnZY50o7N
rzFEm4Lsak3U8Zq+UEsDBBQAAgAIAFuLMEZjqqxsggAAAKgAAABSABwAaHR0cC90ZXN0cy9zZWN1
cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLXVuYWZmZWN0ZWQtYnktc3R5bGUtc3JjLTIt
c3RkZXJyLnR4dFVUCQADXrq5VF66uVR1eAsAAQT1AQAABFAAAAAtjUEKwzAMBO95hV4QO72k+BWF
viC4G2JQLCMppf59TSl7WobZzXK2wpsXqQRV0UR7YdDh3lIIy22d48iS7jHGYMiXFu8hS3VUf/77
Q7jkHhQml2ZYMO+M+WNMXCpoJTDOIdAP2AH4NGh6Q21cJ5LKnZY50o7NrzFEm4Lsak3U8Zq+UEsD
BBQAAgAIAFuLMEZgS2YQkQAAAPsBAABFABwAaHR0cC90ZXN0cy9zZWN1cml0eS94c3MtREVOSUVE
LXhzbC1kb2N1bWVudC1zZWN1cml0eU9yaWdpbi1zdGRlcnIudHh0VVQJAANeurlUXrq5VHV4CwAB
BPUBAAAEUAAAAO2OMQ6DMAxFd07hC4QEllaZYejSngEFUyKZJLKdCm5fOvQGHau/vq/3Qt5KpElj
ToDMmT0skRBW1eKt7fpL6851/uqcs4KhctTD7iJmGO+3cTC7kJlzqBsmNV/gwfEZU7tvBBQTQg9I
+CFA9CCUFVGb8+lfyHK6PeREB3StgwUnrYwCEyNILSWz4tyEf+iPQ99QSwMEFAACAAgAIoswRuqK
fEJhBQAABQ8AAAoAHABodHRwZC5jb25mVVQJAAPwublU2rq5VHV4CwABBPUBAAAEUAAAAK1XbW/b
NhD+rl9BuDCwFZOcuHHnDYEB13GaLEmdWU4DLEkNWqIk1hLJkVQSZ+t++4605RfJEQpsDmCTx+e5
Ox6Px4tP5CORY841arRyJRuOc8mD+SlNCQh0Jlq3ZHZBdSvRWoReCmsN55qGrwEEDRuOH3BJPnAs
X4Upg5gZBBic0IzwXKN3BwfOBSGin9JHgkbMucLP6/mY/JkTpRU63EYV1MOO41xR5gssiW+3BEDD
35F0HF9jqXcAg5QSZtR2Dsy0MHNN5CChaWjMwcdEBYdXPMxhPzjXycs04UpPs6UkpTPyTIIWFjhI
SLsF4ukG5Sm+TacsSPOQ1HFXkBIx5fE04CyicR13gyrRE4JD2HYddwUpEZVK60iwXCJkcCp1DLNe
omBFaz0z6yVKENM6BiyXCIzEXFOsKWd1xC1Y+eQyHJMMi9qjW2HK+wuMvvotLiFlYkpxPc0ASiRJ
niTVtWewgpSIIhGdgrX6lMkwNyhDdJY36RPOCDps/+wdwN+h4xyfUEkCzeUCtXqO0TESdmvonIWg
S6FTnqb8yV9kl5TNFbrKU00/U/Kk0BBMDT6eA9LeAGXpfYMegSVJQ2JmS6USchXiA2s/hYQtNlAU
SZ6ZFee4tfal5zj9ICBKmZpkXfYSja0EXDZChf5BjS/33g93Z8nD3UQ//H13Ej7c+ephar5+bPRe
t3sCg41ZI/Ehg1S0sO4et6x+cOFGkQFmnNEAp9YJKHMnJMIQgclCEKTJs26JFFPmnEHpYAC55Hye
C4VGUWTKUHxJHkmKnrBkZnbKZYaheDcT1ExRM0dNje4bTXnfQM2eQs2Zmf01JhGRRH6jIDZzcEO6
/RgqnxE1UMCzGWUk/C6NFp7xXfMbE8jtoeZNA5LQCnZR1jBeGm4gOyjSyKcxwzqXNibO8XlUVJN1
kgc9iGQh75UxtqoEyzPqh+ElZnEOBlCIkRfOK2KWIo+lFTFhyCOsKtYgJhVxJJEXyapJSK6wioZj
80jVZGJScY0eJFgqMHfuj9xut/OL20UeVXw5rHAp+EV1RfwV9vwV71PZPmi33d+uYZmqCm0O25nL
V2kXY+uKO6/umEHYWDVsjIOYV8QCAiH4qztuL82IaqgEbFfoPWJ3Js0K/FQWU/2CvDSvyAOIUYCr
h6TgkKqhUY/IU49VJYAOQH9QZcgcebJq9iVxJ7fIgx/9VI7ABxp3irqLvGLmzWBQht6efzoZ3fru
YbtzCOaFHZRBg+vu+/drfYGA2atBN6Zs2Dc+F5iL0XnXHRdq5px23UqS3Ax8OLcCkweqvQ9xtI04
qiAmp5Dta4SOuo6F7N7z7fd5dd3NpwjwtaQcXraFuclw9eGag2a4p6G9f3Bf4G5AnkNmQhZCPi1z
Bw7L5AnkBJw/nPXqbHbKzcpbW6exECnUcONE69mFrhJ5On5ZY4Ys4CFlMXp2oVYKCY8M8v7Ysxq/
UIG8+GWXfoZZmMIjAz2MqwJJTdrDGDI83XXDPheJzuA+KfNTVqBsZXWFiW9YYKogFrpYuVTZNqyu
xtqXf1Nj94TC9vcu4MDZRHwfcIb19wBdxXMZEKtY7cuMkMrtjFg//bbtgL4bvj0brOWw8K9yyLAw
jVIc244bug4O/yxwtrukEi71lAvCphqmsFwTtqLZWjk3Xk6HLIY317x2W8IBZyGC13T4+83Qn0yv
hpOz0ck39GUy7g+G28CxUe69RS66O30oGf9Mpc5xajoI9PbX7tHRu6Xhvf2aXfAvN94ct7b4oO6N
8wb14UiIqwQJaEQDFJl2ZqE0yZCQXBPbunqAXDVSDalk8H/0S1u9pOnOvLf33r1nuqIw4nL+Xyxs
NYb/AlBLAwQKAAAAAABlizBGAAAAAAAAAAAAAAAAAwAcAGpzL1VUCQADbbq5VOG6uVR1eAsAAQT1
AQAABFAAAABQSwMECgAAAAAAZYswRgAAAAAAAAAAAAAAAAcAHABqcy9kb20vVVQJAANuurlU4bq5
VHV4CwABBPUBAAAEUAAAAFBLAwQUAAIACABlizBGJn7o8G4lAAAc7gIAMAAcAGpzL2RvbS9nbG9i
YWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtYWN0dWFsLnR4dFVUCQADbbq5VG26uVR1eAsAAQT1
AQAABFAAAAC9nV9z27qZh+/Pp/D0prszO73oN4j/JZ4Tx67lpDt7R0uwzA1FqnwpJ95Pv6JkSQAI
gKrwvJ7pdHrwIs/vNA9BgSRIPBrpzrrmzNSyas1Z91J0Z/OqeSqqs2lTS9eupl3TytlL8dpXzVlb
zl+6s6Lr2vJp1Rn544+7+kxW06kR+a+zt2Z19qusqjMx5qxY/3dbGjlrns/+cv9pMvnL2WLdq5ib
dc/npqqaX2Z29vR29pfHq8nj2cXd7f3Xq8erv/ztjz/+6Luf3T39r5l2f5ub7u5Xfd82S9N2b5dG
pm25XP9b/cf2X/S/zv76qS6qt3XYt2Zm/vqff3stqpU5K+XMbs9DvhRi/YH/+Osa8Nf/7COei0pg
toBsU68Wpi2eKgMB10fFczlf7ZHrI+TfJ5aLoiub+urV1J3ry67kYmFnI3RB6YQ3D0mYWw97x9f6
n09DsG7CTAGYgIctiPjbX83Kxvnr7xtOhLACIlAhoICCdxLl4Hz1/GzagYltcxaQtxJFC4eGDO15
rKdJs2qnZjA1CHWAQrQsJkNEIwQ165Apx+tCV9abH7qgYq/ORPCCxzNEIQPSOwRTdr+W0pk6cK7d
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
49nF3e3916vHqz/++H9QSwMEFAACAAgAZYswRlFDcRUsAQAAFgUAAC4AHABqcy9kb20vZ2xvYmFs
LWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWRpZmYudHh0VVQJAANturlUbrq5VHV4CwABBPUBAAAE
UAAAAL2RwU4CMRCG7zxFbwtZug2aEI+LYozRCGETOc/uDktJ2ZLOFOHtbdCoIIlRFk89zPT72v+X
Ugr1bI1fIqkhMKjbaaammD9ofj+uvTalmqBBIFQGttazZCSWDskbJrUgVdqlqozNwcjC1sTOF2wd
SWB2OvdhXeJmhQVjmfCGW3Ec/5cXCvZgdtY0FbJ31b/s9kW8O3s9kaYtMR5kmRjli/C+pEIevdRj
Z1foeDtEKpxeBWb7TdMV0RTWmM0hzJ9siVEnmQN9udKOCDnqCE1iBobwZDzWISUHucHmmCGsma78
BzUEh634l1DM7x4vJliX6HRd3diacRN+nqzB+B31+EZjnsPcq/3cz6Wh82iO1dwU+2jd4g/wQcF6
jff1zH7r+XN0OvmHZhvnH1T6ClBLAwQUAAIACABlizBGbzvPz1glAAAy7AIAMgAcAGpzL2RvbS9n
bG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0VVQJAANturlUbbq5VHV4
CwABBPUBAAAEUAAAAL2dX3PbOJZH3/tTuOZldqu25mG+QfwvcXUceywns7VvtATL3FCkhpdy4v30
K0qWBIAAqBHOdVVXVwcXPr+0D0FBJEg8GunOuubM1LJqzVn3UnRn86p5KqqzaVNL166mXdPK2Uvx
2lfNWVvOX7qzouva8mnVGfnjj7v6TFbTqRH5r7O3ZnX2q6yqMzHmrFj/uy2NnDXPZ3+5/zSZ/OVs
se5VzM2653NTVc0vMzt7ejv7y+PV5PHs4u72/uvV49Vf/vbHH3/03c/unv7XTLu/zU1396u+b5ul
abu3SyPTtlyu/1b/sf2L/tfZXz/VRfW2DvvWzMxf//Nvr0W1MmelnNnteciXQqwf+I+/rgF//c8+
4rmoBGYLyDb1amHa4qkyEHB9VDyX89UeuT5C/n1iuSi6sqmvXk3dub7sSi4WdjZCF5ROePOQhLn1
sHd8rf98GoJ1E2YKwAQ8bEHEb381Kxvn1983nAhhBUSgQkABBe8kysH56vnZtAMT2+YsIG8lihYO
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
S9eupl3TytlL8dpXzVlbzl+6s6Lr2vJp1Rn544+7+kxW06kR+a+zt2Z19qusqjMx5qxY/3dbGjlr
ns/+cv9pMvnL2WLdq5ibdc/npqqaX2Z29vR29pfHq8nj2cXd7f3Xq8erv/ztjz/+6Luf3T39r5l2
f5ub7u5Xfd82S9N2b5dGpm25XP9b/cf2X/S/zv76qS6qt3XYt2Zm/vqff3stqpU5K+XMbs9DvhRi
/YH/+Osa8Nf/7COei0pgtoBsU68Wpi2eKgMB10fFczlf7ZHrI+TfJ5aLoiub+urV1J3ry67kYmFn
I3RB6YQ3D0mYWw97x9f6n09DsG7CTAGYgIctiPjbX83Kxvnr7xtOhLACIlAhoICCdxLl4Hz1/Gza
gYltcxaQtxJFC4eGDO15rKdJs2qnZjA1CHWAQrQsJkNEIwQ165Apx+tCV9abH7qgYq/ORPCCxzNE
IQPSOwRTdr+W0pk6cK7dFTKhvMgEXEg4pM4iUs6Cw/DUsac24NRGGTu04PF0X7TFYiBn05qD4/XE
yIKRIUE7HGaobfpbKWU9H14dB+pMhIK/0QxRyKCcDsCA3fOi7cu20Pemk0GotjhWGGy+nAOL8GGe
m9Z8bYrZYKB5pWww62kULywe8DZgYv6+11XcoFUE4AoW0wFCB1AmXSrhsvzXqphdl1U3vIfv1/LR
rMhxvsB8QOMQSlhc/w/H3PqfT0OwhsJMAZiAiS0I+Nu/uPz0+Gmy7ru+Crct2O15SNTKCFtAdr4l
D0jYmkwuXop2/X/zYVU55zu3kotlnY3RBaUD3nwkY+66qbvrYmoC6uxSNpiWN4IXFo/o85iMv5vF
smlDA+9QyITS5pJwIeGINYfIOPvTvD23xSI05uxSNpg2N4IXFo/Y85isP0kIlDyDoqxQlB2KhkRB
Ld6aWVkEDO7b85C0uRRbQDZizAYytu6Leeh8uWvOAtKqEmjh0Igoiwd5astF2ZWv5kdvybflFAE4
bm4sQOgAxqJPZVwGxttpY01pnCmNMXJ8oWOrh/UPuQNO+uYsoIabCFo4NOboncd4mnRvlbk006po
i8EtrGEZCaD9HREhfATiM8AFvQZOivv2PKSKQqVzpM3mpKFnyw1x8mJMF9K1KWRCVYTF4ELCOWU7
IuMsNGk8ca6oNUXUmhmiE0J2HrihBSYe+/Y8pIohpbmHzeZMgbOPon4t5HNbzEpvGYFbycWyzsbo
gtIBbz4SM3dfdJ1p66G490ImVEFbHC4knJJ2IGLOHkw9M21Zzy+aujO/u79fDvUN+3BRClKPyhGl
HEp1EE5Yfynq2lS3pp0Pl/gMigCcFXxEgNABgNIAlXM5WVZl10Vt2mUkQMPoSITwEZhVj8t4bYvp
GnlZdIVn9FDIhNIWk3Ah4Yg5h0g4q/rZ1MO6syNs35qDY1WlyIKRAUk2DjU0uBp0KrlYJVsq14Q+
nbQGXhdWjZjB0vJDaw4OtpUgC0YmLFk4wlCzWPh6tk0ng1gxUawwWEDJnsX4WDZSBr/t4tfy0bSq
Mb7AfESeD0Us1q9N9RqY2duFTCgsLw0XEk5oc4mIs9X6er11bW2aTgbBhmJYYbCElR2L8LGSrlkM
T4KH5iwg6yaJFg4NOHJ4gKfLu9ur31Oz9Jcc2O15SFTVCFtAdr4sD8jYulksK9PPWIqAMrcIwGl5
owFCByAaB1TG5X3/ak7rOdw2ZsBoZ1GwUGDE0Z7GuJmYrusJj81PU/t3LkJ1JoKWd0yGKGQgSkNg
yG7XP+MJad0XMqG4yBRcSDijziaSzm6LZVDZuj0PqSMszBaQDeraAhlbsfNmxvlS8zypeX7Ez4v0
+bDoise2qMX7qKfdnodkbaXZArIBWy6QsGWq4s2/M7VvzICxkhJgocCAHotGuGmmK/+G/K7tdBQr
Js4ViAtoOcBAK9dtMY/Z2dXy0Sq2EnyB+Zw9CwpafHxbmpDBvj0PqWIuwhaQzRl7BxK23upiUU6l
f0LTGpFm8DAl3IOKYV0emyIqKYDfGBowfbW9M2arfW86GYTKi2OFwebrObAIH3VXdm+Ojk3LqRhW
RowqCBVQsUNhJh7Meupv6qkZKtmXssEKklJ4YfGUNptJ+Gvbph08wjy05uBYYSmyYGRAk40jDA3k
nOJFRYmKDU4E7CD4DNmt5GJ5PWpPkgd0SBj8NHnD3G5KMtC2bc4C8sKiaOHQkKo9D/B0XbpfD+j/
+TQEqiTCFICZL+EdBP3tb363fAWbxgwYLiMGFgrMaNnRIDf+M6Zd2+koXIzGcyWLy2jhnif1tAdT
zMxgyGxbc3C4myhZMDLjZ48jDDXTlQwmz4fWHBxrKEUWjAwYsnGIoXbhv4a4azsdBbuJcgXiEl72
MMDK56Ic7LK3azsdhVpJcAXi5luxYICVL4+3Xz9V1UVTVcPP/w+KABwVdkyA0AH5CkNUymU9fWna
wHOFQRGA8y5HAoQOgFx6VMrlclmZLubSLgJw3uVIgNABkEuPSrlsTREzeShlg3mLSbyweMigw6T8
9Xv7xQRatXw0rzDNF5gPSXShkMXzh4jCfSETistLwYWEM9psIuWsEBOzdihlg3lzSbyweMiewwT9
9TvxJBxaZSRAxWU6QvgIzqnLpbw2s7eY00MpG8y7TOKFxUMOHSblb9V1TR0zaBcBOG9xJEDoAMik
R4Vcbr+/GHHpFAE47nIsQOgAxqVPpVxGb8Vl3YfTvQmnewdO4fabxr23y/4xYGQQ2rV8NO5vhC8w
n3HoQSmLZbvu3LSxyY1fZyJ4o+MZopABmR2CMbuvUa+vOUZfVV2+qlp85f298uYC7wfa7XlI3pnS
u4IeG/KFvjPYEyOD7PQRpji8FMcWPbDwUXW1eDKzmCyrlo/mtaX5AvMhgS4Usnhdmmo2iT4r9MpI
AK5zPEL4CEbqkEt5jd83zbtnqny/VPleqcZ9UpV7pP0Kqn4zjLapJH5dH+5FxikIPjJJ1JIo7RE8
eARER/C+lA1WEaw6gm08p5Ifwf0+6DGBVi0fzStM8wXmQxJdKGkxMT9yy0iAjk7l+dEgApSqMT/6
ElvP8SVjPccXzfUcXzTXc3zB13N84ddzfDFF7ILTKmWDeXNJvLB4yJ7DBP2V9Tyh8FAl8CoikwmC
J3A6HSxltFtUMZ2HUjaYF5nEC4uHFDpMyN9NapJ6kzlLvdGept5oz1NvVCaqNzoz1ZtFMY+qtGr5
aF5kmi8wH9LoQimL9XIVu9iwa/lo3mKaLzAfsuhCIYt/mre5ia2Qc4oAHBc5FiB0AKPSp0Iuv95E
PO4LmVDcXwouJJzxZhMpZ8WTiU1M7Vo+mpeX5gvMhxS6UMqiWY/n2BW/UwTgvMiRAKEDIJUelXJZ
1j9jJg+lbDBvMYkXFg8ZdJiQv9tiGdF3qORicXlJuqB0Rp2DxMy1/1oZE7VnVwm8gsWRBMETKJse
ljJqZmXslXC7lo/mXab5AvMhjy4Us1ivohL3pWywgsIUXlg8JdBmYv66+CDsssZgpzsEO90R2CkM
wE5j/HWmjQs0bZZB0+oqNK2uQ9MqSDT8l25um9gF4qGSi+X9NZrXhQ4dctfwV4R3iXfe7vLeebtT
fuftTvmdtzuNd97uVN5523aOabSLAJwXORIgdACk0qNSLpfd57ZZxS70vTISwBsdjRA+ArI64HJe
y+j3GpwiANcwWqp+r8EPwGyWCt9r2GITrwQMOkAhSl6V3wEIhZB+VVb+3626+CIApwjAea8jAUIH
QD49KuTyvmiLeVssXyI6/ToTgUs9IkMUMhi1ATBod5Ewu8izulA2ulC2udAwyb+pc9/Gno4cKrlY
3l+r+UTEoUPuWqNgrpn3O2tG9TllJEBB5FiE8BGUUp8Lef3HquliY9Ku5aNxnSN8gfmMSA8KWZxs
WiManSIAx0WOBQgdwKj0qZRLU8Xv8zlFAM67HAkQOgBy6VEpl5td8mIu7SIA512OBAgdALn0qJTL
ZRG7s2eVssG8xSReWDxk0GFS/rq3KjoUrVo+mleY5gvMhyS6UMjiY//nL4rUffZAFywIV3tcjOjE
MKLDbNS3qaqk7EOdiVDSnMwQhQxSsANG7TZpuU2220ZfbaNvtlES2yh5TUnNNKqtU9ulikgdiw/N
r5TIQxkJ0NGZjBA+ApTqcEmvk+2z1JRbtwsWpON4NEZ0YkDXAzbl2yyWVRG9zeuVkQDe8WiE8BGQ
2wEX8/q7S+xZ6JWRAAWvYxHCR1BefS7ltezisyerlo/mdab5AvMhkS6UstgW09iLuHYtH81bTPMF
5kMWXShk8Xti7fz3vLXz35XXzn9XXjv/XWPt/HeVtfPf65918ys22XWrBJ53OZYgeALk08dCRn+U
MxPb69eu5aNxlyN8gfmMRw9KWCzk5eKlqOfm6tWX6JaywazCUbyweEDggEn4W5+om/bN8bZtOhnE
eopihcECXvYswMfN5fnFqpWmtY3sGzNgqJUUWChwvhmbRrr5Z9m9/OjlBCXtqwReR1sqQfAEUKSN
ZYxeFl3xVIivctecBaTlJdDCoRFdFo/xdF1M/R+qQ2sOjpYUJwtGRhQdcIyhm3pmfnt+Nm2no2g3
Ma5AXMTLDsZY+dO8PfRzRk/MrjkLSOtJoIVDI5IsHuNp23eybvZVWZVcLC0sTReUjmhzkZC5pakv
zx/Mv1ZGOt+dXctH4/5G+ALzGYcelLEY9neyOT1nerZgT7Shx7aopRi8xO9WcrG0rTRdUDpizUUy
5n6YVta8yH3CYAcohNZ5VIhohCByg2TCcb+3g+O0bzgRwjqLQIWAAk7eSZSD/rJ74KFvzIDxPiJg
ocCQl3ca4GZ9tfDUFO1scO5zCplQ1NMYXEh4vi+fCDj72kwLf66xazsdhUpKcAXi5quxYICVzbeF
37cRrozzlMQrZYNRVeN4YfH54oZMyt/7E+hPq1nZbN/z/NbMzMBluBsayDs+Okr0oiD3UT52HLRt
MxzCm9YcnILUCFkwMqXsHUcZWv+uDuYsTiETyqtKwIWEQ8IsIujsmzEzM4uas8pIgIrFdITwEZxR
l0t57ddUDmz2jRkw3lwELBQYsvROQ9yIrC8W+3sqtalcQXYlFwurGqELSiekeUjOXOA0eWjPQ2o4
UzojOmzMF3oO3BDvmzYkq2/OAmqoiqCFQ2Oi3nmEp3JhHt+W7uXce9vpKFZPnCsQFxBzgIFWPrVt
8RZSsylkQlUkxeBCwjldOyLhrFlJ4Ndp35qDY1WlyIKRAUk2jjC06jb3NoeS7EImlFU1AhcSDgjz
iKCzuycx7at3C9mr5aNV5CX4AvM5hRYUtPhgpk07CzncVnKxKv6idEHpnLs9EjD3rViYWX8j+bZY
2t7s9jwk6myELSA735cHRGy9lvOic2/T7xszYLCkOFgoMKHnQCPceA/NTng6pvEYTON5F/Zgi3uC
1ZOuy6pzZxCH1hwc7iNKFozMuNnjIEM3a9rg9GW15yFxTwm2gGzGlQWEbPmPOHZtp6NwQxrPNywu
Y4Z7uvGt6crncrgSym7PQ8KGkmwB2YQpBwjYunt+rsrabFZsXDSLZWWCdycS3dBAVO2/FyV6Ufni
03ziOFj643XbciqGFbnUGJ17KqBnCY5ImZZV1f9K+rN1t5KLZQ2N0QWlA8Z8JGHu1bTPVfNrePa0
C5lQVtsIXEg4IM0jAs7ui7nZvMBUBn/3AmUkALV4XITwEflGw1zEa/fy90tXZd9yKgYWFqEKQiW0
vKMIE6Ytm1k5/Wfx6vya2e15SNZNmi0gG/DkAglb1WpeOvPAbcupGNZNjCoIFfCxQ2EmBqsvrOYs
oIIYlXUXLppSBK65uG+Wk67/zPdg7mAXMqGsrRG4kHDAmEcknLXN1IiU9fymlvWfH3wiINgBCmFd
HhkiGiGA2wiZcbzdOncwLu1CJpR2mYQLCUfcOUTA2cPn84umcp+97NpOR6GSElyBuPlqLBhhxf8a
2CnfAVP5ApjKt7+4r36B3/vaoK5+T83gPq1bycXyelJ0QemQMBtJmFt3c3yt//k0BOsmzBSACXjY
goC//ck/vgZHjd2eh0StjLAFZOdb8oCErR+fPwU+7m81ZwFZVUm0cGhAlMODPFXd5+pt+XJpniPG
Bh2gENziMSGiEcKYDZFZx2nB2Xb11ep7VZKqZfSmM4u0VasHFaNlN50iKimoZRcNma7nlfHd9m2n
o3B/Ea5AXMbRO4yyUi6KzmwuziPjb9iDiuH9HZMiKimQ2xAaNZ2UnOtXXa26VR2hSi5vm8jOyZEu
WJCS3bEY0YkhTfts1PdmYcpz0y6Syv1eZJyS+COSRC2J1B/Ao0fALDyLsmr5aCXHM73Zlcsnfc5U
Zluz86apTFFHPL5XCbyWy3iC4AmozwOWNXq1/Zcc3NUN9qBitOymU0QlBbXsolnTN3Vn5u4bk8Mq
gdeyG08QPAG1esCyRr+aet69RIRuiwBcS2c0QOgAVOaequHSfwkz2AEK0fWq8a5mLETBL/cWp4X+
tlo8RU/A2yIA1/IaDRA6APW5p2q4TIzXQwcoRNer8nh1QhT8qozX+9Zsvpv0SZbrP/vQT8sisgM9
6Vgt/celiWoaekCEI9gjw1+K5JWywVqyNdYqDfGoTnAF0wE66dqynkcMbosAXMtiNEDoANTknsq6
3N+6TPwYO324KC3BYzmilIPq9uGk9ZGnR/lPjj7gqdEHPDHSelqk8KToomynVeQhr1PLR9M6x/gC
8xGRPhSyWJXL/pXniEe3SuBxl6MJgicwPgdYyKj/FtGu7XQU7kzjLSKLy/jh3iLa0BbLpl573v7I
mvZ6VU/jv4pj3VX+BXjN/3ak6EdCB8doDnTcrFqJrZdzavloXP8IX2A+I9aDMhYvzbOEHVqVXCzt
L00XlI64c5GUOZnGzO0ruVjeXIouKB0yZyMhc810FdL23pwFxIXF0cKhGVUHHuMpPLpOHll6o0pv
RMGjiR5J77z+MxVFPTVhU7sqgVcyl0gQPIE0aWFVjAbuwwZ6UDHKdpXuwIZTNCyjd1+vqqpciomd
ZO0iAOfVjgQIHQAJ9aiQy+Db/FZ7HhKXp/Y2v8tmlOFv819fnVemnoVHnlsE4LS80QChAxCNAyrl
cnM38Lbo2vJ3zOiwCxbE2z0qRnRiINNBNufbu8EXtx7uCIdqHAFHh4lmGHY0RBPQY0LK2Jutww5Q
iJL7dIhohJCuXTLnuH5tqlczdqoP9CLjNJQflyRqSZj8MJ46Ai7L5+eVrK/C5i9dWc9jh0C4GxrI
HwRHR4leFHQYRPnccSDLqphusLfFMn4chLqhgRrHwZFRoheFHQcRPngcdEXdbQ60xEHg9+GiVPQf
kSNKOZz4AByzvu4weSlmza+oc78HFaPg+4gUUUmhXAfQlOnrqmmid2nsIgDn1Y4ECB0ACfWomMtV
Pf0UdWkVAbiCy3SA0AGUS5dKujxPuTzPdHmu7fJc2+W5istzHZefUy4/Z7r8rO3ys7bLzyouP+u4
fEi5fMh0+aDt8kHb5YOKywfe5ediJVIW9Xm1it7gDvThonjBx+WIUg6kOwynrN8sinn0HrZdBOC8
4JEAoQMgpR6Vcnlr2rhLuwjAeZcjAUIHQC49Kuqy35M36dPqAIUoeU2HiEYI6dclY46bdvnSVM38
LSrZ70HFKGg+IkVUUijRATRl+u75ef3/PWbZqRJ43u5YguAJkFUfSxm9b8qR5wCDHlQMb/eYFFFJ
gSyH0JTpydJMV1XRjj0EjvRjI3n3x2eJYhZ0HMQDuKOhSQ97vwMUoiG+0R/zgRBMdaM14h/LKjrt
tmr5aF5qmi8wH1LpQjGLq/ZpVZl6Gnfp96BiFLwekSIqKZTjABoyXVZddEmuXctH415H+ALzGZce
FLLY1LGf1EMlF4v7S9IFpTPuHCRn7rqInmXdKoHXsJhOEDwBs+liWaPXTbsourRXpw8XpeV4LEeU
clDfPpy1/q1YjIxlqwcVo+U7nSIqKahrF82anrTTtOhDByhES3MyRDRCUMkOmXX8vS3Tjg8doBAt
x8kQ0QhBHTtkynFrynm9/SMxy8MuWBBv+qgY0YmBbAfZjO/IqrnT18sprpRTXCNHr47D18UlNgvP
2ylceZtw5T3CNTYIV9kdfAN9sPeRHyg8VAm8ishkguAJnE4HCxlti1lpYneYvCqBx42OJgiewBgd
YDGjy5dyKlGjdpXAKxgdSRA8gTLqYRmjX/40beQLyHYpG0yLHMELi0cUekzGX2Ilcd46YuVVxMpr
iDVWEKusHw7uR3nqPpRq+0+q7TvJ7jcJ7zMZ3V8yZ19J1f0kVfeR5PePVNg38mtZR06HViUXi2tL
0gWlM+IcJGeuaNPXDME+XJSG12NyRCkHcx2CM9Zv41vf3Gbte3Oru+nNre6ON7cK293caux1c1u0
P2PrgJxaPhpXOMIXmM9I9KCURfkZc7iv5GJ5fym6oHTInY2kzPXfYBtI6xszYLyqCFgoMCTonQa5
MV0xK7oiMrLcKoHHtY0mCJ7AiBxgIaOlSFnPE4+aAj2oGNzuUSmiksJYDqIZ09st0j2528YMGK0w
ChYKjIja00g3gfsyh0ImVMeT0n0ZBw76Qu/L3Bfl4Fy5aTsdRUuKcQXiImp2MMpK7OI769pb99Jb
98pb4cJb47q7Z07MPGBt3ZqD07AVJgtGxixtcaihT+3005OEPW1r+WglZ1G+wHzS3x5KW3wwVdTi
upaP1rMY5gvMhy1uoajFi6oR0//vsMh9GQlQ0pmKED6ClGpzWa+r9tV0zcXqqYyfbL1OYJiW6dEg
0QpCrQ/oau6jp2ivExj2Ae5Vz97DIC33GudzCz9ZNE33ctTo33fFgz/gaEjFiW6c1pFhZygfH0ed
IfZd8eAPOz4+7Jxhx+keH3rnj3+sillbdONzB7sjHKp7ZIyEiWaYwlHhJageE2NnDLsjHPpBx8RH
nCu8MM1j4gPOE8fNNYbdVf4FPugo+bh5RzBS84jRnn94QUefUbB5SPBf4EOPmw89xyjPSYI56HHT
L7nsmuj5ZV9GApSOg1SE8BGkZ5ur4PVL05b/19RdUY0YdjrCoarWx8JEM4w/EvwE1WMi+usQ6AiH
ftAxofpbEA7TPCbUzv8jR0K+/w+w/gGutQyref2x7lhOR8/+Vjc0UNV3Okr0onj/Ll/xOBgZ51Y3
NPBDjoMPGP9ulN5xoHI+kC6mXrpcrJpg6TSdSodrFHzd1W3zmrpC25eRACWRqQjhI0ilNlfBa/SM
vC8jAapeVc+8dgTvFT7TdtEvnLhFAK5gtFP9zskggLLZKXzrZLPfjK+wOW0NeaO0hrxRWkPekGvI
m5K2EprJ7NrzkCqGtOYwFpszxc5fmupt3sTOh04RgPPyRgKEDoA0elTOZRX93olXJfAaOivVb58M
EzChlcI3UO5bI6Z9NZ9kuf4zD0VXNr7VYQ8qBrd7VIqopDCWg2jG9EMxK4sq/bWbYB8uivZ9bI4o
5SDOY3DI+rqnL3nddDIIVxjGCoNlBG1ZnI/I2Mv5cvuD6gfbH1S/0/7Af579QeGr7A+mnpm2rOc3
dRey51QJPG9xLEHwBMimj2WMrv8THoqHQiaUVpiECwlHxDlEyNmmMaLNruWjcXkjfIH5jEIPClmM
bZI+ydgffaK5NfpEc1f0Cb4h+oTfC33SNcuItEMlF4trS9IFpTPiHCRlrv/xDNwwPRQyoby2BFxI
OCTNIlLO3mKbU9ulbDBv7k1zZ2oPD9l74/elnvwqu2nkSzdOLR+NKxzhC8xnJHpQyOLb4qmpIhbt
Wj4atzjCF5jPWPSgjMXH6B5Pjzn7Oz2q7u30qLqv0yO/p9Ojwn5Oj5NlEXlyaJeywbi8NF5YPKPP
ZUL+zO/uotnctYlYHHSAQnCjx4SIRghjN0TmHMflZlnV1anrUUGghrn49xi9KoHXsKj7bcZhAmZT
4xuNG24jZVc29fqKNCF20AkMU9F8TJBoBXHSQ3TIfdnF7hjYpWwwbjeNFxbPmHSZkL+2qOW5aRe+
vF17HhLXlmALyGaEWUDYVuC2qlPLR6uZU7q/6vNZg+hd1u912T2+LY3/Us2+PQ9Jm0uxBWQjxmwg
ZEsiv2+HQiYUFyaKv2wOnFEm+K/aj/huvz+ydvv9obvb7w/d3X5/KOz2+0Njt98fpfkV0Xeo5GJx
eUm6oHRGnYPkzE2WZhrQ1jdnATWERdDCoTFV7zzG0/80zeLqdTi+9u15SFpVii0gG5FlAwlb09aY
2vG0aTkVw7qJUQWhAj52KMbEumXdY2pEmvZbMzOeFr+MBNDCjogQPgJRGeASXk217lg27iDbNWbA
WHMJsFBgwJJFI9wsjZm+TN7q7sVIKcPfrECdiWDlHZchChmA0jCYt/u9f5++qKcmYXjfh4vSNJ3K
EaUc3LgNJ6yv/6mYu5K3TSeDWIVRrDBYQNCexfkYnlut9jykhh6dc6jLxkSR58x+5ejkxRjP1a41
Bwd7SpAFIxOOLBxqaPCcxqnkYpVsqTyh8emkNe7pTP+03PbV//NpCNRNhCkAM9/DOwj62x/8CO0b
M2C4DJXfHhvMaAF/dXrcrenaciq+nffmLCBuKI4WDs1YOvAgT49tMf3pW9o0ZsBwQzGwUGDGzo5G
urlYmaCei1ykjqQwW0A2qGoLhG358zi/lo9WM6cxmwvwWYPsjG5DjSrM8acqT9Ucrw10Vi7MQ1HP
3RVSh9YcHKsqRRaMDEiycYShXvhwqr5vzcGxhlJkwciAIRvHGKq3q75DmuxSNpgWNoIXFo+o85iI
P2P+WVQ/Teuq27Xm4GBhCbJgZEKThQMMfb8ZjKz3ppNBqJg4VhhsvpIDC/HxYP61MtIFtNiVXCws
aYQuKJ1Q5iEJcw9fHV0PX08CsGKCSMlHAgo2HOLvXUx7a0SKuflS1LPK/a0ZVgk8K+mYBMETAIUh
rIpR+VYsjCwLd01Fqh8bqew7mSWKWRrHgBMAHA0/Hh+9O43bllMxqMsoVRBqvp89ijHxYObeCsN9
YwaMVhIFCwVGxOxpgJt/Fq9m8lKs6/6CXreSi0VVjdIFpedLGyAJc+bp89e/7z/Uu/nUiPv8PtyD
imGNHpsiKimA4RiaMv1p2pWv5qZ+bgaKD6VsMC81iRcWD2l0mJS/89Xzs3uJYTVnAXlnUbRwaMjV
nkd5eh+5g9sogyIA582NBAgdAFn0qJTL63Z9SfEUHnhWLR/Ni0zzBeZDGl0oZXHdYb4GDwy+t+ch
eXNxtoBsyNgBSNnaToEig84uAnBe3kiA0AGQRo/KukxcXBDXFh9yafEhVxZ6FxaK1xXry9JZYKRu
m7OAvMUoWjg0ZGzPYz3dt2ZaStnU1027KLqINq8XGacldTxJ1JJQ5UM8dQT0a81WrRk4f2/PQ/Je
42wB2ZC7A5Cy9b0uN99Oa6aF/3J9qM5E8BbHM0QhA7I6BDN2/yy7T3W5KIILzEJ1JoK2e0yGKGQg
dkNgzO7FZHJdVp1pf/RWh3bdOhOhYHc0QxQyKLsDMGn3tuja8ndQ7LaUDdbRGcULiwcl7pmkv+0j
0IdVFR6chzISoOMyGSF8BOjU4ZJe99+cjZ943S5YkI7j0RjRiQFdD9iY78uiKy5Clt8LmVAFo3G4
kHDK3oGIObs1s7L407xdtW3TDs05ZSRAweJYhPARlFGfi3t9X5MXuaoJ9SLjFGWPJIlaEq3ew+NH
wGTNH96wGHaAQhSVx0NEI4QWfSDjjiVuV7LBikZF16UoWBTU36rb3PC4exLTvprQD7DXg4rRkDqe
IiopmOIhGjMdfHHBK2WDFaSqvZEwxFMa4fcOttD7pgxNoDbNWUAFZzG0cGjK1Y6HeUq8KR7sAIUo
WFR+dzwWQplVeY98jZ4005/G97ptzIDR/qJgocCIpz2NcPNiTDUcdPvWHByrJ0UWjAwIsnGEobKe
Nb8cO5uWUzGslRhVECpgY4ciTDSt9y2MbcupGNZEjCoIFTCxQwEm/vv262UzXfmbM1nNWUBUTBot
HDpfkctjPH3puuX75xo8VVYlF0sLS9MFpSPaXCRu7ur31Cz9BVSRLliQotRUjOjE0JptNu5780KC
keFWJ4luaKCi+7Eo0YuijwGfjx8H35dVU8ziB8C2zkQoKo9miEIGLXkPZuxOTFsWVfl/7kTWKWRC
aZFJuJBwRJ1DJJzdF93LVW+q6NyH/W4lF8tqG6MLSgfE+UjMXHDq5FRysQrm1OZHPp0yB8+Gtsxl
O3wK75WywRryEnhh8Zg+i0n5ezCyqrqBu21zFpB3FkULh4Zc7XmEp8nXx/1mmo4pu5AJZW2NwIWE
A8Y8IuDsl3n6WXafVrOyCbyQPKwSeFThUQmCJ+TLDGJZo/dFXQ8/QhbsAIVoqU2GiEYIKtghY45v
Ls8vVq13rvVK2WAFoym8sHjKos0k/fWryZ8KMUGDuyIA17GYCBA6ADRpUUmX18V0XXgLqnyv5aN1
RMb5AvNBjQcoafGmnpnfQYebSi5Wx1+MLigddLdDkub+NG+bHWmC8nZFAK6jMBEgdAAo0qKSLrd/
ot/qOKzTqjMROlLTGaKQAap1waTdwAoCv5aP1jGqtI4gwAdNomsJ9tTN6tL1b7B3SzVUZyJ0jKYz
RCEDNOuCMbt3z89VWZv0baFAJzBMQfZxQaIVRGkP0zH33t45+8YMmIJLhd10bDDlamxnHVlN+7u5
z6uqersvWjGzff2Px6vJ49nF3e3916vHqz/++H9QSwMEFAACAAgAoYswRh0OOUsxAQAAJgUAADYA
HAByZXRyaWVzL2pzL2RvbS9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZGlmZi50eHRV
VAkAA966uVTeurlUdXgLAAEE9QEAAARQAAAAvZFBTwIxEIXv/IreFrJ0GzQhHhfFGKMRwiZynt0d
lpKyJZ0pwr+3QaOCJEZZPM1h5n2vfU9KKdSzNX6JpIbAoG6nmZpi/qD5fVx7bUo1QYNAqAxsrWfJ
SCwdkjdMyiE7HfQLUqVdqsrYHIwsbE3sfMHWkQQOJ7kPMombFRaMZcIbbsVx/N/+ULAHs3NPUyF7
V/3Lbl/Eu9nriTRtifEgy8QoX4R3JhXy6KUeO7tCx9shUuH0KjDbbzZdEU1hjdkcwv7Jlhh1kjnQ
F0k7IuSoIzSJGRjCk/FYh7Qc5AabY4awZrryH9QQHLbiX0Ixv3u8mGBdotN1dWNrxk34ebIG43fU
4xeN+RzmXu3nfi4bOo/NsZqbYh+tW/wBPihYr/G+ntlvPX+uTif/0Gzj/INKXwFQSwMEFAACAAgA
oYswRm87z89YJQAAMuwCADoAHAByZXRyaWVzL2pzL2RvbS9nbG9iYWwtY29uc3RydWN0b3JzLWF0
dHJpYnV0ZXMtZXhwZWN0ZWQudHh0VVQJAAPeurlU3rq5VHV4CwABBPUBAAAEUAAAAL2dX3PbOJZH
3/tTuOZldqu25mG+QfwvcXUceywns7VvtATL3FCkhpdy4v30K0qWBIAAqBHOdVVXVwcXPr+0D0FB
JEg8GunOuubM1LJqzVn3UnRn86p5KqqzaVNL166mXdPK2Uvx2lfNWVvOX7qzouva8mnVGfnjj7v6
TFbTqRH5r7O3ZnX2q6yqMzHmrFj/uy2NnDXPZ3+5/zSZ/OVsse5VzM2653NTVc0vMzt7ejv7y+PV
5PHs4u72/uvV49Vf/vbHH3/03c/unv7XTLu/zU1396u+b5ulabu3SyPTtlyu/1b/sf2L/tfZXz/V
RfW2DvvWzMxf//Nvr0W1MmelnNnteciXQqwf+I+/rgF//c8+4rmoBGYLyDb1amHa4qkyEHB9VDyX
89UeuT5C/n1iuSi6sqmvXk3dub7sSi4WdjZCF5ROePOQhLn1sHd8rf98GoJ1E2YKwAQ8bEHEb381
Kxvn1983nAhhBUSgQkABBe8kysH56vnZtAMT2+YsIG8lihYODRna81hPk2bVTs1gahDqAIVoWUyG
iEYIatYhU47Xha6sNx90QcVenYngBY9niEIGpHcIpux+LaUzdeBcuytkQnmRCbiQcEidRaScBYfh
qWNPbcCpjTJ2aMHj6b5oi8VAzqY1B8friZEFI0OCdjjMUNv0l1LKej78dhyoMxEK/kYzRCGDcjoA
A3bPi7Yv20Lfm04GodriWGGw+XIOLMKHeW5a87UpZoOB5pWywaynUbyweMDbgIn5+15XcYNWEYAr
WEwHCB1AmXSphMvyX6tidl1W3fAavl/LR7Mix/kC8wGNQyhhcf0fjrn1n09DsIbCTAGYgIktCPjt
X1x+evw0Wfddfwu3LdjteUjUyghbQHa+JQ9I2JpMLl6Kdv2/+bCqnPOdW8nFss7G6ILSAW8+kjF3
3dTddTE1AXV2KRtMyxvBC4tH9HlMxt/NYtm0oYF3KGRCaXNJuJBwxJpDZJz9ad6e22IRGnN2KRtM
mxvBC4tH7HlM1p8kBEqeQVFWKMoORUOioBZvzawsAgb37XlI2lyKLSAbMWYDGVv3xTx0vtw1ZwFp
VQm0cGhElMWDPLXlouzKV/Ojt+TbcooAHDc3FiB0AGPRpzIuA+PttLGmNM6Uxhg5vtCx1cP6m9wB
J31zFlDDTQQtHBpz9M5jPE26t8pcmmlVtMXgEtawjATQ/o6IED4C8Rnggl4DJ8V9ex5SRaHSOdJm
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
AQAAAKSBSeYAAGNzczMvZmlsdGVycy9odWdlLXJlZ2lvbi1jb21wb3NpdGVkLXN0ZGVyci50eHRV
VAUAA/65uVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACACdizBGtYXEnOIPAACQ1AAADQAYAAAA
AAABAAAApIE45wAAZXJyb3JfbG9nLnR4dFVUBQAD2rq5VHV4CwABBPUBAAAEUAAAAFBLAQIeAwoA
AAAAAE2LMEYAAAAAAAAAAAAAAAAFABgAAAAAAAAAEADtQWH3AABmYXN0L1VUBQADQbq5VHV4CwAB
BPUBAAAEUAAAAFBLAQIeAwoAAAAAAEeLMEYAAAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQaD3AABm
YXN0L2ltYWdlcy9VVAUAAzW6uVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABHizBGIY+9ODIA
AAAzAAAALAAYAAAAAAABAAAApIHm9wAAZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLWNyb3AtYm94
LXN0ZGVyci50eHRVVAUAAzW6uVR1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAABNizBGAAAAAAAA
AAAAAAAACQAYAAAAAAAAABAA7UF++AAAZmFzdC94c2wvVVQFAANCurlUdXgLAAEE9QEAAARQAAAA
UEsBAh4DFAACAAgATYswRnL9ZfKFAAAA6QAAACUAGAAAAAAAAQAAAKSBwfgAAGZhc3QveHNsL3Ry
YW5zZm9ybS14aHItZG9jLXN0ZGVyci50eHRVVAUAA0G6uVR1eAsAAQT1AQAABFAAAABQSwECHgMU
AAIACABNizBGiR8h/pcAAADAAwAAJwAYAAAAAAABAAAApIGl+QAAZmFzdC94c2wveHNsdC1iYWQt
aW1wb3J0LXVyaS1zdGRlcnIudHh0VVQFAANBurlUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgA
TYswRs+PZg5QAAAAoAAAACQAGAAAAAAAAQAAAKSBnfoAAGZhc3QveHNsL3hzbHQtY29udGVudFR5
cGUtc3RkZXJyLnR4dFVUBQADQbq5VHV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAE2LMEaBSnet
SwAAAKwAAAA0ABgAAAAAAAEAAACkgUv7AABmYXN0L3hzbC94c2x0LXRyYW5zZm9ybS10by1mcmFn
bWVudC1jcmFzaC1zdGRlcnIudHh0VVQFAANCurlUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgA
ooswRuG1vP8cAQAAlwEAABEAGAAAAAAAAQAAAKSBBPwAAGZ1bGxfcmVzdWx0cy5qc29uVVQFAAPg
urlUdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAW4swRgAAAAAAAAAAAAAAAAUAGAAAAAAAAAAQ
AO1Ba/0AAGh0dHAvVVQFAANeurlUdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAZ4swRgAAAAAA
AAAAAAAAAAsAGAAAAAAAAAAQAO1Bqv0AAGh0dHAvdGVzdHMvVVQFAANxurlUdXgLAAEE9QEAAARQ
AAAAUEsBAh4DCgAAAAAAZ4swRgAAAAAAAAAAAAAAABAAGAAAAAAAAAAQAO1B7/0AAGh0dHAvdGVz
dHMvbWlzYy9VVAUAA3G6uVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABnizBGFTU1knoAAAC8
AAAAKgAYAAAAAAABAAAApIE5/gAAaHR0cC90ZXN0cy9taXNjL3hzbHQtYmFkLWltcG9ydC1zdGRl
cnIudHh0VVQFAANxurlUdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAW4swRgAAAAAAAAAAAAAA
ABQAGAAAAAAAAAAQAO1BF/8AAGh0dHAvdGVzdHMvc2VjdXJpdHkvVVQFAANeurlUdXgLAAEE9QEA
AARQAAAAUEsBAh4DCgAAAAAAW4swRgAAAAAAAAAAAAAAACoAGAAAAAAAAAAQAO1BZf8AAGh0dHAv
dGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L1VUBQADXrq5VHV4CwABBPUBAAAE
UAAAAFBLAQIeAxQAAgAIAFuLMEZjqqxsggAAAKgAAABAABgAAAAAAAEAAACkgcn/AABodHRwL3Rl
c3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtYWxsb3dlZC1zdGRlcnIudHh0
VVQFAANeurlUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAW4swRmOqrGyCAAAAqAAAAFIAGAAA
AAAAAQAAAKSBxQABAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3hz
bC11bmFmZmVjdGVkLWJ5LXN0eWxlLXNyYy0yLXN0ZGVyci50eHRVVAUAA166uVR1eAsAAQT1AQAA
BFAAAABQSwECHgMUAAIACABbizBGYEtmEJEAAAD7AQAARQAYAAAAAAABAAAApIHTAQEAaHR0cC90
ZXN0cy9zZWN1cml0eS94c3MtREVOSUVELXhzbC1kb2N1bWVudC1zZWN1cml0eU9yaWdpbi1zdGRl
cnIudHh0VVQFAANeurlUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAIoswRuqKfEJhBQAABQ8A
AAoAGAAAAAAAAQAAAKSB4wIBAGh0dHBkLmNvbmZVVAUAA/C5uVR1eAsAAQT1AQAABFAAAABQSwEC
HgMKAAAAAABlizBGAAAAAAAAAAAAAAAAAwAYAAAAAAAAABAA7UGICAEAanMvVVQFAANturlUdXgL
AAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAZYswRgAAAAAAAAAAAAAAAAcAGAAAAAAAAAAQAO1BxQgB
AGpzL2RvbS9VVAUAA266uVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABlizBGJn7o8G4lAAAc
7gIAMAAYAAAAAAABAAAApIEGCQEAanMvZG9tL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmlidXRl
cy1hY3R1YWwudHh0VVQFAANturlUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAZYswRlFDcRUs
AQAAFgUAAC4AGAAAAAAAAQAAAKSB3i4BAGpzL2RvbS9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJp
YnV0ZXMtZGlmZi50eHRVVAUAA226uVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABlizBGbzvP
z1glAAAy7AIAMgAYAAAAAAABAAAApIFyMAEAanMvZG9tL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0
cmlidXRlcy1leHBlY3RlZC50eHRVVAUAA226uVR1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABl
izBGLhR7pC4IAAAjIQAANgAYAAAAAAABAAAApIE2VgEAanMvZG9tL2dsb2JhbC1jb25zdHJ1Y3Rv
cnMtYXR0cmlidXRlcy1wcmV0dHktZGlmZi5odG1sVVQFAANuurlUdXgLAAEE9QEAAARQAAAAUEsB
Ah4DFAACAAgAaoswRhneWjFfAgAAlRAAACsAGAAAAAAAAQAAAKSB1F4BAHB5d2Vic29ja2V0Lndz
LmxvZy0xNkphbjIwMTUtMTcyNTA1LWVyci50eHRVVAUAA3i6uVR1eAsAAQT1AQAABFAAAABQSwEC
HgMUAAIACABZizBGNwBprwoBAACPAgAAKwAYAAAAAAABAAAApIGYYQEAcHl3ZWJzb2NrZXQud3Mu
bG9nLTE2SmFuMjAxNS0xNzI1MDUtb3V0LnR4dFVUBQADWrq5VHV4CwABBPUBAAAEUAAAAFBLAQIe
AxQAAgAIAKKLMEaHCtEZhiYAAGGkAAAMABgAAAAAAAEAAACkgQdjAQByZXN1bHRzLmh0bWxVVAUA
A+C6uVR1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAChizBGAAAAAAAAAAAAAAAACAAYAAAAAAAA
ABAA7UHTiQEAcmV0cmllcy9VVAUAA966uVR1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAChizBG
AAAAAAAAAAAAAAAACwAYAAAAAAAAABAA7UEVigEAcmV0cmllcy9qcy9VVAUAA966uVR1eAsAAQT1
AQAABFAAAABQSwECHgMKAAAAAAChizBGAAAAAAAAAAAAAAAADwAYAAAAAAAAABAA7UFaigEAcmV0
cmllcy9qcy9kb20vVVQFAAPeurlUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAoYswRiZ+6PBu
JQAAHO4CADgAGAAAAAAAAQAAAKSBo4oBAHJldHJpZXMvanMvZG9tL2dsb2JhbC1jb25zdHJ1Y3Rv
cnMtYXR0cmlidXRlcy1hY3R1YWwudHh0VVQFAAPeurlUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAAC
AAgAoYswRh0OOUsxAQAAJgUAADYAGAAAAAAAAQAAAKSBg7ABAHJldHJpZXMvanMvZG9tL2dsb2Jh
bC1jb25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1kaWZmLnR4dFVUBQAD3rq5VHV4CwABBPUBAAAEUAAA
AFBLAQIeAxQAAgAIAKGLMEZvO8/PWCUAADLsAgA6ABgAAAAAAAEAAACkgSSyAQByZXRyaWVzL2pz
L2RvbS9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0VVQFAAPeurlU
dXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAoYswRjmlYD00CAAAKyEAAD4AGAAAAAAAAQAAAKSB
8NcBAHJldHJpZXMvanMvZG9tL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1wcmV0dHkt
ZGlmZi5odG1sVVQFAAPeurlUdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAooswRjIgIx3poAYA
51omAAoAGAAAAAAAAQAAAKSBnOABAHN0YXRzLmpzb25VVAUAA+C6uVR1eAsAAQT1AQAABFAAAABQ
SwECHgMKAAAAAAB5izBGAAAAAAAAAAAAAAAABAAYAAAAAAAAABAA7UHJgQgAc3ZnL1VUBQADlbq5
VHV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAHmLMEYAAAAAAAAAAAAAAAALABgAAAAAAAAAEADt
QQeCCABzdmcvc3Ryb2tlL1VUBQADlbq5VHV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAHmLMEbX
YKCDfwAAAI0AAAAlABgAAAAAAAEAAACkgUyCCABzdmcvc3Ryb2tlL3plcm8td2lkdGgtaGFuZy1z
dGRlcnIudHh0VVQFAAOVurlUdXgLAAEE9QEAAARQAAAAUEsFBgAAAAAsACwAPxEAACqDCAAAAA==
</data>

          </attachment>
      

    </bug>

</bugzilla>